Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions locales/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@

"DLG_RESUME_TITLE": "Resume Installation",
"DLG_RESUME_MESSAGE": "Previous installation was interrupted at \"{0}\". Resume from there?",
"DLG_STALE_PROGRESS_TITLE": "Progress Discarded",
"DLG_STALE_PROGRESS_MESSAGE": "The saved progress file refers to a mod that no longer exists in the modlist. Press OK to start a full installation, or Cancel to abort.",

"DLG_HASH_MISMATCH_TITLE": "Hash Mismatch",
"DLG_HASH_MISMATCH_UPDATE_TITLE": "Update Hashes",
Expand Down
34 changes: 26 additions & 8 deletions src/main/java/de/tosox/zonerelay/ui/MainFrameController.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import java.io.IOException;
import java.nio.file.Files;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;

@Singleton
Expand Down Expand Up @@ -91,8 +92,12 @@ public void onInstallClick() {
return;
}

String resumeFromId = promptForResume(config);
Optional<String> resumeResult = promptForResume(config);
if (resumeResult.isEmpty()) {
return;
}

String resumeFromId = resumeResult.get().isEmpty() ? null : resumeResult.get();
installCoordinator.startInstallation(config, mainFrame.isFullInstallSelected(), resumeFromId);
}

Expand All @@ -113,33 +118,46 @@ public void onLaunchClick() {
}
}

private String promptForResume(ModlistConfig config) {
private Optional<String> promptForResume(ModlistConfig config) {
if (!progressStore.hasSavedState()) {
return null;
return Optional.of("");
}

String savedId = progressStore.load();
if (savedId == null) {
return null;
return Optional.of("");
}

String entryName = findEntryNameById(config, savedId);
String displayName = (entryName != null) ? entryName : savedId;
if (entryName == null) {
int choice = JOptionPane.showConfirmDialog(
mainFrame,
localizer.translate("DLG_STALE_PROGRESS_MESSAGE"),
localizer.translate("DLG_STALE_PROGRESS_TITLE"),
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE
);
if (choice != JOptionPane.OK_OPTION) {
return Optional.empty();
}
progressStore.clear();
return Optional.of("");
}

int choice = JOptionPane.showConfirmDialog(
mainFrame,
localizer.translate("DLG_RESUME_MESSAGE", displayName),
localizer.translate("DLG_RESUME_MESSAGE", entryName),
localizer.translate("DLG_RESUME_TITLE"),
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE
);

if (choice == JOptionPane.YES_OPTION) {
return savedId;
return Optional.of(savedId);
}

progressStore.clear();
return null;
return Optional.of("");
}

private String findEntryNameById(ModlistConfig config, String id) {
Expand Down
Loading