forked from j62/ctbrec
Add possibility to export and import the ignore list
This commit is contained in:
parent
549133e6a7
commit
46797a8467
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue