package com.atlauncher.thread; import com.atlauncher.ATLauncher; import com.atlauncher.Accounts; import com.atlauncher.Settings; import com.atlauncher.event.PackLoadedEvent; import com.atlauncher.obj.Account; import com.atlauncher.obj.Pack; import com.atlauncher.obj.UserMeta; import com.atlauncher.ui.diag.LoadingDialog; import com.atlauncher.utils.PacksComparator; import com.google.gson.reflect.TypeToken; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Collections; import java.util.List; import javax.swing.SwingWorker; public final class CollectPacksRunnable extends SwingWorker<Void, Void>{ private final LoadingDialog diag; public CollectPacksRunnable(LoadingDialog diag){ this.diag = diag; } @Override public Void doInBackground() throws Exception{ try{ if(Accounts.instance.getCurrent() == null || Accounts.instance.getCurrent() == Account.DEFAULT){ diag.dispose(); return null; } InputStream in = new FileInputStream(Settings.JSON.resolve("packs.json").toFile()); List<Pack> packs = Settings.GSON.fromJson(new InputStreamReader(in), new TypeToken<List<Pack>> (){}.getType()); in.close(); URL url = new URL(Accounts.instance.getCurrent().getUserMetaURL()); UserMeta meta = null; try{ HttpURLConnection conn = (HttpURLConnection) url.openConnection(); if(conn.getResponseCode() != 404){ try(InputStream stream = conn.getInputStream()){ meta = Settings.GSON.fromJson(new InputStreamReader(stream), UserMeta.class); } } } catch(Exception ex){ ex.printStackTrace(System.err); } Collections.sort(packs, new PacksComparator()); for(int i = 0; i < packs.size(); i++){ Pack pack = packs.get(i); this.diag.bar.setValue((i * 100) / packs.size()); if(meta != null){ for(String str : meta.allowed_player){ if(str.equalsIgnoreCase(pack.name)){ pack.allow(Accounts.instance.getCurrent().name); } } for(String str : meta.tester){ if(str.equalsIgnoreCase(pack.name)){ pack.allowTester(Accounts.instance.getCurrent().name); } } } switch(pack.type){ case PUBLIC:{ ATLauncher.EVENT_BUS.post(new PackLoadedEvent(pack)); break; } case PRIVATE:{ if(pack.isAllowed()){ ATLauncher.EVENT_BUS.post(new PackLoadedEvent(pack)); } break; } default:{ break; } } } diag.dispose(); return null; } catch(Exception ex){ throw new RuntimeException(ex); } } }