package org.lodder.subtools.multisubdownloader.serviceproviders; import org.lodder.subtools.multisubdownloader.framework.Container; import org.lodder.subtools.multisubdownloader.framework.event.Emitter; import org.lodder.subtools.multisubdownloader.framework.event.Event; import org.lodder.subtools.multisubdownloader.framework.event.Handler; import org.lodder.subtools.multisubdownloader.framework.service.providers.ServiceProvider; import org.lodder.subtools.multisubdownloader.settings.model.Settings; import org.lodder.subtools.multisubdownloader.subtitleproviders.Local; import org.lodder.subtools.multisubdownloader.subtitleproviders.SubtitleProvider; import org.lodder.subtools.multisubdownloader.subtitleproviders.SubtitleProviderStore; import org.lodder.subtools.sublibrary.Manager; public class LocalServiceProvider implements ServiceProvider { protected Container app; protected SubtitleProvider subtitleProvider; @Override public int getPriority() { /* We define a priority lower than SubtitleServiceProvider */ return 1; } @Override public void register(Container app) { this.app = app; /* Resolve the SubtitleProviderStore from the IoC Container */ final SubtitleProviderStore subtitleProviderStore = (SubtitleProviderStore) app.make("SubtitleProviderStore"); /* Create the SubtitleProvider */ subtitleProvider = createProvider(); /* Add the SubtitleProvider to the store */ subtitleProviderStore.addProvider(subtitleProvider); /* Listen for settings-change event */ this.registerListener(subtitleProviderStore); } private SubtitleProvider createProvider() { Settings settings = (Settings) this.app.make("Settings"); Manager manager = (Manager) app.make("Manager"); return new Local(settings, manager); } private void registerListener(final SubtitleProviderStore subtitleProviderStore) { /* Resolve the EventEmitter from the IoC Container */ Emitter emitter = (Emitter) app.make("EventEmitter"); /* Listen for settings-change */ emitter.listen("providers.settings.change", new Handler() { @Override public void handle(Event event) { /* Change occured, delete outdated provider from store */ subtitleProviderStore.deleteProvider(subtitleProvider); /* Re-create subtitleprovider */ subtitleProvider = createProvider(); /* Re-add provider to store */ subtitleProviderStore.addProvider(subtitleProvider); } }); } }