forked from j62/ctbrec
1
0
Fork 0

Code cleanup

This commit is contained in:
0xboobface 2019-12-27 19:34:35 +01:00
parent 87943fac95
commit fc42b21a70
1 changed files with 58 additions and 82 deletions

View File

@ -11,7 +11,6 @@ import java.util.Objects;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Function; import java.util.function.Function;
@ -33,6 +32,7 @@ import ctbrec.ui.action.PlayAction;
import ctbrec.ui.action.ResumeAction; import ctbrec.ui.action.ResumeAction;
import ctbrec.ui.action.StopRecordingAction; import ctbrec.ui.action.StopRecordingAction;
import ctbrec.ui.controls.AutoFillTextField; import ctbrec.ui.controls.AutoFillTextField;
import ctbrec.ui.controls.Dialogs;
import ctbrec.ui.controls.SearchBox; import ctbrec.ui.controls.SearchBox;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
@ -74,7 +74,7 @@ import javafx.scene.layout.Priority;
import javafx.util.Duration; import javafx.util.Duration;
public class RecordedModelsTab extends Tab implements TabSelectionListener { public class RecordedModelsTab extends Tab implements TabSelectionListener {
private static final transient Logger LOG = LoggerFactory.getLogger(RecordedModelsTab.class); private static final Logger LOG = LoggerFactory.getLogger(RecordedModelsTab.class);
private ReentrantLock lock = new ReentrantLock(); private ReentrantLock lock = new ReentrantLock();
private ScheduledService<List<JavaFxModel>> updateService; private ScheduledService<List<JavaFxModel>> updateService;
@ -83,7 +83,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
FlowPane grid = new FlowPane(); FlowPane grid = new FlowPane();
ScrollPane scrollPane = new ScrollPane(); ScrollPane scrollPane = new ScrollPane();
TableView<JavaFxModel> table = new TableView<JavaFxModel>(); TableView<JavaFxModel> table = new TableView<>();
ObservableList<JavaFxModel> observableModels = FXCollections.observableArrayList(); ObservableList<JavaFxModel> observableModels = FXCollections.observableArrayList();
ObservableList<JavaFxModel> filteredModels = FXCollections.observableArrayList(); ObservableList<JavaFxModel> filteredModels = FXCollections.observableArrayList();
ContextMenu popup; ContextMenu popup;
@ -119,7 +119,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
table.setEditable(true); table.setEditable(true);
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
PreviewPopupHandler previewPopupHandler = new PreviewPopupHandler(table); PreviewPopupHandler previewPopupHandler = new PreviewPopupHandler(table);
table.setRowFactory((tableview) -> { table.setRowFactory(tableview -> {
TableRow<JavaFxModel> row = new TableRow<>(); TableRow<JavaFxModel> row = new TableRow<>();
row.addEventHandler(MouseEvent.ANY, previewPopupHandler); row.addEventHandler(MouseEvent.ANY, previewPopupHandler);
return row; return row;
@ -167,7 +167,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
@Override @Override
public Object getBean() { public Object getBean() {
return null; return null;
}; }
@Override @Override
public String get() { public String get() {
@ -189,9 +189,9 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
}); });
table.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> { table.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2) { if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2) {
JavaFxModel model = table.getSelectionModel().getSelectedItem(); JavaFxModel selectedModel = table.getSelectionModel().getSelectedItem();
if(model != null) { if(selectedModel != null) {
new PlayAction(table, model).execute(); new PlayAction(table, selectedModel).execute();
} }
} }
}); });
@ -205,7 +205,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
if (event.getCode() == KeyCode.DELETE) { if (event.getCode() == KeyCode.DELETE) {
stopAction(selectedModels); stopAction(selectedModels);
} else if (event.getCode() == KeyCode.P) { } else if (event.getCode() == KeyCode.P) {
List<JavaFxModel> pausedModels = selectedModels.stream().filter(m -> m.isSuspended()).collect(Collectors.toList()); List<JavaFxModel> pausedModels = selectedModels.stream().filter(JavaFxModel::isSuspended).collect(Collectors.toList());
List<JavaFxModel> runningModels = selectedModels.stream().filter(m -> !m.isSuspended()).collect(Collectors.toList()); List<JavaFxModel> runningModels = selectedModels.stream().filter(m -> !m.isSuspended()).collect(Collectors.toList());
resumeRecording(pausedModels); resumeRecording(pausedModels);
pauseRecording(runningModels); pauseRecording(runningModels);
@ -274,40 +274,29 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
} else { } else {
addModelByName(input); addModelByName(input);
} }
}; }
private void addModelByUrl(String url) { private void addModelByUrl(String url) {
for (Site site : sites) { for (Site site : sites) {
Model model = site.createModelFromUrl(url); Model newModel = site.createModelFromUrl(url);
if (model != null) { if (newModel != null) {
try { try {
recorder.startRecording(model); recorder.startRecording(newModel);
} catch (IOException | InvalidKeyException | NoSuchAlgorithmException | IllegalStateException e1) { } catch (IOException | InvalidKeyException | NoSuchAlgorithmException | IllegalStateException e1) {
Alert alert = new AutosizeAlert(Alert.AlertType.ERROR, getTabPane().getScene()); Dialogs.showError(getTabPane().getScene(), "Couldn't add model", "The model " + newModel.getName() + " could not be added: ", e1);
alert.setTitle("Error");
alert.setHeaderText("Couldn't add model");
alert.setContentText("The model " + model.getName() + " could not be added: " + e1.getLocalizedMessage());
alert.showAndWait();
} }
return; return;
} }
} }
Alert alert = new AutosizeAlert(Alert.AlertType.ERROR, getTabPane().getScene()); Dialogs.showError(getTabPane().getScene(), "Unknown URL format",
alert.setTitle("Unknown URL format"); "The URL you entered has an unknown format or the function does not support this site, yet", null);
alert.setHeaderText("Couldn't add model");
alert.setContentText("The URL you entered has an unknown format or the function does not support this site, yet");
alert.showAndWait();
} }
private void addModelByName(String siteModelCombo) { private void addModelByName(String siteModelCombo) {
String[] parts = model.getText().trim().split(":"); String[] parts = siteModelCombo.trim().split(":");
if (parts.length != 2) { if (parts.length != 2) {
Alert alert = new AutosizeAlert(Alert.AlertType.ERROR, getTabPane().getScene()); Dialogs.showError(getTabPane().getScene(), "Wrong input format", "Use something like \"MyFreeCams:ModelName\"", null);
alert.setTitle("Wrong format");
alert.setHeaderText("Couldn't add model");
alert.setContentText("Use something like \"MyFreeCams:ModelName\"");
alert.showAndWait();
return; return;
} }
@ -319,11 +308,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
Model m = site.createModel(modelName); Model m = site.createModel(modelName);
recorder.startRecording(m); recorder.startRecording(m);
} catch (IOException | InvalidKeyException | NoSuchAlgorithmException | IllegalStateException e1) { } catch (IOException | InvalidKeyException | NoSuchAlgorithmException | IllegalStateException e1) {
Alert alert = new AutosizeAlert(Alert.AlertType.ERROR, getTabPane().getScene()); Dialogs.showError(getTabPane().getScene(), "Couldn't add model", "The model " + modelName + " could not be added:", e1);
alert.setTitle("Error");
alert.setHeaderText("Couldn't add model");
alert.setContentText("The model " + modelName + " could not be added: " + e1.getLocalizedMessage());
alert.showAndWait();
} }
return; return;
} }
@ -360,7 +345,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
if (index == -1) { if (index == -1) {
observableModels.add(updatedModel); observableModels.add(updatedModel);
updatedModel.getPausedProperty().addListener((obs, oldV, newV) -> { updatedModel.getPausedProperty().addListener((obs, oldV, newV) -> {
if (newV) { if (newV.booleanValue()) {
if(!recorder.isSuspended(updatedModel)) { if(!recorder.isSuspended(updatedModel)) {
pauseRecording(Collections.singletonList(updatedModel)); pauseRecording(Collections.singletonList(updatedModel));
} }
@ -393,9 +378,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
filter(filter.getText()); filter(filter.getText());
table.sort(); table.sort();
}); });
updateService.setOnFailed((event) -> { updateService.setOnFailed(event -> LOG.info("Couldn't get list of models from recorder", event.getSource().getException()));
LOG.info("Couldn't get list of models from recorder", event.getSource().getException());
});
} }
private void filter(String filter) { private void filter(String filter) {
@ -445,13 +428,13 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
protected Task<List<JavaFxModel>> createTask() { protected Task<List<JavaFxModel>> createTask() {
return new Task<List<JavaFxModel>>() { return new Task<List<JavaFxModel>>() {
@Override @Override
public List<JavaFxModel> call() throws InvalidKeyException, NoSuchAlgorithmException, IllegalStateException, IOException { public List<JavaFxModel> call() throws InvalidKeyException, NoSuchAlgorithmException, IOException {
LOG.trace("Updating recorded models"); LOG.trace("Updating recorded models");
List<Recording> recordings = recorder.getRecordings(); List<Recording> recordings = recorder.getRecordings();
List<Model> onlineModels = recorder.getOnlineModels(); List<Model> onlineModels = recorder.getOnlineModels();
return recorder.getModels() return recorder.getModels()
.stream() .stream()
.map(m -> new JavaFxModel(m)) .map(JavaFxModel::new)
.peek(fxm -> { .peek(fxm -> {
for (Recording recording : recordings) { for (Recording recording : recordings) {
if(recording.getStatus() == Recording.State.RECORDING && if(recording.getStatus() == Recording.State.RECORDING &&
@ -474,14 +457,11 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
}; };
} }
}; };
ExecutorService executor = Executors.newSingleThreadExecutor(new ThreadFactory() { ExecutorService executor = Executors.newSingleThreadExecutor(r -> {
@Override Thread t = new Thread(r);
public Thread newThread(Runnable r) { t.setDaemon(true);
Thread t = new Thread(r); t.setName("RecordedModelsTab UpdateService");
t.setDaemon(true); return t;
t.setName("RecordedModelsTab UpdateService");
return t;
}
}); });
updateService.setExecutor(executor); updateService.setExecutor(executor);
return updateService; return updateService;
@ -520,19 +500,19 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
}); });
MenuItem pauseRecording = new MenuItem("Pause Recording"); MenuItem pauseRecording = new MenuItem("Pause Recording");
pauseRecording.setOnAction((e) -> pauseRecording(selectedModels)); pauseRecording.setOnAction(e -> pauseRecording(selectedModels));
MenuItem resumeRecording = new MenuItem("Resume Recording"); MenuItem resumeRecording = new MenuItem("Resume Recording");
resumeRecording.setOnAction((e) -> resumeRecording(selectedModels)); resumeRecording.setOnAction(e -> resumeRecording(selectedModels));
MenuItem openInBrowser = new MenuItem("Open in Browser"); MenuItem openInBrowser = new MenuItem("Open in Browser");
openInBrowser.setOnAction((e) -> DesktopIntegration.open(selectedModels.get(0).getUrl())); openInBrowser.setOnAction(e -> DesktopIntegration.open(selectedModels.get(0).getUrl()));
MenuItem openInPlayer = new MenuItem("Open in Player"); MenuItem openInPlayer = new MenuItem("Open in Player");
openInPlayer.setOnAction((e) -> openInPlayer(selectedModels.get(0))); openInPlayer.setOnAction(e -> openInPlayer(selectedModels.get(0)));
MenuItem switchStreamSource = new MenuItem("Switch resolution"); MenuItem switchStreamSource = new MenuItem("Switch resolution");
switchStreamSource.setOnAction((e) -> switchStreamSource(selectedModels.get(0))); switchStreamSource.setOnAction(e -> switchStreamSource(selectedModels.get(0)));
MenuItem follow = new MenuItem("Follow"); MenuItem follow = new MenuItem("Follow");
follow.setOnAction((e) -> follow(selectedModels)); follow.setOnAction(e -> follow(selectedModels));
MenuItem notes = new MenuItem("Notes"); MenuItem notes = new MenuItem("Notes");
notes.setOnAction((e) -> notes(selectedModels)); notes.setOnAction(e -> notes(selectedModels));
ContextMenu menu = new ContextMenu(stop); ContextMenu menu = new ContextMenu(stop);
if (selectedModels.size() == 1) { if (selectedModels.size() == 1) {
@ -566,35 +546,33 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
} }
private void switchStreamSource(JavaFxModel fxModel) { private void switchStreamSource(JavaFxModel fxModel) {
String couldntSwitchHeaderText = "Couldn't switch stream resolution";
try { try {
if (!fxModel.isOnline(true)) { if (!fxModel.isOnline(true)) {
Alert alert = new AutosizeAlert(Alert.AlertType.INFORMATION, getTabPane().getScene()); Dialogs.showError(getTabPane().getScene(), couldntSwitchHeaderText, "The resolution can only be changed, when the model is online", null);
alert.setTitle("Switch resolution");
alert.setHeaderText("Couldn't switch stream resolution");
alert.setContentText("The resolution can only be changed, when the model is online");
alert.showAndWait();
return; return;
} }
} catch (IOException | ExecutionException | InterruptedException e1) { } catch (InterruptedException e1) {
Alert alert = new AutosizeAlert(Alert.AlertType.INFORMATION, getTabPane().getScene()); Thread.currentThread().interrupt();
alert.setTitle("Switch resolution"); Dialogs.showError(getTabPane().getScene(), couldntSwitchHeaderText, "An error occured while checking, if the model is online", null);
alert.setHeaderText("Couldn't switch stream resolution"); return;
alert.setContentText("An error occured while checking, if the model is online"); } catch (IOException | ExecutionException e1) {
alert.showAndWait(); Dialogs.showError(getTabPane().getScene(), couldntSwitchHeaderText, "An error occured while checking, if the model is online", null);
return; return;
} }
Function<Model, Void> onSuccess = (m) -> { Function<Model, Void> onSuccess = m -> {
try { try {
recorder.switchStreamSource(m); recorder.switchStreamSource(m);
} catch (InvalidKeyException | NoSuchAlgorithmException | IllegalStateException | IOException e) { } catch (InvalidKeyException | NoSuchAlgorithmException | IllegalStateException | IOException e) {
LOG.error("Error while switching stream resolution", e); LOG.error(couldntSwitchHeaderText, e);
showStreamSwitchErrorDialog(e); showStreamSwitchErrorDialog(e);
} }
return null; return null;
}; };
Function<Throwable, Void> onFail = (t) -> { Function<Throwable, Void> onFail = t -> {
LOG.error("Error while switching stream resolution", t); LOG.error(couldntSwitchHeaderText, t);
showStreamSwitchErrorDialog(t); showStreamSwitchErrorDialog(t);
return null; return null;
}; };
@ -614,22 +592,20 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
} }
private void stopAction(List<JavaFxModel> selectedModels) { private void stopAction(List<JavaFxModel> selectedModels) {
List<Model> models = selectedModels.stream().map(jfxm -> jfxm.getDelegate()).collect(Collectors.toList()); List<Model> models = selectedModels.stream().map(JavaFxModel::getDelegate).collect(Collectors.toList());
new StopRecordingAction(getTabPane(), models, recorder).execute((m) -> { new StopRecordingAction(getTabPane(), models, recorder).execute(m -> Platform.runLater(() -> {
Platform.runLater(() -> { table.getSelectionModel().clearSelection(table.getItems().indexOf(m));
table.getSelectionModel().clearSelection(table.getItems().indexOf(m)); table.getItems().remove(m);
table.getItems().remove(m); }));
}); }
});
};
private void pauseRecording(List<JavaFxModel> selectedModels) { private void pauseRecording(List<JavaFxModel> selectedModels) {
List<Model> models = selectedModels.stream().map(jfxm -> jfxm.getDelegate()).collect(Collectors.toList()); List<Model> models = selectedModels.stream().map(JavaFxModel::getDelegate).collect(Collectors.toList());
new PauseAction(getTabPane(), models, recorder).execute(); new PauseAction(getTabPane(), models, recorder).execute();
}; }
private void resumeRecording(List<JavaFxModel> selectedModels) { private void resumeRecording(List<JavaFxModel> selectedModels) {
List<Model> models = selectedModels.stream().map(jfxm -> jfxm.getDelegate()).collect(Collectors.toList()); List<Model> models = selectedModels.stream().map(JavaFxModel::getDelegate).collect(Collectors.toList());
new ResumeAction(getTabPane(), models, recorder).execute(); new ResumeAction(getTabPane(), models, recorder).execute();
} }
@ -644,7 +620,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
columnWidths[i] = table.getColumns().get(i).getWidth(); columnWidths[i] = table.getColumns().get(i).getWidth();
} }
Config.getInstance().getSettings().recordedModelsColumnWidths = columnWidths; Config.getInstance().getSettings().recordedModelsColumnWidths = columnWidths;
}; }
private void restoreState() { private void restoreState() {
String sortCol = Config.getInstance().getSettings().recordedModelsSortColumn; String sortCol = Config.getInstance().getSettings().recordedModelsSortColumn;