1
0
Fork 0
mirror of synced 2024-05-20 12:32:50 +12:00

Sync saves when game finished

This commit is contained in:
lennard 2023-03-18 16:14:01 +01:00
parent 748ff6d9ed
commit 3874fac402
No known key found for this signature in database
GPG key ID: AB6010FE63C7C2B1
3 changed files with 39 additions and 8 deletions

View file

@ -5,7 +5,7 @@ from logging import getLogger
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QDialog, QSizePolicy, QLayout, QApplication, QWidget
from legendary.core import LegendaryCore
from legendary.models.game import InstalledGame, SaveGameStatus
from legendary.models.game import InstalledGame
from rare.ui.components.dialogs.sync_save_dialog import Ui_SyncSaveDialog
from rare.ui.components.tabs.games.game_info.sync_widget import Ui_SyncWidget
@ -44,10 +44,10 @@ class CloudSaveDialog(QDialog, Ui_SyncSaveDialog):
newer = self.tr("Newer")
if dt_remote and dt_local:
self.sync_ui.age_label_local.setText(
f"<b>{newer}</b>" if dt_remote > dt_local else " "
f"<b>{newer}</b>" if dt_remote < dt_local else " "
)
self.sync_ui.age_label_remote.setText(
f"<b>{newer}</b>" if dt_remote < dt_local else " "
f"<b>{newer}</b>" if dt_remote > dt_local else " "
)
elif dt_remote and not dt_local:
self.status = self.DOWNLOAD

View file

@ -13,6 +13,7 @@ from PyQt5.QtCore import QObject, QProcess, pyqtSignal, QUrl, QRunnable, QThread
from PyQt5.QtGui import QDesktopServices
from PyQt5.QtNetwork import QLocalServer, QLocalSocket
from PyQt5.QtWidgets import QApplication
from legendary.models.game import SaveGameStatus
from rare.lgndr.core import LegendaryCore
from rare.models.launcher import ErrorModel, Actions, FinishedModel, BaseModel, StateChangedModel
@ -196,10 +197,36 @@ class RareLauncher(RareApp):
else:
self.logger.error("Can't send message")
def check_saves_finished(self, exit_code: int):
self.rgame.signals.widget.update.connect(lambda: self.on_exit(exit_code))
state, (dt_local, dt_remote) = self.rgame.save_game_state
if state == SaveGameStatus.LOCAL_NEWER:
action = CloudSaveDialog.UPLOAD
else:
action = CloudSaveDialog(self.rgame.igame, dt_local, dt_remote).get_action()
if not action:
self.on_exit(exit_code)
return
if self.console:
self.console.log("Syncing saves...")
if action == CloudSaveDialog.UPLOAD:
self.rgame.upload_saves()
elif action == CloudSaveDialog.DOWNLOAD:
self.rgame.download_saves()
def game_finished(self, exit_code):
self.logger.info("game finished")
self.logger.info("Game finished")
if self.rgame.supports_cloud_saves:
self.check_saves_finished(exit_code)
else:
self.on_exit(exit_code)
def on_exit(self, exit_code: int):
if self.console:
self.console.on_process_exit(self.core.get_game(self.app_name).app_title, exit_code)
self.send_message(
FinishedModel(
action=Actions.finished,
@ -282,6 +309,11 @@ class RareLauncher(RareApp):
_, (dt_local, dt_remote) = self.rgame.save_game_state
dlg = CloudSaveDialog(self.rgame.igame, dt_local, dt_remote)
action = dlg.get_action()
if self.console:
if action == CloudSaveDialog.DOWNLOAD:
self.console.log("Downloading saves")
elif action == CloudSaveDialog.UPLOAD:
self.console.log("Uloading saves")
self.start_prepare(action)
def start(self, args: InitArgs):

View file

@ -184,10 +184,9 @@ class RareGameSlim(RareGameBase):
latest = self.latest_save
# lk: if the save path wasn't known at startup, dt_local will be None
# In that case resolve the save again before returning
if latest.dt_local is None:
latest.status, (latest.dt_local, latest.dt_remote) = self.core.check_savegame_state(
self.save_path, latest.file
)
latest.status, (latest.dt_local, latest.dt_remote) = self.core.check_savegame_state(
self.save_path, latest.file
)
return latest.status, (latest.dt_local, latest.dt_remote)
return SaveGameStatus.NO_SAVE, (None, None)