forked from j62/ctbrec
Check for running downloads on shutdown
Check for running downloads and ask the user to exit anyway to prevent half downloaded files.
This commit is contained in:
parent
5e46933905
commit
7912b3b727
|
@ -49,6 +49,7 @@ import ctbrec.sites.mfc.MyFreeCams;
|
|||
import ctbrec.sites.showup.Showup;
|
||||
import ctbrec.sites.streamate.Streamate;
|
||||
import ctbrec.sites.stripchat.Stripchat;
|
||||
import ctbrec.ui.controls.Dialogs;
|
||||
import ctbrec.ui.news.NewsTab;
|
||||
import ctbrec.ui.settings.SettingsTab;
|
||||
import ctbrec.ui.tabs.DonateTabFx;
|
||||
|
@ -69,6 +70,7 @@ import javafx.scene.control.TabPane;
|
|||
import javafx.scene.image.Image;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.WindowEvent;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
|
||||
|
@ -86,6 +88,8 @@ public class CamrecApplication extends Application {
|
|||
public static HttpClient httpClient;
|
||||
public static String title;
|
||||
private Stage primaryStage;
|
||||
private RecordedModelsTab modelsTab;
|
||||
private RecordingsTab recordingsTab;
|
||||
|
||||
@Override
|
||||
public void start(Stage primaryStage) throws Exception {
|
||||
|
@ -108,6 +112,23 @@ public class CamrecApplication extends Application {
|
|||
createHttpClient();
|
||||
hostServices = getHostServices();
|
||||
createRecorder();
|
||||
startOnlineMonitor();
|
||||
createGui(primaryStage);
|
||||
checkForUpdates();
|
||||
startHelpServer();
|
||||
}
|
||||
|
||||
private void startHelpServer() {
|
||||
new Thread(() -> {
|
||||
try {
|
||||
DocServer.start();
|
||||
} catch (Exception e) {
|
||||
LOG.error("Couldn't start documentation server", e);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
private void startOnlineMonitor() {
|
||||
onlineMonitor = new OnlineMonitor(recorder);
|
||||
onlineMonitor.start();
|
||||
for (Site site : sites) {
|
||||
|
@ -120,16 +141,6 @@ public class CamrecApplication extends Application {
|
|||
}
|
||||
}
|
||||
}
|
||||
createGui(primaryStage);
|
||||
checkForUpdates();
|
||||
|
||||
new Thread(() -> {
|
||||
try {
|
||||
DocServer.start();
|
||||
} catch (Exception e) {
|
||||
LOG.error("Couldn't start documentation server", e);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
private void logEnvironment() {
|
||||
|
@ -158,9 +169,9 @@ public class CamrecApplication extends Application {
|
|||
}
|
||||
}
|
||||
|
||||
RecordedModelsTab modelsTab = new RecordedModelsTab("Recording", recorder, sites);
|
||||
modelsTab = new RecordedModelsTab("Recording", recorder, sites);
|
||||
rootPane.getTabs().add(modelsTab);
|
||||
RecordingsTab recordingsTab = new RecordingsTab("Recordings", recorder, config, sites);
|
||||
recordingsTab = new RecordingsTab("Recordings", recorder, config, sites);
|
||||
rootPane.getTabs().add(recordingsTab);
|
||||
settingsTab = new SettingsTab(sites, recorder);
|
||||
rootPane.getTabs().add(settingsTab);
|
||||
|
@ -191,8 +202,32 @@ public class CamrecApplication extends Application {
|
|||
primaryStage.xProperty().addListener((observable, oldVal, newVal) -> Config.getInstance().getSettings().windowX = newVal.intValue());
|
||||
primaryStage.yProperty().addListener((observable, oldVal, newVal) -> Config.getInstance().getSettings().windowY = newVal.intValue());
|
||||
primaryStage.show();
|
||||
primaryStage.setOnCloseRequest(e -> {
|
||||
primaryStage.setOnCloseRequest(createShutdownHandler());
|
||||
|
||||
// register changelistener to activate / deactivate tabs, when the user switches between them
|
||||
rootPane.getSelectionModel().selectedItemProperty().addListener((ChangeListener<Tab>) (ov, from, to) -> {
|
||||
if (from instanceof TabSelectionListener) {
|
||||
((TabSelectionListener) from).deselected();
|
||||
}
|
||||
if (to instanceof TabSelectionListener) {
|
||||
((TabSelectionListener) to).selected();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private javafx.event.EventHandler<WindowEvent> createShutdownHandler() {
|
||||
return e -> {
|
||||
e.consume();
|
||||
|
||||
// check for active downloads
|
||||
if (recordingsTab.isDownloadRunning()) {
|
||||
boolean exitAnyway = Dialogs.showConfirmDialog("Shutdown", "Do you want to exit anyway?", "There are downloads running",
|
||||
primaryStage.getScene());
|
||||
if (!exitAnyway) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Alert shutdownInfo = new AutosizeAlert(Alert.AlertType.INFORMATION, primaryStage.getScene());
|
||||
shutdownInfo.setTitle("Shutdown");
|
||||
shutdownInfo.setContentText("Shutting down. Please wait while recordings are finished...");
|
||||
|
@ -237,17 +272,7 @@ public class CamrecApplication extends Application {
|
|||
}
|
||||
}
|
||||
}.start();
|
||||
});
|
||||
|
||||
// register changelistener to activate / deactivate tabs, when the user switches between them
|
||||
rootPane.getSelectionModel().selectedItemProperty().addListener((ChangeListener<Tab>) (ov, from, to) -> {
|
||||
if (from instanceof TabSelectionListener) {
|
||||
((TabSelectionListener) from).deselected();
|
||||
}
|
||||
if (to instanceof TabSelectionListener) {
|
||||
((TabSelectionListener) to).selected();
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
private void registerAlertSystem() {
|
||||
|
|
|
@ -180,6 +180,12 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
|||
restoreState();
|
||||
}
|
||||
|
||||
public boolean isDownloadRunning() {
|
||||
return observableRecordings.stream()
|
||||
.map(Recording::getStatus)
|
||||
.anyMatch(s -> s == DOWNLOADING);
|
||||
}
|
||||
|
||||
private TableCell<JavaFxRecording, Number> createSizeCell() {
|
||||
TableCell<JavaFxRecording, Number> cell = new TableCell<JavaFxRecording, Number>() {
|
||||
@Override
|
||||
|
@ -193,7 +199,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
|||
if(Objects.equals(System.getenv("CTBREC_DEV"), "1")) {
|
||||
int row = this.getTableRow().getIndex();
|
||||
JavaFxRecording rec = tableViewProperty().get().getItems().get(row);
|
||||
if(!rec.valueChanged() && rec.getStatus() == State.RECORDING) {
|
||||
if(!rec.valueChanged() && rec.getStatus() == RECORDING) {
|
||||
setStyle("-fx-alignment: CENTER-RIGHT; -fx-background-color: red");
|
||||
}
|
||||
}
|
||||
|
@ -372,7 +378,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
|||
JavaFxRecording first = recordings.get(0);
|
||||
MenuItem openInPlayer = new MenuItem("Open in Player");
|
||||
openInPlayer.setOnAction(e -> play(recordings.get(0)));
|
||||
if(first.getStatus() == State.FINISHED || Config.getInstance().getSettings().localRecording) {
|
||||
if(first.getStatus() == FINISHED || Config.getInstance().getSettings().localRecording) {
|
||||
contextMenu.getItems().add(openInPlayer);
|
||||
}
|
||||
|
||||
|
@ -392,7 +398,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
|||
|
||||
MenuItem deleteRecording = new MenuItem("Delete");
|
||||
deleteRecording.setOnAction(e -> delete(recordings));
|
||||
if(first.getStatus() == State.FINISHED || first.getStatus() == State.WAITING || first.getStatus() == State.FAILED || recordings.size() > 1) {
|
||||
if(first.getStatus() == FINISHED || first.getStatus() == WAITING || first.getStatus() == FAILED || recordings.size() > 1) {
|
||||
contextMenu.getItems().add(deleteRecording);
|
||||
deleteRecording.setDisable(recordings.stream().allMatch(Recording::isPinned));
|
||||
}
|
||||
|
@ -405,7 +411,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
|||
|
||||
MenuItem downloadRecording = new MenuItem("Download");
|
||||
downloadRecording.setOnAction(e -> download(first));
|
||||
if (!Config.getInstance().getSettings().localRecording && first.getStatus() == State.FINISHED) {
|
||||
if (!Config.getInstance().getSettings().localRecording && first.getStatus() == FINISHED) {
|
||||
contextMenu.getItems().add(downloadRecording);
|
||||
}
|
||||
|
||||
|
@ -549,7 +555,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
|||
if(target != null) {
|
||||
config.getSettings().lastDownloadDir = target.getParent();
|
||||
startDownloadThread(target, recording);
|
||||
recording.setStatus(State.DOWNLOADING);
|
||||
recording.setStatus(DOWNLOADING);
|
||||
recording.setProgress(0);
|
||||
}
|
||||
}
|
||||
|
@ -670,7 +676,7 @@ public class RecordingsTab extends Tab implements TabSelectionListener {
|
|||
List<Exception> exceptions = new ArrayList<>();
|
||||
for (Iterator<JavaFxRecording> iterator = recordings.iterator(); iterator.hasNext();) {
|
||||
JavaFxRecording r = iterator.next();
|
||||
if (r.getStatus() != FINISHED && r.getStatus() != FAILED && r.getStatus() != State.WAITING) {
|
||||
if (r.getStatus() != FINISHED && r.getStatus() != FAILED && r.getStatus() != WAITING) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
|
|
Loading…
Reference in New Issue