forked from j62/ctbrec
1
0
Fork 0

Add possibility to export and import the ignore list

This commit is contained in:
0xboobface 2019-12-31 14:29:30 +01:00
parent 549133e6a7
commit 46797a8467
2 changed files with 77 additions and 6 deletions

View File

@ -27,7 +27,7 @@ import javafx.stage.Stage;
public class IgnoreListDialog extends Dialog<Void> { public class IgnoreListDialog extends Dialog<Void> {
private static final transient Logger LOG = LoggerFactory.getLogger(IgnoreListDialog.class); private static final Logger LOG = LoggerFactory.getLogger(IgnoreListDialog.class);
private Scene parent; private Scene parent;
private ListView<Model> ignoreList; private ListView<Model> ignoreList;
@ -46,7 +46,7 @@ public class IgnoreListDialog extends Dialog<Void> {
InputStream icon = Dialogs.class.getResourceAsStream("/icon.png"); InputStream icon = Dialogs.class.getResourceAsStream("/icon.png");
Stage stage = (Stage) getDialogPane().getScene().getWindow(); Stage stage = (Stage) getDialogPane().getScene().getWindow();
stage.getIcons().add(new Image(icon)); stage.getIcons().add(new Image(icon));
if(parent != null) { if (parent != null) {
stage.getScene().getStylesheets().addAll(parent.getStylesheets()); stage.getScene().getStylesheets().addAll(parent.getStylesheets());
} }
@ -74,7 +74,7 @@ public class IgnoreListDialog extends Dialog<Void> {
private void removeSelectedModels() { private void removeSelectedModels() {
List<Model> selectedModels = ignoreList.getSelectionModel().getSelectedItems(); List<Model> selectedModels = ignoreList.getSelectionModel().getSelectedItems();
if(selectedModels.isEmpty()) { if (selectedModels.isEmpty()) {
return; return;
} else { } else {
Config.getInstance().getSettings().modelsIgnored.removeAll(selectedModels); Config.getInstance().getSettings().modelsIgnored.removeAll(selectedModels);

View File

@ -1,8 +1,14 @@
package ctbrec.ui.settings; package ctbrec.ui.settings;
import static ctbrec.Settings.DirectoryStructure.*; import static ctbrec.Settings.DirectoryStructure.*;
import static javafx.scene.control.ButtonType.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@ -11,15 +17,23 @@ import java.util.Objects;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import com.squareup.moshi.JsonAdapter;
import com.squareup.moshi.Moshi;
import com.squareup.moshi.Types;
import ctbrec.Config; import ctbrec.Config;
import ctbrec.Hmac; import ctbrec.Hmac;
import ctbrec.Model;
import ctbrec.Settings.DirectoryStructure; import ctbrec.Settings.DirectoryStructure;
import ctbrec.StringUtil; import ctbrec.StringUtil;
import ctbrec.io.ModelJsonAdapter;
import ctbrec.recorder.Recorder; import ctbrec.recorder.Recorder;
import ctbrec.sites.ConfigUI; import ctbrec.sites.ConfigUI;
import ctbrec.sites.Site; import ctbrec.sites.Site;
import ctbrec.ui.AutosizeAlert;
import ctbrec.ui.SiteUiFactory; import ctbrec.ui.SiteUiFactory;
import ctbrec.ui.TabSelectionListener; import ctbrec.ui.TabSelectionListener;
import ctbrec.ui.controls.Dialogs;
import ctbrec.ui.controls.DirectorySelectionBox; import ctbrec.ui.controls.DirectorySelectionBox;
import ctbrec.ui.controls.ProgramSelectionBox; import ctbrec.ui.controls.ProgramSelectionBox;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
@ -27,7 +41,9 @@ import javafx.geometry.HPos;
import javafx.geometry.Insets; import javafx.geometry.Insets;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.control.Accordion; import javafx.scene.control.Accordion;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.CheckBox; import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox; import javafx.scene.control.ComboBox;
import javafx.scene.control.Label; import javafx.scene.control.Label;
@ -45,6 +61,7 @@ import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.scene.paint.Color; import javafx.scene.paint.Color;
import javafx.scene.text.Font; import javafx.scene.text.Font;
import javafx.stage.FileChooser;
public class SettingsTab extends Tab implements TabSelectionListener { public class SettingsTab extends Tab implements TabSelectionListener {
@ -439,14 +456,68 @@ public class SettingsTab extends Tab implements TabSelectionListener {
private Node createIgnoreListPanel() { private Node createIgnoreListPanel() {
GridPane layout = createGridLayout(); GridPane layout = createGridLayout();
Button edit = new Button("Edit"); Button editIgnoreList = new Button("Edit");
edit.setOnAction(e -> new IgnoreListDialog(edit.getScene()).showAndWait()); editIgnoreList.setOnAction(e -> new IgnoreListDialog(editIgnoreList.getScene()).showAndWait());
layout.add(edit, 0, 0); layout.add(editIgnoreList, 0, 0);
Button exportIgnoreList = new Button("Export");
exportIgnoreList.setOnAction(e -> exportIgnoreList());
layout.add(exportIgnoreList, 1, 0);
Button importIgnoreList = new Button("Import");
importIgnoreList.setOnAction(e -> importIgnoreList());
layout.add(importIgnoreList, 2, 0);
TitledPane ignoreList = new TitledPane("Ignore List", layout); TitledPane ignoreList = new TitledPane("Ignore List", layout);
ignoreList.setCollapsible(false); ignoreList.setCollapsible(false);
return ignoreList; return ignoreList;
} }
private void exportIgnoreList() {
FileChooser chooser = new FileChooser();
chooser.setTitle("Export ignore list");
chooser.setInitialFileName("ctbrec-ignorelist.json");
File file = chooser.showSaveDialog(null);
if (file != null) {
Moshi moshi = new Moshi.Builder().add(Model.class, new ModelJsonAdapter(sites)).build();
Type modelListType = Types.newParameterizedType(List.class, Model.class);
JsonAdapter<List<Model>> adapter = moshi.adapter(modelListType);
adapter = adapter.indent(" ");
try (FileOutputStream out = new FileOutputStream(file)) {
String json = adapter.toJson(Config.getInstance().getSettings().modelsIgnored);
out.write(json.getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
Dialogs.showError(getTabPane().getScene(), "Couldn't export ignore list", e.getLocalizedMessage(), e);
}
}
}
private void importIgnoreList() {
FileChooser chooser = new FileChooser();
chooser.setTitle("Import ignore list");
File file = chooser.showOpenDialog(null);
if (file != null) {
Moshi moshi = new Moshi.Builder().add(Model.class, new ModelJsonAdapter(sites)).build();
Type modelListType = Types.newParameterizedType(List.class, Model.class);
JsonAdapter<List<Model>> adapter = moshi.adapter(modelListType);
try {
byte[] fileContent = Files.readAllBytes(file.toPath());
List<Model> ignoredModels = adapter.fromJson(new String(fileContent, StandardCharsets.UTF_8));
boolean confirmed = true;
if (!Config.getInstance().getSettings().modelsIgnored.isEmpty()) {
String msg = "This will replace the existing ignore list! Continue?";
AutosizeAlert confirm = new AutosizeAlert(AlertType.CONFIRMATION, msg, getTabPane().getScene(), YES, NO);
confirm.setTitle("Import ignore list");
confirm.setHeaderText("Overwrite ignore list");
confirm.showAndWait();
confirmed = confirm.getResult() == ButtonType.YES;
}
if (confirmed) {
Config.getInstance().getSettings().modelsIgnored = ignoredModels;
}
} catch (IOException e) {
Dialogs.showError(getTabPane().getScene(), "Couldn't import ignore list", e.getLocalizedMessage(), e);
}
}
}
private Node createGeneralPanel() { private Node createGeneralPanel() {
GridPane layout = createGridLayout(); GridPane layout = createGridLayout();
int row = 0; int row = 0;