/* * Copyright (c) 2014 Dennis Fischer. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0+ * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: Dennis Fischer */ package de.chaosfisch.uploader.gui.controller; import com.cathive.fx.guice.FXMLController; import com.google.common.base.Charsets; import com.google.common.base.Strings; import com.google.common.io.Files; import com.google.inject.Inject; import de.chaosfisch.google.enddir.IEnddirService; import de.chaosfisch.google.youtube.upload.Uploader; import de.chaosfisch.services.ExportPostProcessor; import de.chaosfisch.uploader.gui.renderer.Callback; import de.chaosfisch.uploader.gui.renderer.DialogHelper; import de.chaosfisch.uploader.gui.renderer.ProgressNodeRenderer; import de.chaosfisch.uploader.gui.renderer.TagTextArea; import de.chaosfisch.uploader.persistence.dao.IPersistenceService; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.CheckBox; import javafx.scene.control.TextField; import javafx.scene.input.KeyEvent; import javafx.stage.DirectoryChooser; import org.apache.commons.configuration.Configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.Properties; import java.util.ResourceBundle; @FXMLController public class SettingsController { @FXML public CheckBox stopQueueOnError; @FXML public CheckBox createJsonLogfilesCheckbox; @FXML private ResourceBundle resources; @FXML private URL location; @FXML private CheckBox enddirCheckbox; @FXML public TextField enddirTitle; @FXML private TextField homeDirTextField; @FXML private CheckBox progressCheckbox; @FXML private CheckBox masterPasswordCheckbox; @FXML public CheckBox oldTagsCheckbox; private final Properties vmOptions = new Properties(); private final File vmOptionsFile = new File("SimpleJavaYoutubeUploader.vmoptions"); private static final Logger LOGGER = LoggerFactory.getLogger(SettingsController.class); private final IPersistenceService persistenceService; private final DialogHelper dialogHelper; private final Configuration config; @Inject private SettingsController(final IPersistenceService persistenceService, final DialogHelper dialogHelper, final Configuration config) { this.persistenceService = persistenceService; this.dialogHelper = dialogHelper; this.config = config; } @FXML void enddirTitleTyped(final KeyEvent event) { config.setProperty(IEnddirService.TITLE_PROPERTY, Strings.isNullOrEmpty(enddirTitle.getText()) ? IEnddirService.TITLE_DEFAULT : enddirTitle.getText()); } @FXML void openHomeDir(final ActionEvent event) { final DirectoryChooser directoryChooser = new DirectoryChooser(); final File file = directoryChooser.showDialog(null); if (null != file && file.isDirectory()) { homeDirTextField.setText(file.getAbsolutePath()); vmOptions.setProperty("user.home", file.getAbsolutePath()); writeVMOptions(); } } @FXML void toggleEnddirTitle(final ActionEvent event) { config.setProperty(IEnddirService.RENAME_PROPERTY, !config.getBoolean(IEnddirService.RENAME_PROPERTY, false)); } @FXML void toggleProgress(final ActionEvent event) { config.setProperty(ProgressNodeRenderer.DISPLAY_PROGRESS, progressCheckbox.isSelected()); } @FXML void toggleMasterPassword(final ActionEvent event) { if (masterPasswordCheckbox.isSelected()) { masterPasswordCheckbox.setSelected(!masterPasswordCheckbox.isSelected()); dialogHelper.showInputDialog("Masterpasswort", "Masterpasswort:", new Callback() { @Override public void onInput(final InputDialogController controller, final String input) { if (Strings.isNullOrEmpty(input)) { controller.input.getStyleClass().add("input-invalid"); } else { persistenceService.generateBackup(); persistenceService.setMasterPassword(input); persistenceService.saveToStorage(); config.setProperty(IPersistenceService.MASTER_PASSWORD, !masterPasswordCheckbox.isSelected()); masterPasswordCheckbox.setSelected(!masterPasswordCheckbox.isSelected()); controller.closeDialog(null); } } }, true); } else { persistenceService.generateBackup(); persistenceService.setMasterPassword(null); persistenceService.saveToStorage(); config.setProperty(IPersistenceService.MASTER_PASSWORD, masterPasswordCheckbox.isSelected()); } persistenceService.saveToStorage(); } @FXML public void toggleOldTags(final ActionEvent actionEvent) { config.setProperty(TagTextArea.OLD_TAG_INPUT, oldTagsCheckbox.isSelected()); } @FXML public void toggleStopQueueOnError(final ActionEvent actionEvent) { config.setProperty(Uploader.STOP_ON_ERROR, stopQueueOnError.isSelected()); } @FXML public void toggleJson(final ActionEvent actionEvent) { config.setProperty(ExportPostProcessor.JSON_LOGFILES, createJsonLogfilesCheckbox.isSelected()); } @FXML void initialize() { assert null != enddirTitle : "fx:id=\"enddirTitle\" was not injected: check your FXML file 'Settings.fxml'."; assert null != enddirCheckbox : "fx:id=\"enddirCheckbox\" was not injected: check your FXML file 'Settings.fxml'."; assert null != homeDirTextField : "fx:id=\"homeDirTextField\" was not injected: check your FXML file 'Settings.fxml'."; assert null != masterPasswordCheckbox : "fx:id=\"masterPasswordCheckbox\" was not injected: check your FXML file 'Settings.fxml'."; assert null != oldTagsCheckbox : "fx:id=\"oldTagsCheckbox\" was not injected: check your FXML file 'Settings.fxml'."; assert null != progressCheckbox : "fx:id=\"progressCheckbox\" was not injected: check your FXML file 'Settings.fxml'."; assert null != stopQueueOnError : "fx:id=\"stopQueueOnError\" was not injected: check your FXML file 'Settings.fxml'."; assert null != createJsonLogfilesCheckbox : "fx:id=\"createJsonLogfilesCheckbox\" was not injected: check your FXML file 'Settings.fxml'."; loadValuesFromConfig(); loadVMOptions(); } private void loadValuesFromConfig() { enddirTitle.setText(config.getString(IEnddirService.TITLE_PROPERTY, IEnddirService.TITLE_DEFAULT)); enddirCheckbox.setSelected(config.getBoolean(IEnddirService.RENAME_PROPERTY, false)); progressCheckbox.setSelected(config.getBoolean(ProgressNodeRenderer.DISPLAY_PROGRESS, false)); masterPasswordCheckbox.setSelected(config.getBoolean(IPersistenceService.MASTER_PASSWORD, false)); oldTagsCheckbox.setSelected(config.getBoolean(TagTextArea.OLD_TAG_INPUT, false)); stopQueueOnError.setSelected(config.getBoolean(Uploader.STOP_ON_ERROR, false)); createJsonLogfilesCheckbox.setSelected(config.getBoolean(ExportPostProcessor.JSON_LOGFILES, false)); } private void writeVMOptions() { try { vmOptions.store(Files.newWriter(vmOptionsFile, Charsets.UTF_8), ""); } catch (final IOException e) { LOGGER.error("Failed writing vmoptions", e); } } private void loadVMOptions() { if (!vmOptionsFile.exists()) { return; } try { vmOptions.clear(); vmOptions.load(Files.newReader(vmOptionsFile, Charsets.UTF_8)); homeDirTextField.setText(vmOptions.getProperty("user.home", "")); } catch (final IOException e) { LOGGER.error("Failed loading vmoptions", e); } } }