2023-02-09 10:19:01 +13:00
|
|
|
import datetime
|
|
|
|
import sys
|
|
|
|
from logging import getLogger
|
|
|
|
|
|
|
|
from PyQt5.QtCore import Qt
|
|
|
|
from PyQt5.QtWidgets import QDialog, QSizePolicy, QLayout, QApplication, QWidget
|
|
|
|
from legendary.core import LegendaryCore
|
2023-03-19 04:14:01 +13:00
|
|
|
from legendary.models.game import InstalledGame
|
2023-02-09 10:19:01 +13:00
|
|
|
|
|
|
|
from rare.ui.components.dialogs.sync_save_dialog import Ui_SyncSaveDialog
|
|
|
|
from rare.ui.components.tabs.games.game_info.sync_widget import Ui_SyncWidget
|
|
|
|
from rare.utils.misc import icon
|
|
|
|
|
|
|
|
logger = getLogger("Cloud Saves")
|
|
|
|
|
|
|
|
|
|
|
|
class CloudSaveDialog(QDialog, Ui_SyncSaveDialog):
|
|
|
|
DOWNLOAD = 2
|
|
|
|
UPLOAD = 1
|
|
|
|
CANCEL = 0
|
2023-04-08 05:37:27 +12:00
|
|
|
SKIP = 3
|
2023-02-09 10:19:01 +13:00
|
|
|
|
|
|
|
def __init__(
|
|
|
|
self,
|
|
|
|
igame: InstalledGame,
|
|
|
|
dt_local: datetime.datetime,
|
|
|
|
dt_remote: datetime.datetime,
|
|
|
|
):
|
|
|
|
super(CloudSaveDialog, self).__init__()
|
|
|
|
self.setupUi(self)
|
|
|
|
|
|
|
|
self.sync_widget = QWidget()
|
|
|
|
self.sync_ui = Ui_SyncWidget()
|
|
|
|
self.sync_ui.setupUi(self.sync_widget)
|
|
|
|
|
|
|
|
self.sync_widget_layout.addWidget(self.sync_widget)
|
|
|
|
|
|
|
|
self.setAttribute(Qt.WA_DeleteOnClose, True)
|
|
|
|
self.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
|
|
|
|
|
|
|
self.status = self.CANCEL
|
|
|
|
|
2023-03-11 13:05:41 +13:00
|
|
|
self.title_label.setText(f"{self.title_label.text()} <b>{igame.title}</b>")
|
2023-02-09 10:19:01 +13:00
|
|
|
|
2023-03-11 13:05:41 +13:00
|
|
|
newer = self.tr("Newer")
|
2023-03-03 11:39:03 +13:00
|
|
|
if dt_remote and dt_local:
|
2023-03-11 13:05:41 +13:00
|
|
|
self.sync_ui.age_label_local.setText(
|
2023-03-19 04:14:01 +13:00
|
|
|
f"<b>{newer}</b>" if dt_remote < dt_local else " "
|
2023-03-11 13:05:41 +13:00
|
|
|
)
|
|
|
|
self.sync_ui.age_label_remote.setText(
|
2023-03-19 04:14:01 +13:00
|
|
|
f"<b>{newer}</b>" if dt_remote > dt_local else " "
|
2023-03-11 13:05:41 +13:00
|
|
|
)
|
2023-04-08 05:37:27 +12:00
|
|
|
# Set status, if one of them is None
|
2023-03-03 11:39:03 +13:00
|
|
|
elif dt_remote and not dt_local:
|
|
|
|
self.status = self.DOWNLOAD
|
2023-04-08 05:37:27 +12:00
|
|
|
elif not dt_remote and dt_local:
|
2023-03-03 11:39:03 +13:00
|
|
|
self.status = self.UPLOAD
|
2023-04-08 05:37:27 +12:00
|
|
|
else:
|
|
|
|
self.status = self.SKIP
|
2023-03-03 11:39:03 +13:00
|
|
|
|
2023-04-03 03:14:44 +12:00
|
|
|
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")
|
2023-02-09 10:19:01 +13:00
|
|
|
|
|
|
|
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(lambda: self.btn_clicked(self.UPLOAD))
|
|
|
|
self.sync_ui.download_button.clicked.connect(lambda: self.btn_clicked(self.DOWNLOAD))
|
|
|
|
self.cancel_button.clicked.connect(self.close)
|
|
|
|
|
|
|
|
self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
|
|
|
self.layout().setSizeConstraint(QLayout.SetFixedSize)
|
|
|
|
|
|
|
|
def get_action(self):
|
2023-04-08 05:37:27 +12:00
|
|
|
if self.status == self.SKIP:
|
|
|
|
return self.SKIP
|
2023-03-11 13:05:41 +13:00
|
|
|
self.exec_()
|
2023-02-09 10:19:01 +13:00
|
|
|
return self.status
|
|
|
|
|
|
|
|
def btn_clicked(self, status):
|
|
|
|
self.status = status
|
|
|
|
self.close()
|
|
|
|
|
|
|
|
|
|
|
|
def test_dialog():
|
|
|
|
app = QApplication(sys.argv)
|
|
|
|
core = LegendaryCore()
|
|
|
|
dlg = CloudSaveDialog(core.get_installed_list()[0], datetime.datetime.now(),
|
2023-03-11 13:05:41 +13:00
|
|
|
datetime.datetime.strptime("2021,1", "%Y,%M"))
|
2023-02-09 10:19:01 +13:00
|
|
|
print(dlg.get_action())
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
test_dialog()
|