forked from j62/ctbrec
Add "Follow" to the context menu of the recorded models tab
This commit is contained in:
parent
1f6e03979e
commit
9791427aeb
|
@ -3,6 +3,7 @@ package ctbrec.ui;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.security.InvalidKeyException;
|
import java.security.InvalidKeyException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -296,13 +297,13 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
massEdit(models, action);
|
massEdit(models, action);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void massEdit(List<Model> models, Consumer<Model> action) {
|
private void massEdit(List<? extends Model> models, Consumer<Model> action) {
|
||||||
getTabPane().setCursor(Cursor.WAIT);
|
table.setCursor(Cursor.WAIT);
|
||||||
threadPool.submit(() -> {
|
threadPool.submit(() -> {
|
||||||
for (Model model : models) {
|
for (Model model : models) {
|
||||||
action.accept(model);
|
action.accept(model);
|
||||||
}
|
}
|
||||||
Platform.runLater(() -> getTabPane().setCursor(Cursor.DEFAULT));
|
Platform.runLater(() -> table.setCursor(Cursor.DEFAULT));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -443,6 +444,8 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
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");
|
||||||
|
follow.setOnAction((e) -> follow(selectedModels));
|
||||||
|
|
||||||
ContextMenu menu = new ContextMenu(stop);
|
ContextMenu menu = new ContextMenu(stop);
|
||||||
if (selectedModels.size() == 1) {
|
if (selectedModels.size() == 1) {
|
||||||
|
@ -450,7 +453,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
} else {
|
} else {
|
||||||
menu.getItems().addAll(resumeRecording, pauseRecording);
|
menu.getItems().addAll(resumeRecording, pauseRecording);
|
||||||
}
|
}
|
||||||
menu.getItems().addAll(copyUrl, openInPlayer, openInBrowser, switchStreamSource);
|
menu.getItems().addAll(copyUrl, openInPlayer, openInBrowser, switchStreamSource, follow);
|
||||||
|
|
||||||
if (selectedModels.size() > 1) {
|
if (selectedModels.size() > 1) {
|
||||||
copyUrl.setDisable(true);
|
copyUrl.setDisable(true);
|
||||||
|
@ -462,6 +465,19 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void follow(ObservableList<JavaFxModel> selectedModels) {
|
||||||
|
Consumer<Model> action = (m) -> {
|
||||||
|
try {
|
||||||
|
m.follow();
|
||||||
|
} catch(Throwable e) {
|
||||||
|
LOG.error("Couldn't follow model {}", m, e);
|
||||||
|
Platform.runLater(() ->
|
||||||
|
showErrorDialog(e, "Couldn't follow model", "Following " + m.getName() + " failed: " + e.getMessage()));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
massEdit(new ArrayList<JavaFxModel>(selectedModels), action);
|
||||||
|
}
|
||||||
|
|
||||||
private void openInPlayer(JavaFxModel selectedModel) {
|
private void openInPlayer(JavaFxModel selectedModel) {
|
||||||
table.setCursor(Cursor.WAIT);
|
table.setCursor(Cursor.WAIT);
|
||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
|
@ -533,8 +549,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
showErrorDialog(e, "Couldn't stop recording", "Stopping recording of " + m.getName() + " failed"));
|
showErrorDialog(e, "Couldn't stop recording", "Stopping recording of " + m.getName() + " failed"));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
List<Model> models = selectedModels.stream().map(jfxm -> jfxm.getDelegate()).collect(Collectors.toList());
|
massEdit(new ArrayList<JavaFxModel>(selectedModels), action);
|
||||||
massEdit(models, action);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private void pauseRecording(List<JavaFxModel> selectedModels) {
|
private void pauseRecording(List<JavaFxModel> selectedModels) {
|
||||||
|
@ -547,8 +562,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
showErrorDialog(e, "Couldn't pause recording of model", "Pausing recording of " + m.getName() + " failed"));
|
showErrorDialog(e, "Couldn't pause recording of model", "Pausing recording of " + m.getName() + " failed"));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
List<Model> models = selectedModels.stream().map(jfxm -> jfxm.getDelegate()).collect(Collectors.toList());
|
massEdit(new ArrayList<JavaFxModel>(selectedModels), action);
|
||||||
massEdit(models, action);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private void resumeRecording(List<JavaFxModel> selectedModels) {
|
private void resumeRecording(List<JavaFxModel> selectedModels) {
|
||||||
|
@ -561,8 +575,7 @@ public class RecordedModelsTab extends Tab implements TabSelectionListener {
|
||||||
showErrorDialog(e, "Couldn't resume recording of model", "Resuming recording of " + m.getName() + " failed"));
|
showErrorDialog(e, "Couldn't resume recording of model", "Resuming recording of " + m.getName() + " failed"));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
List<Model> models = selectedModels.stream().map(jfxm -> jfxm.getDelegate()).collect(Collectors.toList());
|
massEdit(new ArrayList<JavaFxModel>(selectedModels), action);
|
||||||
massEdit(models, action);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveState() {
|
public void saveState() {
|
||||||
|
|
Loading…
Reference in New Issue