Inject and load RS client and applet through Guice
Instead of requiring to create client from RuneLite just use Guice for it and separate applet provider. Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
@@ -31,10 +31,11 @@ import com.google.common.eventbus.EventBus;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Provider;
|
||||
import java.applet.Applet;
|
||||
import java.io.File;
|
||||
import java.util.Locale;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Provider;
|
||||
import javax.inject.Singleton;
|
||||
import joptsimple.ArgumentAcceptingOptionSpec;
|
||||
import joptsimple.OptionParser;
|
||||
@@ -130,9 +131,6 @@ public class RuneLite
|
||||
@Inject
|
||||
private InfoBoxManager infoBoxManager;
|
||||
|
||||
@Inject
|
||||
private ClientLoader clientLoader;
|
||||
|
||||
@Inject
|
||||
private OverlayManager overlayManager;
|
||||
|
||||
@@ -145,7 +143,13 @@ public class RuneLite
|
||||
@Inject
|
||||
private WorldMapOverlay worldMapOverlay;
|
||||
|
||||
Client client;
|
||||
@Inject
|
||||
@Nullable
|
||||
private Applet applet;
|
||||
|
||||
@Inject
|
||||
@Nullable
|
||||
private Client client;
|
||||
|
||||
public static void main(String[] args) throws Exception
|
||||
{
|
||||
@@ -209,27 +213,23 @@ public class RuneLite
|
||||
});
|
||||
|
||||
injector = Guice.createInjector(new RuneLiteModule());
|
||||
injector.getInstance(RuneLite.class).start(getOptions().valueOf(updateMode));
|
||||
injector.getInstance(ClientLoader.class).setUpdateCheckMode(getOptions().valueOf(updateMode));
|
||||
injector.getInstance(RuneLite.class).start();
|
||||
}
|
||||
|
||||
public void start(ClientUpdateCheckMode updateMode) throws Exception
|
||||
public void start() throws Exception
|
||||
{
|
||||
// Load RuneLite or Vanilla client
|
||||
clientLoader.setUpdateCheckMode(updateMode);
|
||||
final Applet client = clientLoader.load();
|
||||
|
||||
final boolean isOutdated = !(client instanceof Client);
|
||||
final boolean isOutdated = client == null;
|
||||
|
||||
if (!isOutdated)
|
||||
{
|
||||
this.client = (Client) client;
|
||||
|
||||
// Inject members into client
|
||||
injector.injectMembers(client);
|
||||
}
|
||||
|
||||
// Initialize UI
|
||||
clientUI.init(client);
|
||||
clientUI.init(applet);
|
||||
|
||||
// Initialize Discord service
|
||||
discordService.init();
|
||||
@@ -246,7 +246,7 @@ public class RuneLite
|
||||
eventBus.register(clanManager);
|
||||
eventBus.register(infoBoxManager);
|
||||
|
||||
if (this.client != null)
|
||||
if (!isOutdated)
|
||||
{
|
||||
eventBus.register(itemManager.get());
|
||||
}
|
||||
@@ -304,10 +304,4 @@ public class RuneLite
|
||||
{
|
||||
RuneLite.options = options;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public void setClient(Client client)
|
||||
{
|
||||
this.client = client;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,8 +29,10 @@ import com.google.common.eventbus.SubscriberExceptionContext;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Provides;
|
||||
import com.google.inject.name.Names;
|
||||
import java.applet.Applet;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Singleton;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Client;
|
||||
@@ -44,6 +46,7 @@ import net.runelite.client.config.RuneLiteConfig;
|
||||
import net.runelite.client.game.ItemManager;
|
||||
import net.runelite.client.menus.MenuManager;
|
||||
import net.runelite.client.plugins.PluginManager;
|
||||
import net.runelite.client.rs.ClientLoader;
|
||||
import net.runelite.client.task.Scheduler;
|
||||
import net.runelite.client.util.DeferredEventBus;
|
||||
import net.runelite.client.util.QueryRunner;
|
||||
@@ -81,9 +84,17 @@ public class RuneLiteModule extends AbstractModule
|
||||
}
|
||||
|
||||
@Provides
|
||||
Client provideClient(RuneLite runeLite)
|
||||
@Singleton
|
||||
Applet provideApplet(ClientLoader clientLoader)
|
||||
{
|
||||
return runeLite.client;
|
||||
return clientLoader.load();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Client provideClient(@Nullable Applet applet)
|
||||
{
|
||||
return applet instanceof Client ? (Client) applet : null;
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
||||
@@ -30,11 +30,13 @@ import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.http.api.updatecheck.UpdateCheckClient;
|
||||
|
||||
@Slf4j
|
||||
@Singleton
|
||||
public class ClientLoader
|
||||
{
|
||||
private final UpdateCheckClient updateCheckClient = new UpdateCheckClient();
|
||||
|
||||
@@ -31,7 +31,9 @@ import com.google.inject.Injector;
|
||||
import com.google.inject.Module;
|
||||
import com.google.inject.grapher.graphviz.GraphvizGrapher;
|
||||
import com.google.inject.grapher.graphviz.GraphvizModule;
|
||||
import com.google.inject.testing.fieldbinder.Bind;
|
||||
import com.google.inject.testing.fieldbinder.BoundFieldModule;
|
||||
import java.applet.Applet;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
@@ -63,11 +65,15 @@ public class PluginManagerTest
|
||||
@Rule
|
||||
public TemporaryFolder folder = new TemporaryFolder();
|
||||
|
||||
private RuneLite runelite;
|
||||
private Set<Class> pluginClasses;
|
||||
@Mock
|
||||
@Bind
|
||||
public Applet applet;
|
||||
|
||||
@Mock
|
||||
Client client;
|
||||
@Bind
|
||||
public Client client;
|
||||
|
||||
private Set<Class> pluginClasses;
|
||||
|
||||
@Before
|
||||
public void before() throws IOException
|
||||
@@ -78,8 +84,6 @@ public class PluginManagerTest
|
||||
BoundFieldModule.of(this));
|
||||
RuneLite.setInjector(injector);
|
||||
|
||||
runelite = injector.getInstance(RuneLite.class);
|
||||
|
||||
// Find plugins we expect to have
|
||||
pluginClasses = new HashSet<>();
|
||||
Set<ClassInfo> classes = ClassPath.from(getClass().getClassLoader()).getTopLevelClassesRecursive(PLUGIN_PACKAGE);
|
||||
@@ -105,12 +109,10 @@ public class PluginManagerTest
|
||||
long expected = pluginClasses.stream()
|
||||
.map(cl -> (PluginDescriptor) cl.getAnnotation(PluginDescriptor.class))
|
||||
.filter(Objects::nonNull)
|
||||
.filter(pd -> pd.loadWhenOutdated())
|
||||
.filter(PluginDescriptor::loadWhenOutdated)
|
||||
.count();
|
||||
assertEquals(expected, plugins.size());
|
||||
|
||||
runelite.setClient(client);
|
||||
|
||||
pluginManager = new PluginManager();
|
||||
pluginManager.loadCorePlugins();
|
||||
plugins = pluginManager.getPlugins();
|
||||
@@ -130,8 +132,6 @@ public class PluginManagerTest
|
||||
modules.add(new GraphvizModule());
|
||||
modules.add(new RuneLiteModule());
|
||||
|
||||
runelite.setClient(client);
|
||||
|
||||
PluginManager pluginManager = new PluginManager();
|
||||
pluginManager.loadCorePlugins();
|
||||
for (Plugin p : pluginManager.getPlugins())
|
||||
|
||||
Reference in New Issue
Block a user