From 2e122fbfd12dad16dda519da4cfe69b28c06000a Mon Sep 17 00:00:00 2001 From: 0xb00bface <0xboobface@gmail.com> Date: Sat, 4 Dec 2021 15:12:55 +0100 Subject: [PATCH] Add tab to show the recorded models per site Does more or less the same as RecordedModelsTab, but removes some buttons and adds a default filter of site.getName() --- .../recorded/RecordedModelsPerSiteTab.java | 60 ++++++++++++++ .../ui/tabs/recorded/RecordedModelsTab.java | 81 ++++++++----------- 2 files changed, 94 insertions(+), 47 deletions(-) create mode 100644 client/src/main/java/ctbrec/ui/tabs/recorded/RecordedModelsPerSiteTab.java diff --git a/client/src/main/java/ctbrec/ui/tabs/recorded/RecordedModelsPerSiteTab.java b/client/src/main/java/ctbrec/ui/tabs/recorded/RecordedModelsPerSiteTab.java new file mode 100644 index 00000000..b4aa037b --- /dev/null +++ b/client/src/main/java/ctbrec/ui/tabs/recorded/RecordedModelsPerSiteTab.java @@ -0,0 +1,60 @@ +package ctbrec.ui.tabs.recorded; + +import ctbrec.Model; +import ctbrec.recorder.Recorder; +import ctbrec.sites.Site; +import ctbrec.ui.action.PauseAction; +import ctbrec.ui.action.ResumeAction; +import ctbrec.ui.controls.Dialogs; +import ctbrec.ui.tabs.TabSelectionListener; +import javafx.event.ActionEvent; + +import java.util.List; +import java.util.Objects; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +public class RecordedModelsPerSiteTab extends RecordedModelsTab implements TabSelectionListener { + + public RecordedModelsPerSiteTab(String title, Recorder recorder, Site site) { + super(title, recorder, List.of(site)); + filter(site.getName()); + } + + @Override + protected void createGui() { + super.createGui(); + addModelBox.getChildren().remove(toggleRecording); + addModelBox.getChildren().remove(checkModelAccountExistance); + restoreState(); + } + + @Override + protected void filter(String filter) { + super.filter(filter + " " + sites.get(0).getName()); + } + + @Override + protected void pauseAll(ActionEvent evt) { + boolean yes = Dialogs.showConfirmDialog("Pause all models", "", "Pause the recording of all models in this table?", getTabPane().getScene()); + if (yes) { + List models = recorder.getModels().stream() + .filter(Predicate.not(Model::isMarkedForLaterRecording)) + .filter(m -> Objects.equals(m.getSite(), sites.get(0))) + .collect(Collectors.toList()); + new PauseAction(getTabPane(), models, recorder).execute(); + } + } + + @Override + protected void resumeAll(ActionEvent evt) { + boolean yes = Dialogs.showConfirmDialog("Resume all models", "", "Pause the recording of all models in this table?", getTabPane().getScene()); + if (yes) { + List models = recorder.getModels().stream() + .filter(Predicate.not(Model::isMarkedForLaterRecording)) + .filter(m -> Objects.equals(m.getSite(), sites.get(0))) + .collect(Collectors.toList()); + new ResumeAction(getTabPane(), models, recorder).execute(); + } + } +} diff --git a/client/src/main/java/ctbrec/ui/tabs/recorded/RecordedModelsTab.java b/client/src/main/java/ctbrec/ui/tabs/recorded/RecordedModelsTab.java index 0827e4da..8f9ded8c 100644 --- a/client/src/main/java/ctbrec/ui/tabs/recorded/RecordedModelsTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/recorded/RecordedModelsTab.java @@ -1,25 +1,5 @@ package ctbrec.ui.tabs.recorded; -import static ctbrec.Recording.State.*; - -import java.io.IOException; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.time.Instant; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import ctbrec.Config; import ctbrec.Model; import ctbrec.Recording; @@ -27,11 +7,7 @@ import ctbrec.recorder.Recorder; import ctbrec.sites.Site; import ctbrec.ui.JavaFxModel; import ctbrec.ui.action.AbstractModelAction.Result; -import ctbrec.ui.action.CheckModelAccountAction; -import ctbrec.ui.action.PauseAction; -import ctbrec.ui.action.ResumeAction; -import ctbrec.ui.action.StopRecordingAction; -import ctbrec.ui.action.ToggleRecordingAction; +import ctbrec.ui.action.*; import ctbrec.ui.controls.DateTimeCellFactory; import ctbrec.ui.controls.Dialogs; import ctbrec.ui.tabs.TabSelectionListener; @@ -53,8 +29,25 @@ import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.util.Callback; import javafx.util.Duration; -import javafx.util.StringConverter; import javafx.util.converter.NumberStringConverter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.time.Instant; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import static ctbrec.Recording.State.RECORDING; public class RecordedModelsTab extends AbstractRecordedModelsTab implements TabSelectionListener { private static final Logger LOG = LoggerFactory.getLogger(RecordedModelsTab.class); @@ -65,6 +58,7 @@ public class RecordedModelsTab extends AbstractRecordedModelsTab implements TabS Button pauseAll = new Button("Pause All"); Button resumeAll = new Button("Resume All"); ToggleButton toggleRecording = new ToggleButton("Pause Recording"); + protected BorderPane root = new BorderPane(); public RecordedModelsTab(String title, Recorder recorder, List sites) { super(title, "recordedModelsTable"); @@ -165,9 +159,8 @@ public class RecordedModelsTab extends AbstractRecordedModelsTab implements TabS HBox.setMargin(toggleRecording, new Insets(0, 0, 0, 20)); checkModelAccountExistance - .setOnAction(evt -> new CheckModelAccountAction(checkModelAccountExistance, recorder).execute(Predicate.not(Model::isMarkedForLaterRecording))); + .setOnAction(evt -> new CheckModelAccountAction(checkModelAccountExistance, recorder).execute(Predicate.not(Model::isMarkedForLaterRecording))); - var root = new BorderPane(); root.setPadding(new Insets(5)); root.setTop(addModelBox); root.setCenter(scrollPane); @@ -201,7 +194,7 @@ public class RecordedModelsTab extends AbstractRecordedModelsTab implements TabS } } - private void pauseAll(ActionEvent evt) { + protected void pauseAll(ActionEvent evt) { boolean yes = Dialogs.showConfirmDialog("Pause all models", "", "Pause the recording of all models?", getTabPane().getScene()); if (yes) { List models = recorder.getModels().stream().filter(Predicate.not(Model::isMarkedForLaterRecording)).collect(Collectors.toList()); @@ -209,7 +202,7 @@ public class RecordedModelsTab extends AbstractRecordedModelsTab implements TabS } } - private void resumeAll(ActionEvent evt) { + protected void resumeAll(ActionEvent evt) { boolean yes = Dialogs.showConfirmDialog("Resume all models", "", "Resume the recording of all models?", getTabPane().getScene()); if (yes) { List models = recorder.getModels().stream().filter(Predicate.not(Model::isMarkedForLaterRecording)).collect(Collectors.toList()); @@ -243,12 +236,7 @@ public class RecordedModelsTab extends AbstractRecordedModelsTab implements TabS addOrUpdateModels(updatedModels); // remove old ones, which are not in the list of updated models - for (Iterator iterator = observableModels.iterator(); iterator.hasNext();) { - Model oldModel = iterator.next(); - if (!updatedModels.contains(oldModel)) { - iterator.remove(); - } - } + observableModels.removeIf(Predicate.not(updatedModels::contains)); } finally { lock.unlock(); } @@ -281,7 +269,7 @@ public class RecordedModelsTab extends AbstractRecordedModelsTab implements TabS private ChangeListener createPauseListener(JavaFxModel updatedModel) { return (obs, oldV, newV) -> { - if (newV.booleanValue()) { + if (Boolean.TRUE.equals(newV)) { if (!recorder.isSuspended(updatedModel)) { pauseRecording(Collections.singletonList(updatedModel)); } @@ -294,10 +282,10 @@ public class RecordedModelsTab extends AbstractRecordedModelsTab implements TabS } private ScheduledService> createUpdateService() { - ScheduledService> modelUpdateService = new ScheduledService>() { + ScheduledService> modelUpdateService = new ScheduledService<>() { @Override protected Task> createTask() { - return new Task>() { + return new Task<>() { @Override public List call() throws InvalidKeyException, NoSuchAlgorithmException, IOException { LOG.trace("Updating recorded models"); @@ -358,12 +346,12 @@ public class RecordedModelsTab extends AbstractRecordedModelsTab implements TabS } if (confirmed) { List models = selectedModels.stream().map(JavaFxModel::getDelegate).collect(Collectors.toList()); - new StopRecordingAction(getTabPane(), models, recorder).execute().whenComplete((r, ex) -> { - r.stream().map(Result::getModel).forEach(m -> Platform.runLater(() -> { - table.getSelectionModel().clearSelection(table.getItems().indexOf(m)); - table.getItems().remove(m); - })); - }); + new StopRecordingAction(getTabPane(), models, recorder).execute().whenComplete((r, ex) -> + r.stream().map(Result::getModel).forEach(m -> Platform.runLater(() -> { + table.getSelectionModel().clearSelection(table.getItems().indexOf(m)); + table.getItems().remove(m); + })) + ); portraitCache.invalidateAll(models); } } @@ -381,8 +369,7 @@ public class RecordedModelsTab extends AbstractRecordedModelsTab implements TabS private class PriorityCellFactory implements Callback, TableCell> { @Override public TableCell call(TableColumn param) { - Callback, TableCell> callback = TextFieldTableCell - . forTableColumn((StringConverter) new NumberStringConverter()); + Callback, TableCell> callback = TextFieldTableCell.forTableColumn(new NumberStringConverter()); TableCell tableCell = callback.call(param); tableCell.setOnScroll(event -> {