package net.krazyweb.starmodmanager.view; import java.awt.Desktop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Task; import net.krazyweb.starmodmanager.data.LocalizerFactory; import net.krazyweb.starmodmanager.data.LocalizerModelInterface; import net.krazyweb.starmodmanager.data.ModList; import net.krazyweb.starmodmanager.data.SettingsFactory; import net.krazyweb.starmodmanager.dialogue.MessageDialogue; import net.krazyweb.starmodmanager.dialogue.MessageDialogue.MessageType; import net.krazyweb.starmodmanager.dialogue.MessageDialogueConfirm; import net.krazyweb.starmodmanager.dialogue.ProgressDialogue; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class ModViewController { private static Logger log = LogManager.getLogger(ModViewController.class); private ModView view; private ModList modList; private LocalizerModelInterface localizer; protected ModViewController(final ModView view, final ModList modList, final LocalizerModelInterface localizer) { this.view = view; this.modList = modList; this.localizer = localizer; this.view.build(new SettingsFactory().getInstance().getPropertyBoolean("modviewexpanded")); } protected void installButtonClicked() { Task<Void> task = modList.getInstallModTask(view.getMod()); final ProgressDialogue lview = new ProgressDialogue(localizer.formatMessage("modview.install.title")); lview.getProgressBar().bind(task.progressProperty(), 1.0); lview.getText().setText(localizer.formatMessage("modview.install.dialogue", view.getMod().getDisplayName())); task.progressProperty().addListener(new ChangeListener<Number>() { @Override public void changed(final ObservableValue<? extends Number> observableValue, final Number oldValue, final Number newValue) { if (newValue.doubleValue() >= 0.99) { lview.close(); } } }); Thread thread = new Thread(task); thread.setDaemon(true); thread.setName("Install Mod Thread"); lview.start(); thread.start(); } protected void uninstallButtonClicked() { modList.uninstallMod(view.getMod()); } protected void moreInfoButtonClicked() { view.toggleMoreInfo(); } protected void deleteButtonClicked() { MessageDialogueConfirm m = new MessageDialogueConfirm( localizer.formatMessage("modview.confirmdelete", view.getMod().getDisplayName()), localizer.getMessage("modview.confirmdeletetitle"), MessageType.CONFIRM, localizer ); if (m.getResult() == MessageDialogue.DialogueAction.YES) { modList.deleteMod(view.getMod()); } } protected void hideButtonClicked() { MessageDialogueConfirm m = new MessageDialogueConfirm( localizer.formatMessage("modview.confirmhide", view.getMod().getDisplayName()), localizer.getMessage("modview.confirmhidetitle"), MessageType.CONFIRM, localizer ); if (m.getResult() == MessageDialogue.DialogueAction.YES) { modList.hideMod(view.getMod()); } } protected void linkButtonClicked() { if (!view.getMod().getURL().isEmpty()) { try { openWebpage(view.getMod().getURL()); } catch (URISyntaxException | IOException e) { log.error("", e); MessageDialogue dialogue = new MessageDialogue(localizer.getMessage("modviewcontroller.badurl"), localizer.getMessage("modviewcontroller.badurl.title"), MessageType.ERROR, new LocalizerFactory()); dialogue.getResult(); } } } private void openWebpage(final String url) throws URISyntaxException, IOException { openWebpage(new URL(url).toURI()); } private void openWebpage(final URI uri) throws IOException { Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null; if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) { desktop.browse(uri); } else { MessageDialogue dialogue = new MessageDialogue(localizer.getMessage("modviewcontroller.nodesktop"), localizer.getMessage("modviewcontroller.nodesktop.title"), MessageType.ERROR, new LocalizerFactory()); dialogue.getResult(); } } }