installLibrary method

Stream<TelegramClientApiStatus> installLibrary({
  1. 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");
    }
  }
}