threads ! :D
This commit is contained in:
@@ -20,6 +20,8 @@ public class Main {
|
||||
checkModsDirectory();
|
||||
new DatabaseVersionManager().updateIfNeeded();
|
||||
interpretArgs(args);
|
||||
//no threading option called => only one thread will be used
|
||||
if( threadNb == null)threadNb = 1;
|
||||
new ModUpdater().update();
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,9 @@ import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
|
||||
import downloader.forgeSvc.ForgeSvcFile;
|
||||
import downloader.helper.HttpHelper;
|
||||
@@ -29,12 +32,57 @@ public class ModUpdater {
|
||||
}
|
||||
|
||||
//parse and download
|
||||
List<Thread> threads = new ArrayList<>(Main.threadNb);
|
||||
try {
|
||||
//TODO: add threads
|
||||
BufferedReader in = new BufferedReader(new FileReader(modsList));
|
||||
while (in.ready()) {
|
||||
String line = in.readLine();
|
||||
if (!isAComment(line)) {
|
||||
Thread t = new UpdaterThread(line, db, directUpdateManager, curseUpdateManager, threads);
|
||||
t.start();
|
||||
threads.add(t);
|
||||
}
|
||||
|
||||
while(Main.threadNb == threads.size()) {
|
||||
try {
|
||||
Thread.sleep(10);
|
||||
} catch (InterruptedException e) {}
|
||||
}
|
||||
}
|
||||
in.close();
|
||||
Log.i("Main", "finished");
|
||||
|
||||
} catch( IOException e ) {
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isAComment(String line)
|
||||
{
|
||||
return line.startsWith("//");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
final class UpdaterThread extends Thread {
|
||||
private final String line;
|
||||
private final Database db;
|
||||
private final DirectUpdateManager directUpdateManager;
|
||||
private final CurseUpdateManager curseUpdateManager;
|
||||
private final List<Thread> threads;
|
||||
|
||||
public UpdaterThread(String line, Database db, DirectUpdateManager directUpdateManager, CurseUpdateManager curseUpdateManager, List<Thread> threads) {
|
||||
super();
|
||||
this.line = line;
|
||||
this.db = db;
|
||||
this.directUpdateManager = directUpdateManager;
|
||||
this.curseUpdateManager = curseUpdateManager;
|
||||
this.threads = threads;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if(line.startsWith("direct="))
|
||||
{
|
||||
handleDirectDownload(line);
|
||||
@@ -47,18 +95,12 @@ public class ModUpdater {
|
||||
handleCurseDownload(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
in.close();
|
||||
Log.i("Main", "finished");
|
||||
|
||||
} catch( IOException e ) {
|
||||
e.printStackTrace();
|
||||
System.exit(1);
|
||||
}
|
||||
super.run();
|
||||
//on se retire de la pool d'execution
|
||||
this.threads.remove(this);
|
||||
}
|
||||
|
||||
public void handleDirectDownload(String line) {
|
||||
private void handleDirectDownload(String line) {
|
||||
String url = line.replaceFirst("direct=.*@", "");
|
||||
String filename=extractNameFromLink(line);
|
||||
|
||||
@@ -78,7 +120,7 @@ public class ModUpdater {
|
||||
}
|
||||
}
|
||||
|
||||
public void handleCurseDownload(String line) {
|
||||
private void handleCurseDownload(String line) {
|
||||
String name = line.split("/")[5];
|
||||
int modID = db.findModBySlug(name);
|
||||
ProjectInfo pj = db.getProjectInfo(modID);
|
||||
@@ -118,9 +160,10 @@ public class ModUpdater {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isAComment(String line)
|
||||
{
|
||||
return line.startsWith("//");
|
||||
private static String extractNameFromLink(String line) {
|
||||
char[] chars = new char[line.indexOf("@")-line.indexOf(";")];
|
||||
line.getChars(line.indexOf(";")+1, line.indexOf("@"), chars, 0);
|
||||
return new String(chars);
|
||||
}
|
||||
|
||||
private static String extractSlugFromLink(String line) {
|
||||
@@ -128,10 +171,4 @@ public class ModUpdater {
|
||||
line.getChars("direct=".length(), line.indexOf(";"), chars, 0);
|
||||
return new String(chars);
|
||||
}
|
||||
|
||||
private static String extractNameFromLink(String line) {
|
||||
char[] chars = new char[line.indexOf("@")-line.indexOf(";")];
|
||||
line.getChars(line.indexOf(";")+1, line.indexOf("@"), chars, 0);
|
||||
return new String(chars);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user