forked from j62/ctbrec
1
0
Fork 0

Save and restore table states

Save and the restore the table state (sorting and column widths) for
the recorded models and the recordings tables
This commit is contained in:
0xboobface 2018-11-25 22:10:12 +01:00
parent faf6240b45
commit b869c4a82c
6 changed files with 103 additions and 1 deletions

View File

@ -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
========================

View File

@ -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) {

View File

@ -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<JavaFxModel, ?> 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<JavaFxModel, ?> 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<JavaFxModel, ?> 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]);
}
}
}
}

View File

@ -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<JavaFxRecording, ?> 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<JavaFxRecording, ?> 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]);
}
}
}
}

View File

@ -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) {

View File

@ -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];
}