automatically update configs to new format

This commit is contained in:
ThatGamerBlue
2020-03-01 06:22:47 +00:00
parent cad7ad04e3
commit 1297258aca
2 changed files with 59 additions and 39 deletions

View File

@@ -8,40 +8,10 @@ import com.google.inject.CreationException;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Key; import com.google.inject.Key;
import com.google.inject.Module; import com.google.inject.Module;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.client.RuneLite; import net.runelite.client.RuneLite;
import static net.runelite.client.RuneLite.EXTERNALPLUGIN_DIR;
import static net.runelite.client.RuneLite.SYSTEM_VERSION;
import net.runelite.client.RuneLiteProperties; import net.runelite.client.RuneLiteProperties;
import net.runelite.client.config.Config; import net.runelite.client.config.Config;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
@@ -70,6 +40,36 @@ import org.pf4j.update.PluginInfo;
import org.pf4j.update.UpdateManager; import org.pf4j.update.UpdateManager;
import org.pf4j.update.UpdateRepository; import org.pf4j.update.UpdateRepository;
import org.pf4j.update.VerifyException; import org.pf4j.update.VerifyException;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static net.runelite.client.RuneLite.EXTERNALPLUGIN_DIR;
import static net.runelite.client.RuneLite.SYSTEM_VERSION;
@Slf4j @Slf4j
@Singleton @Singleton
@@ -107,7 +107,9 @@ class ExternalPluginManager
boolean debug = RuneLiteProperties.getLauncherVersion() == null && RuneLiteProperties.getPluginPath() != null; boolean debug = RuneLiteProperties.getLauncherVersion() == null && RuneLiteProperties.getPluginPath() != null;
this.externalPluginManager = new DefaultPluginManager(debug ? Paths.get(RuneLiteProperties.getPluginPath() + File.separator + "release") : EXTERNALPLUGIN_DIR.toPath()) this.externalPluginManager = new DefaultPluginManager(
debug ? Paths.get(RuneLiteProperties.getPluginPath() + File.separator + "release")
: EXTERNALPLUGIN_DIR.toPath())
{ {
@Override @Override
protected PluginDescriptorFinder createPluginDescriptorFinder() protected PluginDescriptorFinder createPluginDescriptorFinder()
@@ -259,12 +261,18 @@ class ExternalPluginManager
public void startExternalUpdateManager() public void startExternalUpdateManager()
{ {
boolean loadedOld = false;
if (!tryLoadNewFormat()) if (!tryLoadNewFormat())
{ {
loadOldFormat(); loadOldFormat();
loadedOld = true;
} }
this.updateManager = new UpdateManager(this.externalPluginManager, repositories); this.updateManager = new UpdateManager(this.externalPluginManager, repositories);
if (loadedOld)
{
saveConfig();
}
} }
public boolean tryLoadNewFormat() public boolean tryLoadNewFormat()
@@ -276,6 +284,7 @@ class ExternalPluginManager
String[] split = keyval.split("\\|"); String[] split = keyval.split("\\|");
if (split.length != 2) if (split.length != 2)
{ {
log.error("failed to load new, split");
repositories.clear(); repositories.clear();
return false; return false;
} }
@@ -287,6 +296,7 @@ class ExternalPluginManager
} }
catch (ArrayIndexOutOfBoundsException | MalformedURLException e) catch (ArrayIndexOutOfBoundsException | MalformedURLException e)
{ {
log.error("failed to load new, exception", e);
repositories.clear(); repositories.clear();
return false; return false;
} }
@@ -427,16 +437,21 @@ class ExternalPluginManager
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private Plugin instantiate(List<Plugin> scannedPlugins, Class<Plugin> clazz, boolean init, boolean initConfig) throws PluginInstantiationException private Plugin instantiate(List<Plugin> scannedPlugins, Class<Plugin> clazz, boolean init, boolean initConfig)
throws PluginInstantiationException
{ {
net.runelite.client.plugins.PluginDependency[] pluginDependencies = clazz.getAnnotationsByType(net.runelite.client.plugins.PluginDependency.class); net.runelite.client.plugins.PluginDependency[] pluginDependencies =
clazz.getAnnotationsByType(net.runelite.client.plugins.PluginDependency.class);
List<Plugin> deps = new ArrayList<>(); List<Plugin> deps = new ArrayList<>();
for (net.runelite.client.plugins.PluginDependency pluginDependency : pluginDependencies) for (net.runelite.client.plugins.PluginDependency pluginDependency : pluginDependencies)
{ {
Optional<Plugin> dependency = Stream.concat(runelitePluginManager.getPlugins().stream(), scannedPlugins.stream()).filter(p -> p.getClass() == pluginDependency.value()).findFirst(); Optional<Plugin> dependency =
Stream.concat(runelitePluginManager.getPlugins().stream(), scannedPlugins.stream())
.filter(p -> p.getClass() == pluginDependency.value()).findFirst();
if (!dependency.isPresent()) if (!dependency.isPresent())
{ {
throw new PluginInstantiationException("Unmet dependency for " + clazz.getSimpleName() + ": " + pluginDependency.value().getSimpleName()); throw new PluginInstantiationException(
"Unmet dependency for " + clazz.getSimpleName() + ": " + pluginDependency.value().getSimpleName());
} }
deps.add(dependency.get()); deps.add(dependency.get());
} }
@@ -498,7 +513,9 @@ class ExternalPluginManager
{ {
runelitePluginManager.startPlugin(plugin); runelitePluginManager.startPlugin(plugin);
runelitePluginManager.add(plugin); runelitePluginManager.add(plugin);
eventBus.post(ExternalPluginChanged.class, new ExternalPluginChanged(pluginsMap.get(plugin.getClass().getSimpleName()), plugin, true)); eventBus.post(ExternalPluginChanged.class,
new ExternalPluginChanged(pluginsMap.get(plugin.getClass().getSimpleName()), plugin,
true));
} }
catch (PluginInstantiationException e) catch (PluginInstantiationException e)
{ {

View File

@@ -10,6 +10,8 @@ import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.Duration; import java.time.Duration;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class MiscUtils public class MiscUtils
{ {
@@ -183,11 +185,12 @@ public class MiscUtils
public static String urlToStringEncoded(URL url) public static String urlToStringEncoded(URL url)
{ {
String s; String s;
String path = url.getPath() != null ? Stream.of(url.getPath().split("/"))
.map(s2 -> URLEncoder.encode(s2, StandardCharsets.UTF_8)).collect(Collectors.joining("/")) : "";
return url.getProtocol() return url.getProtocol()
+ ':' + ':'
+ (((s = url.getAuthority()) != null && s.length() > 0) + (((s = url.getAuthority()) != null && s.length() > 0) ? "//" + s : "")
? "//" + s : "") + (path)
+ (((s = url.getPath()) != null) ? urlEncode(s) : "")
+ (((s = url.getQuery()) != null) ? '?' + urlEncode(s) : "") + (((s = url.getQuery()) != null) ? '?' + urlEncode(s) : "")
+ (((s = url.getRef()) != null) ? '#' + urlEncode(s) : ""); + (((s = url.getRef()) != null) ? '#' + urlEncode(s) : "");
} }