getClasses method

Future<List<String>> getClasses ()

Implementation

Future<List<String>> getClasses() async {
  Map<String,String> libs = {};

  List<Function> tasks = [];
  List<Map<String,dynamic>> artifacts = [];
  Map<String,Version> libEntrys = {};

  for(int i = 0; i < this.version["libraries"].length; i++) {

    Map<String, dynamic> library = this.version["libraries"][i];

    String libraryPath = "", libraryUrl, libraryDirectory, lib;
    Version version;

    if(library["downloads"] == null) {
      libraryUrl = library["url"];
      List<String> pathParts = [];
      library["name"].split(":").forEach((e) {
        if(!new RegExp(r'''^(alpha|beta|release|snapshot)?[0-9]''', caseSensitive: false).hasMatch(e)) {
          e.split(".").forEach((e) {
            pathParts.add(e);
          });
        }
        else {
          pathParts.add(e);
        }
      });
      libraryPath = pathParts.join("/") + "/${pathParts[pathParts.length - 2]}-${pathParts[pathParts.length - 1]}.jar";
      libraryUrl += libraryPath;
      libraryDirectory = resolvePath(path.join(root, 'libraries', libraryPath).replaceAll("\\", "/"));

      lib = library["name"].substring(0, library["name"].lastIndexOf(":") - 1);

      libs[lib] = libraryDirectory;

    } else {

      lib = library["name"].substring(0, library["name"].lastIndexOf(":") - 1);
      version = Version.parse(library["name"].substring(library["name"].lastIndexOf(":") + 1));

      libraryPath = library["downloads"]["artifact"]["path"];
      libraryUrl = library["downloads"]["artifact"]["url"];
      libraryDirectory = resolvePath(path.join(root, 'libraries', libraryPath).replaceAll("\\", "/"));

      if(!libEntrys.containsKey(lib) || version > libEntrys[lib]) {
        libEntrys[lib] = version;
        libs[lib] = libraryDirectory;
      }
    }

    artifacts.add({"path": libraryPath, "url": libraryUrl});

    if(!await File(libraryDirectory).exists()) {
      tasks.add(() async {
        await createDirIfNotExists(libraryDirectory.substring(0,libraryDirectory.replaceAll("\\", "/").lastIndexOf("/")));
        await downloadFile(libraryUrl, libraryDirectory);
      });
    }
  }
  if(tasks.length > 0) {
    AdvancedProgressBar progress = AdvancedProgressBar(max: tasks.length);
    progress.update(value: 0);
    for(int i = 0; i < tasks.length; i++) {
      progress.update(actual: "| downloading library: ${artifacts[i]["url"]}");
      await tasks[i]();
      progress.update(value: i + 1);
    }

    progress.kill();
  }

  List<String> list = libs.values.toList();

  for(int i = 0; i < list.length; i++) {
    if(list[i].contains("lwjgl")) {
      list[i] = list[i].replaceAll("3.2.1", "3.2.2");
    }
  }

  return list;
}