Fixed task system
This commit is contained in:
@@ -22,7 +22,6 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.jackhuang.hellominecraft.util.C;
|
import org.jackhuang.hellominecraft.util.C;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftAssetService;
|
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftAssetService;
|
||||||
@@ -30,7 +29,6 @@ import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
|||||||
import org.jackhuang.hellominecraft.launcher.core.version.AssetIndexDownloadInfo;
|
import org.jackhuang.hellominecraft.launcher.core.version.AssetIndexDownloadInfo;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
||||||
import org.jackhuang.hellominecraft.util.MessageBox;
|
import org.jackhuang.hellominecraft.util.MessageBox;
|
||||||
import org.jackhuang.hellominecraft.util.Utils;
|
|
||||||
import org.jackhuang.hellominecraft.util.func.Function;
|
import org.jackhuang.hellominecraft.util.func.Function;
|
||||||
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.Task;
|
import org.jackhuang.hellominecraft.util.tasks.Task;
|
||||||
@@ -58,23 +56,7 @@ public class MinecraftAssetService extends IMinecraftAssetService {
|
|||||||
public Task downloadAssets(final MinecraftVersion mv) {
|
public Task downloadAssets(final MinecraftVersion mv) {
|
||||||
if (mv == null)
|
if (mv == null)
|
||||||
return null;
|
return null;
|
||||||
return new TaskInfo("Download Assets") {
|
return IAssetsHandler.ASSETS_HANDLER.getList(mv, service.asset()).after(IAssetsHandler.ASSETS_HANDLER.getDownloadTask(service.getDownloadType().getProvider()));
|
||||||
Collection<Task> afters = new HashSet<>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<Task> getDependTasks() {
|
|
||||||
return Arrays.asList(IAssetsHandler.ASSETS_HANDLER.getList(mv, service.asset()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void executeTask() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<Task> getAfterTasks() {
|
|
||||||
return Arrays.asList(IAssetsHandler.ASSETS_HANDLER.getDownloadTask(service.getDownloadType().getProvider()));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public class CurseDownloadProvider extends MojangDownloadProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getParsedDownloadURL(String str) {
|
public String getParsedDownloadURL(String str) {
|
||||||
return str == null ? null : str.replace("http://files.minecraftforge.net/maven", "http://ftb.cursecdn.com/FTB2/maven/");
|
return str == null ? null : str.replace("http://files.minecraftforge.net/maven", "http://ftb.cursecdn.com/FTB2/maven");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,13 +22,13 @@ import java.util.ArrayList;
|
|||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import org.jackhuang.hellominecraft.util.func.Consumer;
|
import org.jackhuang.hellominecraft.util.tasks.Task;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author huangyuhui
|
* @author huangyuhui
|
||||||
*/
|
*/
|
||||||
public abstract class InstallerVersionList implements Consumer<String[]> {
|
public abstract class InstallerVersionList {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Refresh installer versions list from the downloaded content.
|
* Refresh installer versions list from the downloaded content.
|
||||||
@@ -37,7 +37,7 @@ public abstract class InstallerVersionList implements Consumer<String[]> {
|
|||||||
*
|
*
|
||||||
* @throws java.lang.Exception including network exceptions, IO exceptions.
|
* @throws java.lang.Exception including network exceptions, IO exceptions.
|
||||||
*/
|
*/
|
||||||
public abstract void refreshList(String[] versions) throws Exception;
|
public abstract Task refresh(String[] versions);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Installer name.
|
* Installer name.
|
||||||
@@ -117,13 +117,4 @@ public abstract class InstallerVersionList implements Consumer<String[]> {
|
|||||||
return o2.compareTo(o1);
|
return o2.compareTo(o1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void accept(String[] v) {
|
|
||||||
try {
|
|
||||||
refreshList(v);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,8 +27,6 @@ import org.jackhuang.hellominecraft.launcher.core.install.liteloader.LiteLoaderV
|
|||||||
import org.jackhuang.hellominecraft.launcher.core.install.optifine.OptiFineInstaller;
|
import org.jackhuang.hellominecraft.launcher.core.install.optifine.OptiFineInstaller;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.install.optifine.vanilla.OptiFineDownloadFormatter;
|
import org.jackhuang.hellominecraft.launcher.core.install.optifine.vanilla.OptiFineDownloadFormatter;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.Task;
|
import org.jackhuang.hellominecraft.util.tasks.Task;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.TaskInfo;
|
|
||||||
import org.jackhuang.hellominecraft.util.tasks.TaskWindow;
|
|
||||||
import org.jackhuang.hellominecraft.util.tasks.download.FileDownloadTask;
|
import org.jackhuang.hellominecraft.util.tasks.download.FileDownloadTask;
|
||||||
import org.jackhuang.hellominecraft.util.system.IOUtils;
|
import org.jackhuang.hellominecraft.util.system.IOUtils;
|
||||||
|
|
||||||
@@ -58,47 +56,28 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Task downloadForge(String installId, InstallerVersion v) {
|
public Task downloadForge(String installId, InstallerVersion v) {
|
||||||
return new TaskInfo("Forge Downloader") {
|
|
||||||
@Override
|
|
||||||
public void executeTask() {
|
|
||||||
File filepath = IOUtils.tryGetCanonicalFile(IOUtils.currentDirWithSeparator() + "forge-installer.jar");
|
File filepath = IOUtils.tryGetCanonicalFile(IOUtils.currentDirWithSeparator() + "forge-installer.jar");
|
||||||
if (v.installer != null)
|
if (v.installer == null)
|
||||||
TaskWindow.factory()
|
return null;
|
||||||
.append(new FileDownloadTask(service.getDownloadType().getProvider().getParsedDownloadURL(v.installer), filepath).setTag("forge"))
|
else
|
||||||
.append(new ForgeInstaller(service, filepath))
|
return new FileDownloadTask(service.getDownloadType().getProvider().getParsedDownloadURL(v.installer), filepath).setTag("forge")
|
||||||
.create();
|
.after(new ForgeInstaller(service, filepath));
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Task downloadOptiFine(String installId, InstallerVersion v) {
|
public Task downloadOptiFine(String installId, InstallerVersion v) {
|
||||||
return new TaskInfo("OptiFine Downloader") {
|
|
||||||
@Override
|
|
||||||
public void executeTask() {
|
|
||||||
File filepath = IOUtils.tryGetCanonicalFile(IOUtils.currentDirWithSeparator() + "optifine-installer.jar");
|
File filepath = IOUtils.tryGetCanonicalFile(IOUtils.currentDirWithSeparator() + "optifine-installer.jar");
|
||||||
if (v.installer != null) {
|
if (v.installer == null)
|
||||||
|
return null;
|
||||||
OptiFineDownloadFormatter task = new OptiFineDownloadFormatter(v.installer);
|
OptiFineDownloadFormatter task = new OptiFineDownloadFormatter(v.installer);
|
||||||
TaskWindow.factory().append(task)
|
return task.after(new FileDownloadTask(filepath).registerPreviousResult(task).setTag("optifine"))
|
||||||
.append(new FileDownloadTask(filepath).registerPreviousResult(task).setTag("optifine"))
|
.after(new OptiFineInstaller(service, installId, v, filepath));
|
||||||
.append(new OptiFineInstaller(service, installId, v, filepath))
|
|
||||||
.create();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Task downloadLiteLoader(String installId, InstallerVersion v) {
|
public Task downloadLiteLoader(String installId, InstallerVersion v) {
|
||||||
return new TaskInfo("LiteLoader Downloader") {
|
|
||||||
@Override
|
|
||||||
public void executeTask() {
|
|
||||||
File filepath = IOUtils.tryGetCanonicalFile(IOUtils.currentDirWithSeparator() + "liteloader-universal.jar");
|
File filepath = IOUtils.tryGetCanonicalFile(IOUtils.currentDirWithSeparator() + "liteloader-universal.jar");
|
||||||
FileDownloadTask task = (FileDownloadTask) new FileDownloadTask(v.universal, filepath).setTag("LiteLoader");
|
FileDownloadTask task = (FileDownloadTask) new FileDownloadTask(v.universal, filepath).setTag("LiteLoader");
|
||||||
TaskWindow.factory()
|
return task.after(new LiteLoaderInstaller(service, installId, (LiteLoaderVersionList.LiteLoaderInstallerVersion) v).registerPreviousResult(task));
|
||||||
.append(task).append(new LiteLoaderInstaller(service, installId, (LiteLoaderVersionList.LiteLoaderInstallerVersion) v).registerPreviousResult(task))
|
|
||||||
.create();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
package org.jackhuang.hellominecraft.launcher.core.install.forge;
|
package org.jackhuang.hellominecraft.launcher.core.install.forge;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -27,7 +29,9 @@ import org.jackhuang.hellominecraft.launcher.core.download.DownloadType;
|
|||||||
import org.jackhuang.hellominecraft.util.StrUtils;
|
import org.jackhuang.hellominecraft.util.StrUtils;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList;
|
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionNewerComparator;
|
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionNewerComparator;
|
||||||
import org.jackhuang.hellominecraft.util.NetUtils;
|
import org.jackhuang.hellominecraft.util.tasks.Task;
|
||||||
|
import org.jackhuang.hellominecraft.util.tasks.TaskInfo;
|
||||||
|
import org.jackhuang.hellominecraft.util.tasks.download.HTTPGetTask;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -48,10 +52,22 @@ public class MinecraftForgeVersionList extends InstallerVersionList {
|
|||||||
public List<InstallerVersion> versions;
|
public List<InstallerVersion> versions;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void refreshList(String[] needed) throws Exception {
|
public Task refresh(String[] needed) {
|
||||||
if (root != null)
|
if (root != null)
|
||||||
|
return null;
|
||||||
|
return new TaskInfo(C.i18n("install.forge.get_list")) {
|
||||||
|
HTTPGetTask task = new HTTPGetTask(DownloadType.getSuggestedDownloadType().getProvider().getParsedDownloadURL(C.URL_FORGE_LIST));
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Task> getDependTasks() {
|
||||||
|
return Arrays.asList(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void executeTask() throws Throwable {
|
||||||
|
if (!areDependTasksSucceeded)
|
||||||
return;
|
return;
|
||||||
String s = NetUtils.get(DownloadType.getSuggestedDownloadType().getProvider().getParsedDownloadURL(C.URL_FORGE_LIST));
|
String s = task.getResult();
|
||||||
|
|
||||||
root = C.GSON.fromJson(s, MinecraftForgeVersionRoot.class);
|
root = C.GSON.fromJson(s, MinecraftForgeVersionRoot.class);
|
||||||
|
|
||||||
@@ -97,6 +113,8 @@ public class MinecraftForgeVersionList extends InstallerVersionList {
|
|||||||
|
|
||||||
Collections.sort(versions, new InstallerVersionComparator());
|
Collections.sort(versions, new InstallerVersionComparator());
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<InstallerVersion> getVersionsImpl(String mcVersion) {
|
public List<InstallerVersion> getVersionsImpl(String mcVersion) {
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package org.jackhuang.hellominecraft.launcher.core.install.liteloader;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -28,8 +29,10 @@ import org.jackhuang.hellominecraft.launcher.core.version.MinecraftLibrary;
|
|||||||
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList;
|
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList.InstallerVersion;
|
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList.InstallerVersion;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionNewerComparator;
|
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionNewerComparator;
|
||||||
import org.jackhuang.hellominecraft.util.NetUtils;
|
|
||||||
import org.jackhuang.hellominecraft.util.StrUtils;
|
import org.jackhuang.hellominecraft.util.StrUtils;
|
||||||
|
import org.jackhuang.hellominecraft.util.tasks.Task;
|
||||||
|
import org.jackhuang.hellominecraft.util.tasks.TaskInfo;
|
||||||
|
import org.jackhuang.hellominecraft.util.tasks.download.HTTPGetTask;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -50,10 +53,22 @@ public class LiteLoaderVersionList extends InstallerVersionList {
|
|||||||
public List<InstallerVersion> versions;
|
public List<InstallerVersion> versions;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void refreshList(String[] needed) throws Exception {
|
public Task refresh(String[] needed) {
|
||||||
String s = NetUtils.get(C.URL_LITELOADER_LIST);
|
|
||||||
if (root != null)
|
if (root != null)
|
||||||
|
return null;
|
||||||
|
return new TaskInfo(C.i18n("install.liteloader.get_list")) {
|
||||||
|
HTTPGetTask task = new HTTPGetTask(C.URL_LITELOADER_LIST);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Task> getDependTasks() {
|
||||||
|
return Arrays.asList(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void executeTask() throws Throwable {
|
||||||
|
if (!areDependTasksSucceeded)
|
||||||
return;
|
return;
|
||||||
|
String s = task.getResult();
|
||||||
|
|
||||||
root = C.GSON.fromJson(s, LiteLoaderVersionsRoot.class);
|
root = C.GSON.fromJson(s, LiteLoaderVersionsRoot.class);
|
||||||
|
|
||||||
@@ -83,6 +98,8 @@ public class LiteLoaderVersionList extends InstallerVersionList {
|
|||||||
|
|
||||||
Collections.sort(versions, InstallerVersionComparator.INSTANCE);
|
Collections.sort(versions, InstallerVersionComparator.INSTANCE);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<InstallerVersion> getVersionsImpl(String mcVersion) {
|
public List<InstallerVersion> getVersionsImpl(String mcVersion) {
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ package org.jackhuang.hellominecraft.launcher.core.install.optifine.bmcl;
|
|||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -30,8 +32,10 @@ import org.jackhuang.hellominecraft.util.C;
|
|||||||
import org.jackhuang.hellominecraft.util.ArrayUtils;
|
import org.jackhuang.hellominecraft.util.ArrayUtils;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList;
|
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.install.optifine.OptiFineVersion;
|
import org.jackhuang.hellominecraft.launcher.core.install.optifine.OptiFineVersion;
|
||||||
import org.jackhuang.hellominecraft.util.NetUtils;
|
|
||||||
import org.jackhuang.hellominecraft.util.StrUtils;
|
import org.jackhuang.hellominecraft.util.StrUtils;
|
||||||
|
import org.jackhuang.hellominecraft.util.tasks.Task;
|
||||||
|
import org.jackhuang.hellominecraft.util.tasks.TaskInfo;
|
||||||
|
import org.jackhuang.hellominecraft.util.tasks.download.HTTPGetTask;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -55,8 +59,18 @@ public class OptiFineBMCLVersionList extends InstallerVersionList {
|
|||||||
}.getType();
|
}.getType();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void refreshList(String[] needed) throws Exception {
|
public Task refresh(String[] needed) {
|
||||||
String s = NetUtils.get("http://bmclapi.bangbang93.com/optifine/versionlist");
|
return new TaskInfo(C.i18n("install.optifine.get_list")) {
|
||||||
|
HTTPGetTask task = new HTTPGetTask("http://bmclapi.bangbang93.com/optifine/versionlist");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Task> getDependTasks() {
|
||||||
|
return Arrays.asList(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void executeTask() throws Throwable {
|
||||||
|
String s = task.getResult();
|
||||||
|
|
||||||
versionMap = new HashMap<>();
|
versionMap = new HashMap<>();
|
||||||
versions = new ArrayList<>();
|
versions = new ArrayList<>();
|
||||||
@@ -84,6 +98,8 @@ public class OptiFineBMCLVersionList extends InstallerVersionList {
|
|||||||
|
|
||||||
Collections.sort(versions, InstallerVersionComparator.INSTANCE);
|
Collections.sort(versions, InstallerVersionComparator.INSTANCE);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<InstallerVersion> getVersionsImpl(String mcVersion) {
|
public List<InstallerVersion> getVersionsImpl(String mcVersion) {
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ package org.jackhuang.hellominecraft.launcher.core.install.optifine.vanilla;
|
|||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -32,8 +34,11 @@ import javax.xml.parsers.ParserConfigurationException;
|
|||||||
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList;
|
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.install.optifine.OptiFineVersion;
|
import org.jackhuang.hellominecraft.launcher.core.install.optifine.OptiFineVersion;
|
||||||
import org.jackhuang.hellominecraft.util.ArrayUtils;
|
import org.jackhuang.hellominecraft.util.ArrayUtils;
|
||||||
import org.jackhuang.hellominecraft.util.NetUtils;
|
import org.jackhuang.hellominecraft.util.C;
|
||||||
import org.jackhuang.hellominecraft.util.StrUtils;
|
import org.jackhuang.hellominecraft.util.StrUtils;
|
||||||
|
import org.jackhuang.hellominecraft.util.tasks.Task;
|
||||||
|
import org.jackhuang.hellominecraft.util.tasks.TaskInfo;
|
||||||
|
import org.jackhuang.hellominecraft.util.tasks.download.HTTPGetTask;
|
||||||
import org.w3c.dom.DOMException;
|
import org.w3c.dom.DOMException;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
@@ -59,10 +64,22 @@ public class OptiFineVersionList extends InstallerVersionList {
|
|||||||
public List<InstallerVersion> versions;
|
public List<InstallerVersion> versions;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void refreshList(String[] sss) throws Exception {
|
public Task refresh(String[] sss) {
|
||||||
String content = NetUtils.get("http://optifine.net/downloads");
|
|
||||||
if (versions != null)
|
if (versions != null)
|
||||||
|
return null;
|
||||||
|
return new TaskInfo(C.i18n("install.optifine.get_list")) {
|
||||||
|
HTTPGetTask task = new HTTPGetTask("http://optifine.net/downloads");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<Task> getDependTasks() {
|
||||||
|
return Arrays.asList(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void executeTask() throws Throwable {
|
||||||
|
if (!areDependTasksSucceeded)
|
||||||
return;
|
return;
|
||||||
|
String content = task.getResult();
|
||||||
versionMap = new HashMap<>();
|
versionMap = new HashMap<>();
|
||||||
versions = new ArrayList<>();
|
versions = new ArrayList<>();
|
||||||
|
|
||||||
@@ -114,6 +131,8 @@ public class OptiFineVersionList extends InstallerVersionList {
|
|||||||
|
|
||||||
Collections.sort(versions, InstallerVersionComparator.INSTANCE);
|
Collections.sort(versions, InstallerVersionComparator.INSTANCE);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public class LibraryDownloadInfo extends GameDownloadInfo {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getUrl(DownloadType dt, boolean allowSelf) {
|
public String getUrl(DownloadType dt, boolean allowSelf) {
|
||||||
String myURL = (forgeURL == null ? dt.getProvider().getLibraryDownloadURL() : forgeURL) + "/";
|
String myURL = (forgeURL == null ? dt.getProvider().getLibraryDownloadURL() : forgeURL);
|
||||||
if (StrUtils.isNotBlank(url) && allowSelf)
|
if (StrUtils.isNotBlank(url) && allowSelf)
|
||||||
myURL = url;
|
myURL = url;
|
||||||
if (!myURL.endsWith(".jar"))
|
if (!myURL.endsWith(".jar"))
|
||||||
|
|||||||
@@ -25,9 +25,7 @@ import org.jackhuang.hellominecraft.launcher.setting.Settings;
|
|||||||
import org.jackhuang.hellominecraft.launcher.core.install.InstallerType;
|
import org.jackhuang.hellominecraft.launcher.core.install.InstallerType;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList;
|
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.TaskRunnable;
|
import org.jackhuang.hellominecraft.util.tasks.TaskRunnable;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.TaskRunnableArg1;
|
|
||||||
import org.jackhuang.hellominecraft.util.tasks.TaskWindow;
|
import org.jackhuang.hellominecraft.util.tasks.TaskWindow;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.communication.DefaultPreviousResult;
|
|
||||||
import org.jackhuang.hellominecraft.util.MessageBox;
|
import org.jackhuang.hellominecraft.util.MessageBox;
|
||||||
import org.jackhuang.hellominecraft.util.StrUtils;
|
import org.jackhuang.hellominecraft.util.StrUtils;
|
||||||
import org.jackhuang.hellominecraft.util.ui.SwingUtils;
|
import org.jackhuang.hellominecraft.util.ui.SwingUtils;
|
||||||
@@ -123,9 +121,7 @@ public class InstallerPanel extends AnimatedPanel {
|
|||||||
InstallerType id;
|
InstallerType id;
|
||||||
|
|
||||||
void refreshVersions() {
|
void refreshVersions() {
|
||||||
if (TaskWindow.factory().append(new TaskRunnableArg1<>(C.i18n("install." + id.id + ".get_list"), list)
|
if (TaskWindow.execute(list.refresh(new String[] { gsp.getMinecraftVersionFormatted() })))
|
||||||
.registerPreviousResult(new DefaultPreviousResult<>(new String[] { gsp.getMinecraftVersionFormatted() })))
|
|
||||||
.create())
|
|
||||||
loadVersions();
|
loadVersions();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,7 +135,8 @@ public class InstallerPanel extends AnimatedPanel {
|
|||||||
MessageBox.Show(C.i18n("install.not_refreshed"));
|
MessageBox.Show(C.i18n("install.not_refreshed"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Settings.getLastProfile().service().install().download(Settings.getLastProfile().getSelectedVersion(), getVersion(idx), id).after(new TaskRunnable(this::refreshVersions)).run();
|
TaskWindow.execute(Settings.getLastProfile().service().install().download(Settings.getLastProfile().getSelectedVersion(), getVersion(idx), id),
|
||||||
|
new TaskRunnable(this::refreshVersions));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadVersions() {
|
public void loadVersions() {
|
||||||
|
|||||||
@@ -88,6 +88,8 @@ public class ZipEngine {
|
|||||||
files = new File[1];
|
files = new File[1];
|
||||||
files[0] = source;
|
files[0] = source;
|
||||||
}
|
}
|
||||||
|
if (files == null)
|
||||||
|
return;
|
||||||
String pathName;//存相对路径(相对于待压缩的根目录)
|
String pathName;//存相对路径(相对于待压缩的根目录)
|
||||||
for (File file : files)
|
for (File file : files)
|
||||||
if (file.isDirectory()) {
|
if (file.isDirectory()) {
|
||||||
|
|||||||
@@ -17,28 +17,39 @@
|
|||||||
*/
|
*/
|
||||||
package org.jackhuang.hellominecraft.util.tasks;
|
package org.jackhuang.hellominecraft.util.tasks;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author huangyuhui
|
* @author huangyuhui
|
||||||
*/
|
*/
|
||||||
public class DoubleTask extends Task {
|
public class DoubleTask extends TaskInfo {
|
||||||
|
|
||||||
Task a, b;
|
Task a, b;
|
||||||
|
|
||||||
public DoubleTask(Task a, Task b) {
|
public DoubleTask(Task a, Task b) {
|
||||||
|
this(a, b, "Double Task");
|
||||||
|
}
|
||||||
|
|
||||||
|
public DoubleTask(Task a, Task b, String info) {
|
||||||
|
super(info);
|
||||||
this.a = a;
|
this.a = a;
|
||||||
this.b = b;
|
this.b = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void executeTask() throws Throwable {
|
public Collection<Task> getDependTasks() {
|
||||||
a.executeTask();
|
return Arrays.asList(a);
|
||||||
b.executeTask();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getInfo() {
|
public Collection<Task> getAfterTasks() {
|
||||||
return "Double Task";
|
return Arrays.asList(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void executeTask() throws Throwable {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,6 +101,8 @@ public class TaskList extends Thread {
|
|||||||
AtomicBoolean bool = new AtomicBoolean(true);
|
AtomicBoolean bool = new AtomicBoolean(true);
|
||||||
CountDownLatch counter = new CountDownLatch(c.size());
|
CountDownLatch counter = new CountDownLatch(c.size());
|
||||||
for (Task t2 : c) {
|
for (Task t2 : c) {
|
||||||
|
if (t2 == null)
|
||||||
|
continue;
|
||||||
t2.setParallelExecuting(true);
|
t2.setParallelExecuting(true);
|
||||||
Invoker thread = new Invoker(t2, counter, bool);
|
Invoker thread = new Invoker(t2, counter, bool);
|
||||||
invokers.add(thread);
|
invokers.add(thread);
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft!.
|
|
||||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hellominecraft.util.tasks;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import org.jackhuang.hellominecraft.util.tasks.communication.PreviousResult;
|
|
||||||
import org.jackhuang.hellominecraft.util.tasks.communication.PreviousResultRegistrar;
|
|
||||||
import org.jackhuang.hellominecraft.util.func.Consumer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author huangyuhui
|
|
||||||
* @param <T> Runnable<T>
|
|
||||||
*/
|
|
||||||
public class TaskRunnableArg1<T> extends TaskInfo implements PreviousResultRegistrar<T> {
|
|
||||||
|
|
||||||
private final Consumer<T> r;
|
|
||||||
|
|
||||||
public TaskRunnableArg1(String info, Consumer<T> r) {
|
|
||||||
super(info);
|
|
||||||
this.r = r;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void executeTask() throws Exception {
|
|
||||||
if (al.size() != 1)
|
|
||||||
throw new IllegalStateException("the count of args is not one.");
|
|
||||||
r.accept(al.get(0).getResult());
|
|
||||||
}
|
|
||||||
|
|
||||||
ArrayList<PreviousResult<T>> al = new ArrayList();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Task registerPreviousResult(PreviousResult<T> pr) {
|
|
||||||
al.add(pr);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -216,8 +216,8 @@ public class TaskWindow extends javax.swing.JDialog
|
|||||||
if (idx == -1)
|
if (idx == -1)
|
||||||
return;
|
return;
|
||||||
int pgs = progress * 100 / max;
|
int pgs = progress * 100 / max;
|
||||||
if (progresses.contains(idx) && progresses.get(idx) != pgs && lstDownload.getRowCount() > idx) {
|
if (progresses.size() > idx && progresses.get(idx) != pgs && lstDownload.getRowCount() > idx) {
|
||||||
SwingUtils.setValueAt(lstDownload, pgs + "%", idx, 1);
|
SwingUtils.setValueAt(lstDownload, pgs < 0 ? "???" : pgs + "%", idx, 1);
|
||||||
progresses.set(idx, pgs);
|
progresses.set(idx, pgs);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -242,7 +242,7 @@ public class TaskWindow extends javax.swing.JDialog
|
|||||||
if (taskList == null)
|
if (taskList == null)
|
||||||
return;
|
return;
|
||||||
tasks.add(task);
|
tasks.add(task);
|
||||||
progresses.add(0);
|
progresses.add(-1);
|
||||||
SwingUtils.appendLast(lstDownload, task.getInfo(), "0%");
|
SwingUtils.appendLast(lstDownload, task.getInfo(), "0%");
|
||||||
SwingUtils.moveEnd(srlDownload);
|
SwingUtils.moveEnd(srlDownload);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -130,6 +130,8 @@ public class FileDownloadTask extends Task implements PreviousResult<File>, Prev
|
|||||||
if (!shouldContinue)
|
if (!shouldContinue)
|
||||||
break;
|
break;
|
||||||
try {
|
try {
|
||||||
|
if (ppl != null)
|
||||||
|
ppl.setProgress(this, -1, 1);
|
||||||
|
|
||||||
// Open connection to URL.
|
// Open connection to URL.
|
||||||
HttpURLConnection connection
|
HttpURLConnection connection
|
||||||
|
|||||||
@@ -57,15 +57,22 @@ public class HTTPGetTask extends TaskInfo implements PreviousResult<String> {
|
|||||||
if (repeat > 0)
|
if (repeat > 0)
|
||||||
HMCLog.warn("Failed to download, repeat: " + repeat);
|
HMCLog.warn("Failed to download, repeat: " + repeat);
|
||||||
try {
|
try {
|
||||||
|
if (ppl != null)
|
||||||
|
ppl.setProgress(this, -1, 1);
|
||||||
URLConnection conn = new URL(url).openConnection();
|
URLConnection conn = new URL(url).openConnection();
|
||||||
InputStream is = conn.getInputStream();
|
InputStream is = conn.getInputStream();
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
int i;
|
int i;
|
||||||
int size = conn.getContentLength(), read = 0;
|
int size = conn.getContentLength(), read = 0;
|
||||||
|
long lastTime = System.currentTimeMillis();
|
||||||
while ((i = is.read()) != -1) {
|
while ((i = is.read()) != -1) {
|
||||||
baos.write(i);
|
baos.write(i);
|
||||||
if (ppl != null)
|
++read;
|
||||||
ppl.setProgress(this, ++read, size);
|
long now = System.currentTimeMillis();
|
||||||
|
if (ppl != null && (now - lastTime) >= 1000) {
|
||||||
|
ppl.setProgress(this, read, size);
|
||||||
|
lastTime = now;
|
||||||
|
}
|
||||||
if (!shouldContinue)
|
if (!shouldContinue)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user