Multi-thread download tasks
This commit is contained in:
parent
c43ec9a1e9
commit
c186821942
|
@ -3,12 +3,12 @@ org.gradle.jvmargs=-Xmx1G
|
|||
# Fabric Properties
|
||||
# check these on https://modmuss50.me/fabric.html
|
||||
minecraft_version=1.16.5
|
||||
yarn_mappings=1.16.5+build.6
|
||||
yarn_mappings=1.16.5+build.8
|
||||
loader_version=0.11.3
|
||||
# Mod Properties
|
||||
mod_version=1.5.0
|
||||
mod_version=1.6.0
|
||||
maven_group=io.gitlab.jfronny
|
||||
archives_base_name=resclone
|
||||
# Dependencies
|
||||
# check this on https://modmuss50.me/fabric.html
|
||||
fabric_version=0.32.5+1.16
|
||||
fabric_version=0.34.1+1.16
|
||||
|
|
|
@ -9,6 +9,7 @@ import io.gitlab.jfronny.resclone.fetchers.PackFetcher;
|
|||
import io.gitlab.jfronny.resclone.processors.PackProcessor;
|
||||
import io.gitlab.jfronny.resclone.processors.RemoveEmptyProcessor;
|
||||
import io.gitlab.jfronny.resclone.processors.RootPathProcessor;
|
||||
import io.gitlab.jfronny.resclone.util.PackUrlCache;
|
||||
import io.gitlab.jfronny.resclone.util.Result;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
|
@ -22,6 +23,9 @@ import java.nio.file.FileSystems;
|
|||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class Resclone implements ModInitializer, RescloneApi {
|
||||
|
||||
|
@ -84,19 +88,35 @@ public class Resclone implements ModInitializer, RescloneApi {
|
|||
|
||||
@Override
|
||||
public void reload() {
|
||||
//Get paths from patchers. Downloading is implemented in PackFetcher to allow for unconsidered sources
|
||||
Set<PackMetaLoaded> metas = new LinkedHashSet<>();
|
||||
//Download
|
||||
for (PackMetaUnloaded s : conf) {
|
||||
try {
|
||||
ExecutorService pool = Executors.newFixedThreadPool(conf.size());
|
||||
for (PackMetaUnloaded s : conf) {
|
||||
pool.submit(generateTask(s, metas));
|
||||
}
|
||||
pool.shutdown();
|
||||
if (!pool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS)) {
|
||||
LOGGER.error("Download timed out. This shouldn't be possible");
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
urlCache.save();
|
||||
downloadedPacks.clear();
|
||||
downloadedPacks.addAll(metas);
|
||||
}
|
||||
|
||||
private Runnable generateTask(PackMetaUnloaded meta, Set<PackMetaLoaded> metas) {
|
||||
return () -> {
|
||||
try {
|
||||
if (!fetcherInstances.containsKey(s.fetcher))
|
||||
throw new Exception("Invalid fetcher: " + s.fetcher);
|
||||
if (!fetcherInstances.containsKey(meta.fetcher))
|
||||
throw new Exception("Invalid fetcher: " + meta.fetcher);
|
||||
Path cacheDir = getConfigPath().resolve("cache");
|
||||
PackMetaLoaded p;
|
||||
try {
|
||||
//Download
|
||||
Result fr = fetcherInstances.get(s.fetcher).get(s.source, cacheDir, s.forceDownload);
|
||||
p = new PackMetaLoaded(fr.downloadPath, s.name);
|
||||
Result fr = fetcherInstances.get(meta.fetcher).get(meta.source, cacheDir, meta.forceDownload);
|
||||
p = new PackMetaLoaded(fr.downloadPath, meta.name);
|
||||
metas.add(p);
|
||||
if (fr.freshDownload) {
|
||||
//Process
|
||||
|
@ -116,14 +136,9 @@ public class Resclone implements ModInitializer, RescloneApi {
|
|||
throw new Exception("Failed to download pack", e);
|
||||
}
|
||||
} catch (Throwable e) {
|
||||
System.err.println("Encountered issue while preparing " + s.name);
|
||||
e.printStackTrace();
|
||||
LOGGER.error("Encountered issue while preparing " + meta.name, e);
|
||||
}
|
||||
}
|
||||
//Set variable
|
||||
urlCache.save();
|
||||
downloadedPacks.clear();
|
||||
downloadedPacks.addAll(metas);
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package io.gitlab.jfronny.resclone.fetchers;
|
||||
|
||||
import io.gitlab.jfronny.resclone.Resclone;
|
||||
import io.gitlab.jfronny.resclone.data.CfAddon;
|
||||
import io.gitlab.jfronny.resclone.util.UrlUtils;
|
||||
import net.minecraft.MinecraftVersion;
|
||||
|
@ -40,7 +41,7 @@ public class CurseforgeFetcher extends PackFetcher {
|
|||
}
|
||||
|
||||
if (!foundMatchingVersion)
|
||||
System.err.println("Could not find pack for matching version, using latest");
|
||||
Resclone.LOGGER.error("Could not find pack for matching version, using latest");
|
||||
return latest.downloadUrl;
|
||||
} catch (Throwable e) {
|
||||
throw new Exception("Could not get CF download for " + baseUrl, e);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package io.gitlab.jfronny.resclone.processors;
|
||||
|
||||
import io.gitlab.jfronny.resclone.io.PathPruneVisitor;
|
||||
import io.gitlab.jfronny.resclone.util.io.PathPruneVisitor;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package io.gitlab.jfronny.resclone.processors;
|
||||
|
||||
import io.gitlab.jfronny.resclone.io.PathPruneVisitor;
|
||||
import io.gitlab.jfronny.resclone.util.io.PathPruneVisitor;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.DirectoryStream;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package io.gitlab.jfronny.resclone.processors;
|
||||
|
||||
import io.gitlab.jfronny.resclone.io.MoveDirVisitor;
|
||||
import io.gitlab.jfronny.resclone.util.io.MoveDirVisitor;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.*;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitlab.jfronny.resclone;
|
||||
package io.gitlab.jfronny.resclone.util;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitlab.jfronny.resclone.io;
|
||||
package io.gitlab.jfronny.resclone.util.io;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.*;
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitlab.jfronny.resclone.io;
|
||||
package io.gitlab.jfronny.resclone.util.io;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.FileVisitResult;
|
|
@ -1,4 +1,4 @@
|
|||
package io.gitlab.jfronny.resclone.io;
|
||||
package io.gitlab.jfronny.resclone.util.io;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.FileVisitResult;
|
Loading…
Reference in New Issue