forked from j62/ctbrec
Code cleanup
This commit is contained in:
parent
87943fac95
commit
fc42b21a70
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue