Sync saves when game finished
This commit is contained in:
parent
748ff6d9ed
commit
3874fac402
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in a new issue