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

View File

@ -1,8 +1,14 @@
package ctbrec.ui.settings;
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.lang.reflect.Type;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@ -11,15 +17,23 @@ import java.util.Objects;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.squareup.moshi.JsonAdapter;
import com.squareup.moshi.Moshi;
import com.squareup.moshi.Types;
import ctbrec.Config;
import ctbrec.Hmac;
import ctbrec.Model;
import ctbrec.Settings.DirectoryStructure;
import ctbrec.StringUtil;
import ctbrec.io.ModelJsonAdapter;
import ctbrec.recorder.Recorder;
import ctbrec.sites.ConfigUI;
import ctbrec.sites.Site;
import ctbrec.ui.AutosizeAlert;
import ctbrec.ui.SiteUiFactory;
import ctbrec.ui.TabSelectionListener;
import ctbrec.ui.controls.Dialogs;
import ctbrec.ui.controls.DirectorySelectionBox;
import ctbrec.ui.controls.ProgramSelectionBox;
import javafx.collections.FXCollections;
@ -27,7 +41,9 @@ import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.control.Accordion;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
@ -45,6 +61,7 @@ import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.FileChooser;
public class SettingsTab extends Tab implements TabSelectionListener {
@ -439,14 +456,68 @@ public class SettingsTab extends Tab implements TabSelectionListener {
private Node createIgnoreListPanel() {
GridPane layout = createGridLayout();
Button edit = new Button("Edit");
edit.setOnAction(e -> new IgnoreListDialog(edit.getScene()).showAndWait());
layout.add(edit, 0, 0);
Button editIgnoreList = new Button("Edit");
editIgnoreList.setOnAction(e -> new IgnoreListDialog(editIgnoreList.getScene()).showAndWait());
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);
ignoreList.setCollapsible(false);
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() {
GridPane layout = createGridLayout();
int row = 0;