setup method

Stream<GeneralLibraryApiStatus> setup({
  1. required Directory directoryBase,
})

Server Universe

Implementation

Stream<GeneralLibraryApiStatus> setup({
  required Directory directoryBase,
}) async* {
  Directory directory_project = Directory(directoryBase.uri.toFilePath());
  // ignore: unused_local_variable
  String project_name = path.basename(directory_project.path);

  File file_pubspec = File(path.join(directory_project.path, "pubspec.yaml"));
  if (!file_pubspec.existsSync()) {
    yield GeneralLibraryApiStatus(
        serverUniverseApiStatusType: GeneralLibraryApiStatusType.failed,
        value: "Failed Create Project:");
    return;
  }

  // android
  Directory directory_android =
      Directory(path.join(directory_project.uri.toFilePath(), "android"));

  if (directory_android.existsSync()) {
    yield GeneralLibraryApiStatus(
        serverUniverseApiStatusType: GeneralLibraryApiStatusType.info,
        value: "Started Setup Android");

    // auto setup settings gradle
    File file_settings_gradle = File(
        path.join(directory_android.uri.toFilePath(), "settings.gradle"));
    if (file_settings_gradle.existsSync()) {
      yield GeneralLibraryApiStatus(
          serverUniverseApiStatusType: GeneralLibraryApiStatusType.info,
          value: "Check File: android/settings.gradle");
      List<String> data_origins =
          file_settings_gradle.readAsStringSync().trim().split("\n");
      String new_gradle_version = "1.9.22";
      bool is_found_new_update_gradle_file = false;
      RegExp regExp = RegExp(
          "(([ ]+)?id([ ]+)\"org.jetbrains.kotlin.android\"([ ]+)version([ ]+)(.*)([ ]+)apply([ ]+)false)",
          caseSensitive: false);
      for (var i = 0; i < data_origins.length; i++) {
        String data_origin = data_origins[i];
        if (regExp.hashData(data_origin.trim())) {
          RegExpMatch? regExpMatch = regExp.firstMatch(data_origin);
          if (regExpMatch == null) {
            continue;
          }
          String version_gradle = (regExpMatch.group(6) ?? "").trim();

          if (version_gradle != json.encode(new_gradle_version)) {
            yield GeneralLibraryApiStatus(
                serverUniverseApiStatusType: GeneralLibraryApiStatusType.info,
                value:
                    "Upgrade Gradle Version ${version_gradle} To ${new_gradle_version}");
            data_origins[i] = data_origins[i].replaceAll(regExp,
                "${(regExpMatch.group(2) ?? "")}id \"org.jetbrains.kotlin.android\" version ${json.encode(new_gradle_version)} apply false");
            is_found_new_update_gradle_file = true;
          }
          break;
        }
      }
      if (is_found_new_update_gradle_file) {
        file_settings_gradle.writeAsStringSync(data_origins.join("\n"));
      }
    }
    // finished auto setup settings gradle android

//
    Directory directory_android_kotlin = Directory(
        path.join(directory_android.uri.toFilePath(), "app/src/main/kotlin"));
    if (directory_android_kotlin.existsSync()) {
      List<FileSystemEntity> file_kotlins =
          directory_android_kotlin.listSync(recursive: true);
      for (var file_kotlin in file_kotlins) {
        if (file_kotlin is File) {
          if (path.extension(file_kotlin.uri.toFilePath()) == ".kt") {
            List<String> data_origins =
                file_kotlin.readAsStringSync().trim().split("\n");
            String package_name_kotlin = data_origins.firstWhere((data) =>
                RegExp("^(package([ ]+))", caseSensitive: false)
                    .hasMatch(data));
            yield GeneralLibraryApiStatus(
                serverUniverseApiStatusType: GeneralLibraryApiStatusType.info,
                value: "Update package kotlin: ${package_name_kotlin}");

            /// if use gamepads but gamepads is ugly developer fucking stupid
//               final String new_content_kotlin = """
// ${package_name_kotlin}

// import android.hardware.input.InputManager
// import android.os.Handler
// import android.view.InputDevice
// import android.view.KeyEvent
// import android.view.MotionEvent
// import io.flutter.embedding.android.FlutterActivity
// import org.flame_engine.gamepads_android.GamepadsCompatibleActivity
// import io.flutter.embedding.android.FlutterFragmentActivity

// class MainActivity: FlutterFragmentActivity(), GamepadsCompatibleActivity {
//     var keyListener: ((KeyEvent) -> Boolean)? = null
//     var motionListener: ((MotionEvent) -> Boolean)? = null

//     override fun dispatchGenericMotionEvent(motionEvent: MotionEvent): Boolean {
//         return motionListener?.invoke(motionEvent) ?: false
//     }

//     override fun dispatchKeyEvent(keyEvent: KeyEvent): Boolean {
//         return keyListener?.invoke(keyEvent) ?: false
//     }

//     override fun registerInputDeviceListener(
//       listener: InputManager.InputDeviceListener, handler: Handler?) {
//         val inputManager = getSystemService(INPUT_SERVICE) as InputManager
//         inputManager.registerInputDeviceListener(listener, null)
//     }

//     override fun registerKeyEventHandler(handler: (KeyEvent) -> Boolean) {
//         keyListener = handler
//     }

//     override fun registerMotionEventHandler(handler: (MotionEvent) -> Boolean) {
//         motionListener = handler
//     }
// }
// """;
            // file_kotlin.writeAsStringSync(new_content_kotlin);

            final String new_content_kotlin = """
${package_name_kotlin}


import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity()

""";
            file_kotlin.writeAsStringSync(new_content_kotlin);
          }
        }
      }
    }

    File file_android_build_gradle = File(
        path.join(directory_android.uri.toFilePath(), "app/build.gradle"));
    if (file_android_build_gradle.existsSync()) {
      yield GeneralLibraryApiStatus(
          serverUniverseApiStatusType: GeneralLibraryApiStatusType.info,
          value: "Check File: app/build.gradle");
      List<String> data_origins =
          file_android_build_gradle.readAsStringSync().trim().split("\n");
      String new_compile_sdk = "34";
      String new_min_sdk_version = "23";
      String new_target_sdk_version = "34";

      String new_java_version = "17";
      String new_java_compatibility_version =
          "JavaVersion.VERSION_${new_java_version}";

      // compileOptions {
      //     sourceCompatibility = JavaVersion.VERSION_1_8
      //     targetCompatibility = JavaVersion.VERSION_1_8
      // }

      // kotlinOptions {
      //     jvmTarget = JavaVersion.VERSION_1_8
      // }

      RegExp regExp_compile_sdk =
          RegExp("(([ ]+)?compileSdk([ ]+)(.*))", caseSensitive: false);
      bool is_found_regex_compile_sdk = false;

      RegExp regExp_min_sdk_version = RegExp(
          "(([ ]+)?(minSdk(Version)?)([ ]+)(.*))",
          caseSensitive: false);
      bool is_found_regex_min_sdk_version = false;

      RegExp regExp_target_sdk_version = RegExp(
          "(([ ]+)?(targetSdk(Version)?)([ ]+)(.*))",
          caseSensitive: false);
      bool is_found_regex_target_sdk_version = false;

      ///
      /// 3 = jvmTarget
      /// 4 = space
      /// 5 = value
      final RegExp regExp_compile_options_compatibility = RegExp(
          "(([ ]+)?((source|target)Compatibility)([ ]+[=][ ]+)(.*))",
          caseSensitive: false);
      final List<String> compile_options_compatibility_types = [
        "source",
        "target",
      ];

      ///
      /// 3 = jvmTarget
      /// 4 = space
      /// 5 = value
      final RegExp regExp_jvm_target = RegExp(
          "(([ ]+)?(jvmTarget)([ ]+[=][ ]+)(.*))",
          caseSensitive: false);
      bool is_found_regex_jvm_target = false;

      bool is_found_new_update_build_gradle_file = false;
      for (var i = 0; i < data_origins.length; i++) {
        String data_origin = data_origins[i];
        if (is_found_regex_compile_sdk == false) {
          if (regExp_compile_sdk.hashData(data_origin.trim())) {
            is_found_regex_compile_sdk = true;
            RegExpMatch? regExpMatch =
                regExp_compile_sdk.firstMatch(data_origin);
            if (regExpMatch == null) {
              continue;
            }
            String version_compile_sdk = (regExpMatch.group(4) ?? "").trim();

            if (version_compile_sdk != new_compile_sdk) {
              yield GeneralLibraryApiStatus(
                  serverUniverseApiStatusType:
                      GeneralLibraryApiStatusType.info,
                  value:
                      "Update Build Gradle Compile Sdk ${version_compile_sdk} To ${new_compile_sdk}");
              data_origins[i] = data_origins[i].replaceAll(regExp_compile_sdk,
                  "${(regExpMatch.group(2) ?? "")}compileSdk = ${new_compile_sdk}");
              is_found_new_update_build_gradle_file = true;
            }
          }
          continue;
        }

        if (compile_options_compatibility_types.isNotEmpty) {
          if (regExp_compile_options_compatibility
              .hashData(data_origin.trim())) {
            // is_found_regex_compile_options_compatibility = true;

            RegExpMatch? regExpMatch =
                regExp_compile_options_compatibility.firstMatch(data_origin);
            if (regExpMatch == null) {
              continue;
            }

            final String typeCompileOptionCompability =
                (regExpMatch.group(4) ?? "").trim();
            compile_options_compatibility_types
                .remove(typeCompileOptionCompability);
            String version_java_version = (regExpMatch.group(6) ?? "").trim();

            if (version_java_version != new_java_compatibility_version) {
              yield GeneralLibraryApiStatus(
                serverUniverseApiStatusType: GeneralLibraryApiStatusType.info,
                value:
                    "Update Build Gradle Compile Sdk ${version_java_version} To ${new_java_compatibility_version}",
              );
              data_origins[i] = data_origins[i].replaceAll(
                  regExp_compile_options_compatibility,
                  "${(regExpMatch.group(2) ?? "")}${regExpMatch.group(3)}${regExpMatch.group(5)}${new_java_compatibility_version}");
              is_found_new_update_build_gradle_file = true;
            }
          }

          // continue;
        }

        if (is_found_regex_jvm_target == false) {
          if (regExp_jvm_target.hashData(data_origin.trim())) {
            is_found_regex_jvm_target = true;

            RegExpMatch? regExpMatch =
                regExp_jvm_target.firstMatch(data_origin);
            if (regExpMatch == null) {
              continue;
            }
            String version_java_version = (regExpMatch.group(5) ?? "").trim();

            if (version_java_version != new_java_version) {
              yield GeneralLibraryApiStatus(
                serverUniverseApiStatusType: GeneralLibraryApiStatusType.info,
                value:
                    "Update Build Gradle Compile Sdk ${version_java_version} To ${new_java_version}",
              );
              data_origins[i] = data_origins[i].replaceAll(regExp_jvm_target,
                  "${(regExpMatch.group(2) ?? "")}${regExpMatch.group(3)}${regExpMatch.group(4)}${new_java_version}");
              is_found_new_update_build_gradle_file = true;
            }
          }

          continue;
        }

        if (is_found_regex_min_sdk_version == false) {
          if (regExp_min_sdk_version.hashData(data_origin.trim())) {
            is_found_regex_min_sdk_version = true;
            RegExpMatch? regExpMatch =
                regExp_min_sdk_version.firstMatch(data_origin);
            if (regExpMatch == null) {
              continue;
            }
            String version_min_sdk_version =
                (regExpMatch.group(6) ?? "").trim();

            if (version_min_sdk_version != new_min_sdk_version) {
              yield GeneralLibraryApiStatus(
                  serverUniverseApiStatusType:
                      GeneralLibraryApiStatusType.info,
                  value:
                      "Update Build Gradle Compile Sdk ${version_min_sdk_version} To ${new_min_sdk_version}");
              data_origins[i] = data_origins[i].replaceAll(
                  regExp_min_sdk_version,
                  "${(regExpMatch.group(2) ?? "")}${regExpMatch.group(3)} = ${new_min_sdk_version}");
              is_found_new_update_build_gradle_file = true;
            }
          }
          continue;
        }

        if (is_found_regex_target_sdk_version == false) {
          if (regExp_target_sdk_version.hashData(data_origin.trim())) {
            is_found_regex_target_sdk_version = true;
            RegExpMatch? regExpMatch =
                regExp_target_sdk_version.firstMatch(data_origin);
            if (regExpMatch == null) {
              continue;
            }
            String version_target_sdk_version =
                (regExpMatch.group(6) ?? "").trim();

            if (version_target_sdk_version != new_target_sdk_version) {
              yield GeneralLibraryApiStatus(
                  serverUniverseApiStatusType:
                      GeneralLibraryApiStatusType.info,
                  value:
                      "Update Build Gradle Compile Sdk ${version_target_sdk_version} To ${new_target_sdk_version}");
              data_origins[i] = data_origins[i].replaceAll(
                  regExp_target_sdk_version,
                  "${(regExpMatch.group(2) ?? "")}${regExpMatch.group(3)} = ${new_target_sdk_version}");
              is_found_new_update_build_gradle_file = true;
            }
          }
          continue;
        }
      }
      if (is_found_new_update_build_gradle_file) {
        file_android_build_gradle.writeAsStringSync(data_origins.join("\n"));
      }
    }

    //

    // // implement not finished
    // File file_android_manifest = File(path.join(directory_android.uri.toFilePath(), "app/src/main/AndroidManifest.xml"));
    // if (file_android_manifest.existsSync()) {
    //   yield GeneralLibraryApiStatus(serverUniverseApiStatusType: GeneralLibraryApiStatusType.info, value: "Check File: app/src/main/AndroidManifest.xml");
    //   List<String> data_origins = file_android_manifest.readAsStringSync().trim().split("\n");
    //   String new_gradle_version = "1.9.22";
    //   bool is_found_new_update_gradle_file = false;
    //   for (var i = 0; i < data_origins.length; i++) {
    //     String data_origin = data_origins[i];
    //     RegExp regExp = RegExp("(([ ]+)?id([ ]+)\"org.jetbrains.kotlin.android\"([ ]+)version([ ]+)(.*)([ ]+)apply([ ]+)false)");
    //     if (regExp.hashData(data_origin.trim())) {
    //       RegExpMatch? regExpMatch = regExp.firstMatch(data_origin);
    //       if (regExpMatch == null) {
    //         continue;
    //       }
    //       String version_gradle = (regExpMatch.group(6) ?? "").trim();

    //       if (version_gradle != json.encode(new_gradle_version)) {
    //         yield GeneralLibraryApiStatus(serverUniverseApiStatusType: GeneralLibraryApiStatusType.info, value: "Upgrade Gradle Version ${version_gradle} To ${new_gradle_version}");
    //         data_origins[i] = data_origins[i].replaceAll(regExp, "${(regExpMatch.group(2) ?? "")}id \"org.jetbrains.kotlin.android\" version ${json.encode(new_gradle_version)} apply false");
    //         is_found_new_update_gradle_file = true;
    //       }
    //       break;
    //     }
    //   }
    //   if (is_found_new_update_gradle_file) {
    //     file_settings_gradle.writeAsStringSync(data_origins.join("\n"));
    //   }
    // }
    //
    //
  }
}