installLibrary method
Stream<TelegramClientApiStatus>
installLibrary({
- required TelegramClientLibraryType telegramClientLibraryType,
Implementation
Stream<TelegramClientApiStatus> installLibrary({
required TelegramClientLibraryType telegramClientLibraryType,
}) async* {
if (Dart.isWeb) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.failed,
value: "Can't Install Library on Web Platform");
return;
}
Directory directory_working =
Directory(path.join(Directory.current.path, "temp"));
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.info,
value: "Check Folder: ${directory_working.path}");
if (directory_working.existsSync() == false) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.info,
value: "Create Folder: ${directory_working.path}");
directory_working.createSync(recursive: true);
} else {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.info,
value: "Folder Exist: ${directory_working.path}");
}
if (telegramClientLibraryType == TelegramClientLibraryType.tdlib) {
// install dependecies
//
if (Dart.isLinux) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.info,
value:
"Install Dependencies: make git zlib1g-dev libssl-dev gperf php-cli cmake g++");
Process process = await Process.start(
"sudo",
[
"apt-get",
"install",
"-y",
...("make git zlib1g-dev libssl-dev gperf php-cli cmake g++"
.split(" ")),
],
);
process.stderr.listen((event) {
stderr.add(event);
});
process.stdout.listen((event) {
stdout.add(event);
});
int exit_code = await (process.exitCode);
if (exit_code != 0) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.failed,
value:
"Succes Dependencies: make git zlib1g-dev libssl-dev gperf php-cli cmake g++");
return;
}
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.succes,
value:
"Succes Dependencies: make git zlib1g-dev libssl-dev gperf php-cli cmake g++");
}
// clone tdlib
//
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.info,
value: "Clone Repo: https://github.com/tdlib/td.git");
Process process = await Process.start(
"git",
[
"clone",
"https://github.com/tdlib/td.git",
],
workingDirectory: directory_working.path,
);
process.stderr.listen((event) {
stderr.add(event);
});
process.stdout.listen((event) {
stdout.add(event);
});
int exit_code = await (process.exitCode);
if (exit_code != 0) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.failed,
value: "Clone Repo: https://github.com/tdlib/td.git");
return;
}
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.succes,
value: "Clone Repo: https://github.com/tdlib/td.git");
Directory directory_build =
Directory(path.join(directory_working.path, "td", "build"));
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.info,
value: "Check Folder: ${directory_build.path}");
if (directory_build.existsSync() == false) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.info,
value: "Create Folder: ${directory_build.path}");
directory_build.createSync(recursive: true);
} else {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.info,
value: "Folder Exist: ${directory_build.path}");
}
if (Dart.isLinux) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.info,
value: "Started Cmake: Release");
Process process = await Process.start(
"cmake",
["-DCMAKE_BUILD_TYPE=Release", ".."],
workingDirectory: directory_build.path,
);
process.stderr.listen((event) {
stderr.add(event);
});
process.stdout.listen((event) {
stdout.add(event);
});
int exit_code = await (process.exitCode);
if (exit_code != 0) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.failed,
value: "Failed Cmake: Release");
return;
}
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.succes,
value: "Succes Cmake: Release");
}
// build
if (Dart.isLinux) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.info,
value: "Started Cmake: Build");
Process process = await Process.start(
"cmake",
[
"--build",
".",
],
workingDirectory: directory_build.path,
);
process.stderr.listen((event) {
stderr.add(event);
});
process.stdout.listen((event) {
stdout.add(event);
});
int exit_code = await (process.exitCode);
if (exit_code != 0) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.failed,
value: "Failed Cmake: Build");
return;
}
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.succes,
value: "Succes Cmake: Build");
}
// install
if (Dart.isLinux) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.info,
value: "Started Cmake: Install");
Process process = await Process.start(
"sudo",
["cmake", "--build", ".", "--target", "install"],
workingDirectory: directory_build.path,
);
process.stderr.listen((event) {
stderr.add(event);
});
process.stdout.listen((event) {
stdout.add(event);
});
int exit_code = await (process.exitCode);
if (exit_code != 0) {
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.failed,
value: "Failed Cmake: Install");
return;
}
yield TelegramClientApiStatus(
telegramClientApiStatusType: TelegramClientApiStatusType.succes,
value: "Succes Cmake: Install");
}
}
}