1
0
Fork 0
mirror of synced 2024-06-03 03:04:42 +12:00

Merge pull request #221 from loathingKernel/fixups

Some more fixups
This commit is contained in:
Dummerle 2022-06-26 15:29:31 +02:00 committed by GitHub
commit c1c2153cc5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 86 additions and 187 deletions

View file

@ -2,7 +2,7 @@ import platform
from logging import getLogger
from PyQt5.QtCore import Qt, pyqtSignal, QRunnable, QObject, QThreadPool, QSettings
from PyQt5.QtWidgets import QDialog, QApplication
from PyQt5.QtWidgets import QDialog, qApp
from requests.exceptions import ConnectionError, HTTPError
from rare.components.dialogs.login import LoginDialog
@ -19,6 +19,7 @@ class LaunchWorker(QRunnable):
class Signals(QObject):
progress = pyqtSignal(int)
result = pyqtSignal(object, str)
finished = pyqtSignal()
def __init__(self):
super(LaunchWorker, self).__init__()
@ -53,8 +54,7 @@ class ImageWorker(LaunchWorker):
self.core.lgd.set_game_meta(game.app_name, game)
self.image_manager.download_image_blocking(game)
self.signals.progress.emit(int(i / len(game_list) * 100))
self.signals.progress.emit(100)
self.signals.finished.emit()
class ApiRequestWorker(LaunchWorker):
@ -65,7 +65,7 @@ class ApiRequestWorker(LaunchWorker):
def run(self) -> None:
if self.settings.value("mac_meta", platform.system() == "Darwin", bool):
try:
result = self.core.get_game_and_dlc_list(update_assets=True, platform="Mac")
result = self.core.get_game_and_dlc_list(update_assets=False, platform="Mac")
except HTTPError:
result = [], {}
else:
@ -74,7 +74,7 @@ class ApiRequestWorker(LaunchWorker):
if self.settings.value("win32_meta", False, bool):
try:
result = self.core.get_game_and_dlc_list(update_assets=True, platform="Win32")
result = self.core.get_game_and_dlc_list(update_assets=False, platform="Win32")
except HTTPError:
result = [], {}
else:
@ -95,8 +95,10 @@ class LaunchDialog(QDialog, Ui_LaunchDialog):
Qt.Window
| Qt.Dialog
| Qt.CustomizeWindowHint
| Qt.WindowSystemMenuHint
| Qt.WindowTitleHint
| Qt.WindowMinimizeButtonHint
| Qt.MSWindowsFixedSizeDialogHint
)
self.setWindowModality(Qt.WindowModal)
@ -111,7 +113,7 @@ class LaunchDialog(QDialog, Ui_LaunchDialog):
if self.args.offline:
pass
else:
QApplication.processEvents()
qApp.processEvents()
if self.core.login():
logger.info("You are logged in")
else:
@ -132,20 +134,25 @@ class LaunchDialog(QDialog, Ui_LaunchDialog):
else:
self.quit_app.emit(0)
def start_api_requests(self):
# gamelist and no_asset games are from Image worker
api_worker = ApiRequestWorker()
api_worker.signals.result.connect(self.handle_api_worker_result)
self.thread_pool.start(api_worker)
def launch(self):
if not self.args.offline:
self.image_info.setText(self.tr("Downloading Images"))
image_worker = ImageWorker()
image_worker.signals.progress.connect(self.update_image_progbar)
image_worker.signals.result.connect(self.handle_api_worker_result)
image_worker.signals.progress.connect(self.update_image_progbar)
# lk: start the api requests worker after the manifests have been downloaded
# lk: to avoid force updating the assets twice and causing inconsistencies
image_worker.signals.finished.connect(self.start_api_requests)
image_worker.signals.finished.connect(self.finish)
self.thread_pool.start(image_worker)
# gamelist and no_asset games are from Image worker
api_worker = ApiRequestWorker()
api_worker.signals.result.connect(self.handle_api_worker_result)
self.thread_pool.start(api_worker)
# cloud save from another worker, because it is used in cloud_save_utils too
cloud_worker = CloudWorker()
cloud_worker.signals.result_ready.connect(lambda x: self.handle_api_worker_result(x, "saves"))
@ -180,14 +187,14 @@ class LaunchDialog(QDialog, Ui_LaunchDialog):
self.api_results.game_list,
self.api_results.dlcs,
) = self.core.get_game_and_dlc_list(False)
elif text == "no_assets":
self.api_results.no_asset_games = result if result else []
elif text == "32bit":
self.api_results.bit32_games = [i.app_name for i in result[0]] if result else []
elif text == "mac":
self.api_results.mac_games = [i.app_name for i in result[0]] if result else []
elif text == "no_assets":
self.api_results.no_asset_games = result if result else []
elif text == "saves":
self.api_results.saves = result
@ -196,14 +203,18 @@ class LaunchDialog(QDialog, Ui_LaunchDialog):
def update_image_progbar(self, i: int):
self.image_prog_bar.setValue(i)
if i == 100:
self.finish()
def finish(self):
if self.completed == 1:
self.completed += 1
if self.completed == 2:
logger.info("App starting")
self.image_info.setText(self.tr("Starting..."))
ApiResultsSingleton(self.api_results)
self.start_app.emit()
else:
self.completed += 1
self.start_app.emit()
def reject(self) -> None:
if self.completed >= 3:
super(LaunchDialog, self).reject()
else:
pass

