mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-22 16:41:46 +03:00
[FEATURE][EXPERIMENTAL] LauncherInitContext и возможность инициализации модуля во время работы
This commit is contained in:
parent
1646d8b473
commit
114cd2f8c6
3 changed files with 23 additions and 10 deletions
|
@ -0,0 +1,4 @@
|
|||
package pro.gravit.launcher.modules;
|
||||
|
||||
public interface LauncherInitContext {
|
||||
}
|
|
@ -66,7 +66,7 @@ public void preInit() {
|
|||
//NOP
|
||||
}
|
||||
|
||||
public abstract void init();
|
||||
public abstract void init(LauncherInitContext initContext);
|
||||
|
||||
|
||||
protected <T extends Event> boolean registerEvent(EventHandler<T> handle, Class<T> tClass)
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
package pro.gravit.launcher.modules.impl;
|
||||
|
||||
import pro.gravit.launcher.managers.SimpleModulesConfigManager;
|
||||
import pro.gravit.launcher.modules.LauncherModule;
|
||||
import pro.gravit.launcher.modules.LauncherModuleInfo;
|
||||
import pro.gravit.launcher.modules.LauncherModulesManager;
|
||||
import pro.gravit.launcher.modules.ModulesConfigManager;
|
||||
import pro.gravit.launcher.modules.*;
|
||||
import pro.gravit.utils.PublicURLClassLoader;
|
||||
import pro.gravit.utils.Version;
|
||||
import pro.gravit.utils.helper.IOHelper;
|
||||
|
@ -29,6 +26,8 @@ public class SimpleModuleManager implements LauncherModulesManager {
|
|||
protected final List<String> moduleNames = new ArrayList<>();
|
||||
protected final SimpleModuleContext context;
|
||||
protected final ModulesConfigManager modulesConfigManager;
|
||||
protected final Path modulesDir;
|
||||
protected LauncherInitContext initContext;
|
||||
|
||||
protected PublicURLClassLoader classLoader = new PublicURLClassLoader(new URL[]{});
|
||||
|
||||
|
@ -43,6 +42,10 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO
|
|||
}
|
||||
}
|
||||
|
||||
public void autoload() throws IOException {
|
||||
autoload(modulesDir);
|
||||
}
|
||||
|
||||
public void autoload(Path dir) throws IOException {
|
||||
if (Files.notExists(dir)) Files.createDirectory(dir);
|
||||
else {
|
||||
|
@ -50,7 +53,7 @@ public void autoload(Path dir) throws IOException {
|
|||
}
|
||||
}
|
||||
|
||||
public void initModules() {
|
||||
public void initModules(LauncherInitContext initContext) {
|
||||
List<LauncherModule> startedModules = Collections.unmodifiableList(new ArrayList<>(modules));
|
||||
for(LauncherModule module : startedModules)
|
||||
{
|
||||
|
@ -69,14 +72,13 @@ public void initModules() {
|
|||
{
|
||||
isAnyModuleLoad = true;
|
||||
module.setInitPhase(LauncherModule.InitPhase.INIT);
|
||||
module.init();
|
||||
module.init(initContext);
|
||||
module.setInitPhase(LauncherModule.InitPhase.FINISH);
|
||||
loaded++;
|
||||
}
|
||||
}
|
||||
if(modules_size >= loaded) return;
|
||||
}
|
||||
if(modules_size == loaded) return;
|
||||
if(loaded > modules_size) throw new IllegalStateException(String.format("Module loading error. %d > %d", loaded, modules_size)); //WTF?
|
||||
for(LauncherModule module : modules)
|
||||
{
|
||||
if(module.getInitPhase().equals(LauncherModule.InitPhase.CREATED))
|
||||
|
@ -84,7 +86,7 @@ public void initModules() {
|
|||
LauncherModuleInfo info = module.getModuleInfo();
|
||||
LogHelper.warning("Module %s required %s. Cyclic dependencies?", info.name, Arrays.toString(info.dependencies));
|
||||
module.setInitPhase(LauncherModule.InitPhase.INIT);
|
||||
module.init();
|
||||
module.init(initContext);
|
||||
module.setInitPhase(LauncherModule.InitPhase.FINISH);
|
||||
}
|
||||
}
|
||||
|
@ -105,14 +107,21 @@ private boolean checkDepend(LauncherModule module)
|
|||
public SimpleModuleManager(Path modulesDir, Path configDir) {
|
||||
modulesConfigManager = new SimpleModulesConfigManager(configDir);
|
||||
context = new SimpleModuleContext(this, modulesConfigManager);
|
||||
this.modulesDir = modulesDir;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LauncherModule loadModule(LauncherModule module) {
|
||||
if(modules.contains(module)) return module;
|
||||
modules.add(module);
|
||||
LauncherModuleInfo info = module.getModuleInfo();
|
||||
moduleNames.add(info.name);
|
||||
module.setContext(context);
|
||||
if(initContext != null)
|
||||
{
|
||||
module.preInit();
|
||||
module.init(initContext);
|
||||
}
|
||||
return module;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue