1
0
Fork 0
mirror of synced 2024-05-19 03:52:47 +12:00
Rare/rare/commands/launcher/cloud_sync_dialog.py
loathingKernel 6a747ce0f7 Rare: Move sub-commands implementations in the commands subfolder
Right now we have two commands, and with possible third one comming soon.
2024-02-12 21:52:08 +02:00

104 lines
3.5 KiB
Python

import sys
from datetime import datetime
from enum import IntEnum
from logging import getLogger
from PyQt5.QtCore import pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QDialog
from legendary.core import LegendaryCore
from legendary.models.game import InstalledGame
from rare.ui.components.tabs.games.game_info.cloud_sync_widget import Ui_CloudSyncWidget
from rare.utils.misc import icon
from rare.widgets.dialogs import ButtonDialog, game_title
logger = getLogger("CloudSyncDialog")
class CloudSyncDialogResult(IntEnum):
DOWNLOAD = 2
UPLOAD = 1
CANCEL = 0
SKIP = 3
class CloudSyncDialog(ButtonDialog):
result_ready: pyqtSignal = pyqtSignal(CloudSyncDialogResult)
def __init__(self, igame: InstalledGame, dt_local: datetime, dt_remote: datetime, parent=None):
super(CloudSyncDialog, self).__init__(parent=parent)
header = self.tr("Cloud saves for")
self.setWindowTitle(game_title(header, igame.title))
title_label = QLabel(f"<h4>{game_title(header, igame.title)}</h4>", self)
sync_widget = QWidget(self)
self.sync_ui = Ui_CloudSyncWidget()
self.sync_ui.setupUi(sync_widget)
layout = QVBoxLayout()
layout.addWidget(title_label)
layout.addWidget(sync_widget)
self.accept_button.setText(self.tr("Skip"))
self.accept_button.setIcon(icon("fa.chevron-right"))
self.setCentralLayout(layout)
self.status = CloudSyncDialogResult.CANCEL
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 " ")
self.sync_ui.age_label_remote.setText(f"<b>{newer}</b>" if dt_remote > dt_local else " ")
# Set status, if one of them is None
elif dt_remote and not dt_local:
self.status = CloudSyncDialogResult.DOWNLOAD
elif not dt_remote and dt_local:
self.status = CloudSyncDialogResult.UPLOAD
else:
self.status = CloudSyncDialogResult.SKIP
self.sync_ui.date_info_local.setText(dt_local.strftime("%A, %d. %B %Y %X") if dt_local else "None")
self.sync_ui.date_info_remote.setText(dt_remote.strftime("%A, %d. %B %Y %X") if dt_remote else "None")
self.sync_ui.icon_local.setPixmap(icon("mdi.harddisk", "fa.desktop").pixmap(128, 128))
self.sync_ui.icon_remote.setPixmap(icon("mdi.cloud-outline", "ei.cloud").pixmap(128, 128))
self.sync_ui.upload_button.clicked.connect(self.__on_upload)
self.sync_ui.download_button.clicked.connect(self.__on_download)
if self.status == CloudSyncDialogResult.SKIP:
self.accept()
def __on_upload(self):
self.status = CloudSyncDialogResult.UPLOAD
self.done(QDialog.Accepted)
def __on_download(self):
self.status = CloudSyncDialogResult.DOWNLOAD
self.done(QDialog.Accepted)
def done_handler(self):
self.result_ready.emit(self.status)
def accept_handler(self):
self.status = CloudSyncDialogResult.SKIP
def reject_handler(self):
self.status = CloudSyncDialogResult.CANCEL
if __name__ == "__main__":
app = QApplication(sys.argv)
core = LegendaryCore()
@pyqtSlot(int)
def __callback(status: int):
print(repr(CloudSyncDialogResult(status)))
dlg = CloudSyncDialog(core.get_installed_list()[0], datetime.now(), datetime.strptime("2021,1", "%Y,%M"))
dlg.result_ready.connect(__callback)
dlg.open()
app.exec()