package org.lodder.subtools.multisubdownloader.serviceproviders; import java.util.prefs.Preferences; 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.SubtitleProvider; import org.lodder.subtools.multisubdownloader.subtitleproviders.SubtitleProviderStore; import org.lodder.subtools.multisubdownloader.subtitleproviders.adapters.JAddic7edAdapter; import org.lodder.subtools.sublibrary.Manager; public class Addic7edServiceProvider 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"); Preferences preferences = (Preferences) this.app.make("Preferences"); Manager manager = (Manager) this.app.make("Manager"); boolean loginEnabled = false; String username = ""; String password = ""; if (settings.isLoginAddic7edEnabled()) { loginEnabled = true; username = settings.getLoginAddic7edUsername(); password = settings.getLoginAddic7edPassword(); } /* Nullpointer safety */ username = username == null ? "" : username.trim(); password = password == null ? "" : password.trim(); /* Protect against empty login */ if (loginEnabled && (username.isEmpty() || password.isEmpty())) { loginEnabled = false; } return new JAddic7edAdapter(loginEnabled, username, password, preferences.getBoolean("speedy", false), 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); } }); } }