From b869c4a82c3014e0ec6a5d35f9e5db8594c8d0ea Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Sun, 25 Nov 2018 22:10:12 +0100 Subject: [PATCH] Save and restore table states Save and the restore the table state (sorting and column widths) for the recorded models and the recordings tables --- CHANGELOG.md | 2 + .../java/ctbrec/ui/CamrecApplication.java | 2 + .../java/ctbrec/ui/RecordedModelsTab.java | 51 +++++++++++++++++++ .../main/java/ctbrec/ui/RecordingsTab.java | 39 ++++++++++++++ .../src/main/java/ctbrec/ui/SettingsTab.java | 4 +- common/src/main/java/ctbrec/Settings.java | 6 +++ 6 files changed, 103 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76d34deb..ff02c63e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ * Added setting to define the tab the application opens on start * Double-click starts playback of recordings * Refresh of thumbnails can be disabled +* Changed settings are saved immediately (including changes of the + list of recorded models) 1.10.0 ======================== diff --git a/client/src/main/java/ctbrec/ui/CamrecApplication.java b/client/src/main/java/ctbrec/ui/CamrecApplication.java index bf9bc55b..72c0259d 100644 --- a/client/src/main/java/ctbrec/ui/CamrecApplication.java +++ b/client/src/main/java/ctbrec/ui/CamrecApplication.java @@ -155,6 +155,8 @@ public class CamrecApplication extends Application { new Thread() { @Override public void run() { + modelsTab.saveState(); + recordingsTab.saveState(); settingsTab.saveConfig(); recorder.shutdown(); for (Site site : sites) { diff --git a/client/src/main/java/ctbrec/ui/RecordedModelsTab.java b/client/src/main/java/ctbrec/ui/RecordedModelsTab.java index e3d44c7a..2fc735fd 100644 --- a/client/src/main/java/ctbrec/ui/RecordedModelsTab.java +++ b/client/src/main/java/ctbrec/ui/RecordedModelsTab.java @@ -20,8 +20,10 @@ import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import ctbrec.Config; import ctbrec.Model; import ctbrec.Recording; +import ctbrec.StringUtil; import ctbrec.recorder.Recorder; import ctbrec.sites.Site; import ctbrec.ui.controls.AutoFillTextField; @@ -42,6 +44,7 @@ import javafx.scene.control.MenuItem; import javafx.scene.control.ScrollPane; import javafx.scene.control.Tab; import javafx.scene.control.TableColumn; +import javafx.scene.control.TableColumn.SortType; import javafx.scene.control.TableView; import javafx.scene.control.Tooltip; import javafx.scene.control.cell.CheckBoxTableCell; @@ -135,6 +138,16 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { stopAction(); } }); + table.addEventFilter(KeyEvent.KEY_PRESSED, event -> { + if(event.getCode() == KeyCode.S) { + for (TableColumn col : table.getSortOrder()) { + System.out.println(col.getText()); + System.out.println(col.getSortType()); + System.out.println(col.getComparator()); + } + } + }); + scrollPane.setContent(table); HBox addModelBox = new HBox(5); @@ -156,6 +169,8 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { root.setTop(addModelBox); root.setCenter(scrollPane); setContent(root); + + restoreState(); } private void addModel(ActionEvent e) { @@ -223,6 +238,8 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { iterator.remove(); } } + + table.sort(); }); updateService.setOnFailed((event) -> { LOG.info("Couldn't get list of models from recorder", event.getSource().getException()); @@ -464,5 +481,39 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener { } }.start(); } + } + + public void saveState() { + if(!table.getSortOrder().isEmpty()) { + TableColumn col = table.getSortOrder().get(0); + Config.getInstance().getSettings().recordedModelsSortColumn = col.getText(); + Config.getInstance().getSettings().recordedModelsSortType = col.getSortType().toString(); + } + double[] columnWidths = new double[table.getColumns().size()]; + for (int i = 0; i < columnWidths.length; i++) { + columnWidths[i] = table.getColumns().get(i).getWidth(); + } + Config.getInstance().getSettings().recordedModelsColumnWidths = columnWidths; }; + + private void restoreState() { + String sortCol = Config.getInstance().getSettings().recordedModelsSortColumn; + if(StringUtil.isNotBlank(sortCol)) { + for (TableColumn col : table.getColumns()) { + if(Objects.equals(sortCol, col.getText())) { + col.setSortType(SortType.valueOf(Config.getInstance().getSettings().recordedModelsSortType)); + table.getSortOrder().clear(); + table.getSortOrder().add(col); + break; + } + } + } + + double[] columnWidths = Config.getInstance().getSettings().recordedModelsColumnWidths; + if(columnWidths != null && columnWidths.length == table.getColumns().size()) { + for (int i = 0; i < columnWidths.length; i++) { + table.getColumns().get(i).setPrefWidth(columnWidths[i]); + } + } + } } diff --git a/client/src/main/java/ctbrec/ui/RecordingsTab.java b/client/src/main/java/ctbrec/ui/RecordingsTab.java index 5605dbee..2c7f4fb2 100644 --- a/client/src/main/java/ctbrec/ui/RecordingsTab.java +++ b/client/src/main/java/ctbrec/ui/RecordingsTab.java @@ -16,6 +16,7 @@ import java.time.format.FormatStyle; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Objects; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; @@ -30,6 +31,7 @@ import com.iheartradio.m3u8.PlaylistException; import ctbrec.Config; import ctbrec.Recording; import ctbrec.Recording.STATUS; +import ctbrec.StringUtil; import ctbrec.recorder.Recorder; import ctbrec.recorder.download.MergedHlsDownload; import ctbrec.sites.Site; @@ -50,6 +52,7 @@ import javafx.scene.control.ScrollPane; import javafx.scene.control.Tab; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; +import javafx.scene.control.TableColumn.SortType; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.input.ContextMenuEvent; @@ -180,6 +183,8 @@ public class RecordingsTab extends Tab implements TabSelectionListener { root.setPadding(new Insets(5)); root.setCenter(scrollPane); setContent(root); + + restoreState(); } void initializeUpdateService() { @@ -537,4 +542,38 @@ public class RecordingsTab extends Tab implements TabSelectionListener { table.setCursor(Cursor.DEFAULT); } } + + public void saveState() { + if(!table.getSortOrder().isEmpty()) { + TableColumn col = table.getSortOrder().get(0); + Config.getInstance().getSettings().recordingsSortColumn = col.getText(); + Config.getInstance().getSettings().recordingsSortType = col.getSortType().toString(); + } + double[] columnWidths = new double[table.getColumns().size()]; + for (int i = 0; i < columnWidths.length; i++) { + columnWidths[i] = table.getColumns().get(i).getWidth(); + } + Config.getInstance().getSettings().recordingsColumnWidths = columnWidths; + }; + + private void restoreState() { + String sortCol = Config.getInstance().getSettings().recordingsSortColumn; + if(StringUtil.isNotBlank(sortCol)) { + for (TableColumn col : table.getColumns()) { + if(Objects.equals(sortCol, col.getText())) { + col.setSortType(SortType.valueOf(Config.getInstance().getSettings().recordingsSortType)); + table.getSortOrder().clear(); + table.getSortOrder().add(col); + break; + } + } + } + + double[] columnWidths = Config.getInstance().getSettings().recordingsColumnWidths; + if(columnWidths != null && columnWidths.length == table.getColumns().size()) { + for (int i = 0; i < columnWidths.length; i++) { + table.getColumns().get(i).setPrefWidth(columnWidths[i]); + } + } + } } diff --git a/client/src/main/java/ctbrec/ui/SettingsTab.java b/client/src/main/java/ctbrec/ui/SettingsTab.java index 2752e20f..45adc8a7 100644 --- a/client/src/main/java/ctbrec/ui/SettingsTab.java +++ b/client/src/main/java/ctbrec/ui/SettingsTab.java @@ -669,7 +669,9 @@ public class SettingsTab extends Tab implements TabSelectionListener { } public void saveConfig() { - proxySettingsPane.saveConfig(); + if(proxySettingsPane != null) { + proxySettingsPane.saveConfig(); + } try { Config.getInstance().save(); } catch (IOException e) { diff --git a/common/src/main/java/ctbrec/Settings.java b/common/src/main/java/ctbrec/Settings.java index fc114a28..a34e24e9 100644 --- a/common/src/main/java/ctbrec/Settings.java +++ b/common/src/main/java/ctbrec/Settings.java @@ -75,4 +75,10 @@ public class Settings { public String colorBase = "#FFFFFF"; public String colorAccent = "#FFFFFF"; public int onlineCheckIntervalInSecs = 60; + public String recordedModelsSortColumn = ""; + public String recordedModelsSortType = ""; + public double[] recordedModelsColumnWidths = new double[0]; + public String recordingsSortColumn = ""; + public String recordingsSortType = ""; + public double[] recordingsColumnWidths = new double[0]; }