mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-15 15:48:26 -04:00
[EXPERIMENTAL] New assets downloader
This commit is contained in:
parent
c738767307
commit
2adc410ef8
@ -14,6 +14,8 @@ import net.kdt.pojavlaunch.prefs.*;
|
|||||||
import net.kdt.pojavlaunch.utils.*;
|
import net.kdt.pojavlaunch.utils.*;
|
||||||
import net.kdt.pojavlaunch.value.*;
|
import net.kdt.pojavlaunch.value.*;
|
||||||
import org.apache.commons.io.*;
|
import org.apache.commons.io.*;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
public class MinecraftDownloaderTask extends AsyncTask<String, String, Throwable>
|
public class MinecraftDownloaderTask extends AsyncTask<String, String, Throwable>
|
||||||
@ -280,8 +282,7 @@ public class MinecraftDownloaderTask extends AsyncTask<String, String, Throwable
|
|||||||
if (addedProg != -1) {
|
if (addedProg != -1) {
|
||||||
addProgress = addProgress + addedProg;
|
addProgress = addProgress + addedProg;
|
||||||
mActivity.mLaunchProgress.setProgress(addProgress);
|
mActivity.mLaunchProgress.setProgress(addProgress);
|
||||||
|
if(p1[1] != null) mActivity.mLaunchTextStatus.setText(p1[1]);
|
||||||
mActivity.mLaunchTextStatus.setText(p1[1]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p1.length < 3) {
|
if (p1.length < 3) {
|
||||||
@ -350,57 +351,86 @@ public class MinecraftDownloaderTask extends AsyncTask<String, String, Throwable
|
|||||||
return Tools.GLOBAL_GSON.fromJson(Tools.read(output.getAbsolutePath()), JAssets.class);
|
return Tools.GLOBAL_GSON.fromJson(Tools.read(output.getAbsolutePath()), JAssets.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void downloadAsset(JAssetInfo asset, File objectsDir) throws IOException {
|
public void downloadAsset(JAssetInfo asset, File objectsDir, AtomicInteger downloadCounter) throws IOException {
|
||||||
String assetPath = asset.hash.substring(0, 2) + "/" + asset.hash;
|
String assetPath = asset.hash.substring(0, 2) + "/" + asset.hash;
|
||||||
File outFile = new File(objectsDir, assetPath);
|
File outFile = new File(objectsDir, assetPath);
|
||||||
if (!outFile.exists()) {
|
Tools.downloadFileMonitored(MINECRAFT_RES + assetPath, outFile.getAbsolutePath(), new Tools.DownloaderFeedback() {
|
||||||
DownloadUtils.downloadFile(MINECRAFT_RES + assetPath, outFile);
|
int prevCurr;
|
||||||
}
|
@Override
|
||||||
|
public void updateProgress(int curr, int max) {
|
||||||
|
downloadCounter.addAndGet(curr - prevCurr);
|
||||||
|
prevCurr = curr;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
public void downloadAssetMapped(JAssetInfo asset, String assetName, File resDir) throws IOException {
|
public void downloadAssetMapped(JAssetInfo asset, String assetName, File resDir, AtomicInteger downloadCounter) throws IOException {
|
||||||
String assetPath = asset.hash.substring(0, 2) + "/" + asset.hash;
|
String assetPath = asset.hash.substring(0, 2) + "/" + asset.hash;
|
||||||
File outFile = new File(resDir,"/"+assetName);
|
File outFile = new File(resDir,"/"+assetName);
|
||||||
if (!outFile.exists()) {
|
Tools.downloadFileMonitored(MINECRAFT_RES + assetPath, outFile.getAbsolutePath(), new Tools.DownloaderFeedback() {
|
||||||
DownloadUtils.downloadFile(MINECRAFT_RES + assetPath, outFile);
|
int prevCurr;
|
||||||
}
|
@Override
|
||||||
|
public void updateProgress(int curr, int max) {
|
||||||
|
downloadCounter.addAndGet(curr - prevCurr);
|
||||||
|
prevCurr = curr;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void downloadAssets(final JAssets assets, String assetsVersion, final File outputDir) throws IOException {
|
public void downloadAssets(final JAssets assets, String assetsVersion, final File outputDir) throws IOException {
|
||||||
ArrayBlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(100);
|
LinkedBlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>();
|
||||||
RejectedExecutionHandler handler = new ThreadPoolExecutor.CallerRunsPolicy();
|
final ThreadPoolExecutor executor = new ThreadPoolExecutor(50, 50, 500, TimeUnit.MILLISECONDS, workQueue);
|
||||||
final ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 50, 100, TimeUnit.SECONDS, workQueue, handler);
|
mActivity.mIsAssetsProcessing = true;
|
||||||
|
//File hasDownloadedFile = new File(outputDir, "downloaded/" + assetsVersion + ".downloaded");
|
||||||
File hasDownloadedFile = new File(outputDir, "downloaded/" + assetsVersion + ".downloaded");
|
//if (!hasDownloadedFile.exists()) {
|
||||||
if (!hasDownloadedFile.exists()) {
|
|
||||||
System.out.println("Assets begin time: " + System.currentTimeMillis());
|
System.out.println("Assets begin time: " + System.currentTimeMillis());
|
||||||
Map<String, JAssetInfo> assetsObjects = assets.objects;
|
Map<String, JAssetInfo> assetsObjects = assets.objects;
|
||||||
mActivity.mLaunchProgress.setMax(assetsObjects.size());
|
int assetsSizeBytes=0;
|
||||||
zeroProgress();
|
AtomicInteger downloadedSize = new AtomicInteger(0);
|
||||||
AtomicInteger downloaded = new AtomicInteger(0);
|
AtomicBoolean localInterrupt = new AtomicBoolean(false);
|
||||||
File objectsDir = new File(outputDir, "objects");
|
File objectsDir = new File(outputDir, "objects");
|
||||||
for (JAssetInfo asset : assetsObjects.values()) {
|
zeroProgress();
|
||||||
executor.execute(() -> {
|
for(String assetKey : assetsObjects.keySet()) {
|
||||||
if (!mActivity.mIsAssetsProcessing) {
|
JAssetInfo asset = assetsObjects.get(assetKey);
|
||||||
executor.shutdownNow();
|
assetsSizeBytes+=asset.size;
|
||||||
return;
|
String assetPath = asset.hash.substring(0, 2) + "/" + asset.hash;
|
||||||
}
|
File outFile = assets.map_to_resources?new File(objectsDir,"/"+assetKey):new File(objectsDir, assetPath);
|
||||||
|
boolean isSHAFailure = false;
|
||||||
try {
|
if(outFile.exists() && LauncherPreferences.PREF_CHECK_LIBRARY_SHA?(isSHAFailure = Tools.compareSHA1(outFile,asset.hash)):true) {
|
||||||
if(!assets.map_to_resources) downloadAsset(asset, objectsDir);
|
downloadedSize.addAndGet(asset.size);
|
||||||
else downloadAssetMapped(asset,(assetsObjects.keySet().toArray(new String[0])[downloaded.get()]),outputDir);
|
}else{
|
||||||
} catch (IOException e) {
|
if(isSHAFailure)publishProgress("0",mActivity.getString(R.string.dl_library_sha_fail,assetKey));
|
||||||
e.printStackTrace();
|
executor.execute(()->{
|
||||||
mActivity.mIsAssetsProcessing = false;
|
try {
|
||||||
}
|
if (!assets.map_to_resources) {
|
||||||
downloaded.incrementAndGet();
|
downloadAsset(asset, objectsDir, downloadedSize);
|
||||||
});
|
} else {
|
||||||
|
downloadAssetMapped(asset, assetKey, outputDir, downloadedSize);
|
||||||
|
}
|
||||||
|
}catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
localInterrupt.set(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
mActivity.mLaunchProgress.setMax(assetsSizeBytes);
|
||||||
executor.shutdown();
|
executor.shutdown();
|
||||||
while (!executor.isTerminated()) { }
|
try {
|
||||||
hasDownloadedFile.getParentFile().mkdirs();
|
int prevDLSize=0;
|
||||||
hasDownloadedFile.createNewFile();
|
while ((!executor.awaitTermination(250, TimeUnit.MILLISECONDS))&&(!localInterrupt.get())&&mActivity.mIsAssetsProcessing) {
|
||||||
|
int DLSize = downloadedSize.get();
|
||||||
|
publishProgress(Integer.toString(DLSize-prevDLSize),null,"");
|
||||||
|
publishDownloadProgress("assets", DLSize, assetsSizeBytes);
|
||||||
|
prevDLSize = downloadedSize.get();
|
||||||
|
}
|
||||||
|
executor.shutdownNow();
|
||||||
|
while (!executor.awaitTermination(250, TimeUnit.MILLISECONDS)) {}
|
||||||
|
System.out.println("Fully shut down!");
|
||||||
|
}catch(InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
System.out.println("Assets end time: " + System.currentTimeMillis());
|
System.out.println("Assets end time: " + System.currentTimeMillis());
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
private JMinecraftVersionList.Version findVersion(String version) {
|
private JMinecraftVersionList.Version findVersion(String version) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user