View file

@ -43,9 +43,11 @@ class LoginDialog(QDialog):
Qt.Window
| Qt.Dialog
| Qt.CustomizeWindowHint
| Qt.WindowSystemMenuHint
| Qt.WindowTitleHint
| Qt.WindowMinimizeButtonHint
| Qt.WindowCloseButtonHint
| Qt.MSWindowsFixedSizeDialogHint
)
self.setWindowModality(Qt.WindowModal)

View file

@ -12,7 +12,6 @@ from rare.shared import (
ApiResultsSingleton,
)
from rare.shared.image_manager import ImageManagerSingleton
from rare.ui.components.tabs.games.games_tab import Ui_GamesTab
from rare.widgets.library_layout import LibraryLayout
from rare.widgets.sliding_stack import SlidingStackedWidget
from .cloud_save_utils import CloudSaveUtils
@ -42,9 +41,6 @@ class GamesTab(QStackedWidget):
def __init__(self, parent=None):
super(GamesTab, self).__init__(parent=parent)
self.ui = Ui_GamesTab()
self.ui.setupUi(self)
self.core = LegendaryCoreSingleton()
self.signals = GlobalSignalsSingleton()
self.args = ArgumentsSingleton()
@ -60,22 +56,26 @@ class GamesTab(QStackedWidget):
self.game_utils = GameUtils(parent=self)
self.head_bar = GameListHeadBar(self)
self.games = QWidget(parent=self)
self.games.setLayout(QVBoxLayout())
self.addWidget(self.games)
self.head_bar = GameListHeadBar(parent=self.games)
self.head_bar.import_clicked.connect(self.show_import)
self.head_bar.egl_sync_clicked.connect(self.show_egl_sync)
self.ui.games.layout().insertWidget(0, self.head_bar)
self.games.layout().addWidget(self.head_bar)
self.game_info_tabs = GameInfoTabs(self.dlcs, self.game_utils, self)
self.game_info_tabs.back_clicked.connect(lambda: self.setCurrentIndex(0))
self.game_info_tabs.back_clicked.connect(lambda: self.setCurrentWidget(self.games))
self.addWidget(self.game_info_tabs)
self.game_info_tabs.info.verification_finished.connect(
self.verification_finished
)
self.game_info_tabs.info.uninstalled.connect(lambda x: self.setCurrentIndex(0))
self.game_info_tabs.info.uninstalled.connect(lambda x: self.setCurrentWidget(self.games))
self.import_sync_tabs = ImportSyncTabs(self)
self.import_sync_tabs.back_clicked.connect(lambda: self.setCurrentIndex(0))
self.import_sync_tabs.back_clicked.connect(lambda: self.setCurrentWidget(self.games))
self.addWidget(self.import_sync_tabs)
for i in self.game_list:
@ -91,12 +91,9 @@ class GamesTab(QStackedWidget):
self.ue_name = ""
self.uninstalled_info_tabs = UninstalledInfoTabs(self)
self.uninstalled_info_tabs.back_clicked.connect(lambda: self.setCurrentIndex(0))
self.uninstalled_info_tabs.back_clicked.connect(lambda: self.setCurrentWidget(self.games))
self.addWidget(self.uninstalled_info_tabs)
# navigation
self.head_bar.import_game.clicked.connect(lambda: self.setCurrentIndex(2))
self.no_asset_names = []
if not self.args.offline:
for game in self.no_assets:
@ -106,19 +103,19 @@ class GamesTab(QStackedWidget):
self.installed = self.core.get_installed_list()
self.view_stack = SlidingStackedWidget(self.ui.library_frame)
self.view_stack = SlidingStackedWidget(self.games)
self.view_stack.setFrameStyle(QFrame.NoFrame)
self.icon_view_scroll = QScrollArea(self.view_stack)
self.icon_view_scroll.setWidgetResizable(True)
self.icon_view_scroll.setFrameShape(QFrame.NoFrame)
self.icon_view_scroll.setFrameShape(QFrame.StyledPanel)
self.icon_view_scroll.horizontalScrollBar().setDisabled(True)
self.list_view_scroll = QScrollArea(self.view_stack)
self.list_view_scroll.setWidgetResizable(True)
self.list_view_scroll.setFrameShape(QFrame.NoFrame)
self.list_view_scroll.setFrameShape(QFrame.StyledPanel)
self.list_view_scroll.horizontalScrollBar().setDisabled(True)
self.icon_view = QWidget(self.icon_view_scroll)
self.icon_view.setLayout(LibraryLayout(self.icon_view))
self.icon_view.layout().setContentsMargins(0, 0, 0, 0)
self.icon_view.layout().setContentsMargins(0, 13, 0, 0)
self.icon_view.layout().setAlignment(Qt.AlignTop)
self.list_view = QWidget(self.list_view_scroll)
self.list_view.setLayout(QVBoxLayout(self.list_view))
@ -128,7 +125,7 @@ class GamesTab(QStackedWidget):
self.list_view_scroll.setWidget(self.list_view)
self.view_stack.addWidget(self.icon_view_scroll)
self.view_stack.addWidget(self.list_view_scroll)
self.ui.library_frame_layout.addWidget(self.view_stack)
self.games.layout().addWidget(self.view_stack)
# add installing game widget for icon view: List view not supported
self.installing_widget = InstallingGameWidget()
@ -188,28 +185,24 @@ class GamesTab(QStackedWidget):
l_widget.update_text()
def show_import(self):
self.setCurrentIndex(2)
self.setCurrentWidget(self.import_sync_tabs)
self.import_sync_tabs.show_import()
def show_egl_sync(self, idx):
self.setCurrentIndex(2)
self.setCurrentWidget(self.import_sync_tabs)
self.import_sync_tabs.show_egl_sync()
def show_game_info(self, app_name):
self.game_info_tabs.update_game(app_name)
self.setCurrentIndex(1)
self.setCurrentWidget(self.game_info_tabs)
def show_uninstalled_info(self, game):
self.uninstalled_info_tabs.update_game(game)
self.setCurrentIndex(3)
self.setCurrentWidget(self.uninstalled_info_tabs)
@pyqtSlot()
def update_count_games_label(self):
self.ui.count_games_label.setText(
self.tr("Installed Games: {}\tAvailable Games: {}").format(
len(self.core.get_installed_list()), len(self.game_list)
)
)
self.head_bar.set_games_count(len(self.core.get_installed_list()), len(self.game_list))
def setup_game_list(self):
self.update_count_games_label()

