forked from j62/ctbrec
1
0
Fork 0

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:
0xboobface 2020-05-23 13:49:50 +02:00
parent 5e46933905
commit 7912b3b727
2 changed files with 61 additions and 30 deletions

View File

@ -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() {

View File

@ -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 {