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;
}