View file

@ -112,9 +112,9 @@ class LibraryWidget(ImageWidget):
self.updateProgress(0)
def updateProgress(self, progress: int):
self.progress_label.setText(f"{progress:02}%")
if progress > self._progress:
self._progress = progress
self.progress_label.setText(f"{progress:02}%")
self.setPixmap(self.progressPixmap(self._color_pixmap, self._gray_pixmap, progress))
def hideProgress(self, stopped: bool):

View file

@ -1,12 +1,12 @@
from PyQt5.QtCore import QSize, QSettings, pyqtSignal
from PyQt5.QtCore import QSettings, pyqtSignal
from PyQt5.QtWidgets import (
QLineEdit,
QLabel,
QPushButton,
QWidget,
QHBoxLayout,
QComboBox,
)
from qtawesome import IconWidget
from rare.shared import ApiResultsSingleton
from rare.utils.extra_widgets import SelectViewWidget, ButtonLineEdit
@ -19,10 +19,7 @@ class GameListHeadBar(QWidget):
def __init__(self, parent=None):
super(GameListHeadBar, self).__init__(parent=parent)
self.api_results = ApiResultsSingleton()
# self.installed_only = QCheckBox(self.tr("Installed only"))
self.settings = QSettings()
# self.installed_only.setChecked(self.settings.value("installed_only", False, bool))
# self.layout.addWidget(self.installed_only)
self.filter = QComboBox()
self.filter.addItems(
@ -30,7 +27,8 @@ class GameListHeadBar(QWidget):
self.tr("All games"),
self.tr("Installed only"),
self.tr("Offline Games"),
])
]
)
self.available_filters = [
"all",
@ -75,6 +73,22 @@ class GameListHeadBar(QWidget):
checked = QSettings().value("icon_view", True, bool)
installed_tooltip = self.tr("Installed games")
self.installed_icon = IconWidget(parent=self)
self.installed_icon.setIcon(icon("ph.floppy-disk-back-fill"))
self.installed_icon.setToolTip(installed_tooltip)
self.installed_label = QLabel(parent=self)
font = self.installed_label.font()
font.setBold(True)
self.installed_label.setFont(font)
self.installed_label.setToolTip(installed_tooltip)
available_tooltip = self.tr("Available games")
self.available_icon = IconWidget(parent=self)
self.available_icon.setIcon(icon("ph.floppy-disk-back-light"))
self.available_icon.setToolTip(available_tooltip)
self.available_label = QLabel(parent=self)
self.available_label.setToolTip(available_tooltip)
self.view = SelectViewWidget(checked)
self.refresh_list = QPushButton()
@ -86,14 +100,23 @@ class GameListHeadBar(QWidget):
layout.addStretch(1)
layout.addWidget(self.import_game)
layout.addWidget(self.egl_sync)
layout.addStretch(1)
layout.addStretch(2)
layout.addWidget(self.search_bar)
layout.addStretch(3)
layout.addStretch(2)
layout.addWidget(self.installed_icon)
layout.addWidget(self.installed_label)
layout.addWidget(self.available_icon)
layout.addWidget(self.available_label)
layout.addStretch(2)
layout.addWidget(self.view)
layout.addStretch(1)
layout.addStretch(2)
layout.addWidget(self.refresh_list)
self.setLayout(layout)
def set_games_count(self, inst: int, avail: int) -> None:
self.installed_label.setText(str(inst))
self.available_label.setText(str(avail))
def filter_changed(self, i):
self.filterChanged.emit(self.available_filters[i])
self.settings.setValue("filter", i)

View file

@ -1,57 +0,0 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/games_tab.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_GamesTab(object):
def setupUi(self, GamesTab):
GamesTab.setObjectName("GamesTab")
GamesTab.resize(104, 42)
GamesTab.setWindowTitle("StackedWidget")
self.games = QtWidgets.QWidget()
self.games.setObjectName("games")
self.games_layout = QtWidgets.QVBoxLayout(self.games)
self.games_layout.setObjectName("games_layout")
self.library_frame = QtWidgets.QFrame(self.games)
self.library_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.library_frame.setObjectName("library_frame")
self.library_frame_layout = QtWidgets.QVBoxLayout(self.library_frame)
self.library_frame_layout.setContentsMargins(0, 0, 0, 0)
self.library_frame_layout.setObjectName("library_frame_layout")
self.count_games_layout = QtWidgets.QHBoxLayout()
self.count_games_layout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.count_games_layout.setContentsMargins(6, 6, 6, 6)
self.count_games_layout.setObjectName("count_games_layout")
self.count_games_label = QtWidgets.QLabel(self.library_frame)
self.count_games_label.setText("error")
self.count_games_label.setObjectName("count_games_label")
self.count_games_layout.addWidget(self.count_games_label, 0, QtCore.Qt.AlignTop)
self.library_frame_layout.addLayout(self.count_games_layout)
self.games_layout.addWidget(self.library_frame)
self.games_layout.setStretch(0, 1)
GamesTab.addWidget(self.games)
self.retranslateUi(GamesTab)
GamesTab.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(GamesTab)
def retranslateUi(self, GamesTab):
pass
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
GamesTab = QtWidgets.QStackedWidget()
ui = Ui_GamesTab()
ui.setupUi(GamesTab)
GamesTab.show()
sys.exit(app.exec_())

View file

@ -1,73 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>GamesTab</class>
<widget class="QStackedWidget" name="GamesTab">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>104</width>
<height>42</height>
</rect>
</property>
<property name="windowTitle">
<string notr="true">StackedWidget</string>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="games">
<layout class="QVBoxLayout" name="games_layout" stretch="1">
<item>
<widget class="QFrame" name="library_frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<layout class="QVBoxLayout" name="library_frame_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="count_games_layout">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item alignment="Qt::AlignTop">
<widget class="QLabel" name="count_games_label">
<property name="text">
<string notr="true">error</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>