1
0
Fork 0
mirror of synced 2024-05-23 05:52:53 +12:00

Added icons, fixed login bug

This commit is contained in:
Dummerle 2021-03-08 20:36:42 +01:00
parent d3eabac818
commit 9f28666d66
13 changed files with 96 additions and 59 deletions

View file

@ -67,7 +67,10 @@ class LaunchDialog(QDialog):
self.setLayout(self.layout)
def login(self):
if not LoginDialog(core=self.core).login():
print("Login dlg")
if LoginDialog(core=self.core).login():
self.login_thread.start()
else:
exit(0)
def launch(self, core: LegendaryCore):

View file

@ -2,6 +2,7 @@ from PyQt5.QtCore import QSize
from PyQt5.QtGui import QIcon, QFont
from PyQt5.QtWidgets import QTabWidget, QTabBar, QWidget, QToolButton, QWidgetAction, QMenu
from legendary.core import LegendaryCore
from qtawesome import icon
from Rare import style_path
from Rare.Components.Tabs.Account.AccountWidget import MiniWidget
@ -37,8 +38,7 @@ class TabWidget(QTabWidget):
self.addTab(self.account, "")
self.setTabEnabled(disabled_tab + 1, False)
# self.settings = SettingsTab(core)
self.addTab(self.settings, QIcon(style_path + "/Icons/settings.png"), None)
self.addTab(self.settings, icon("fa.gear", color='white'), None)
self.setIconSize(QSize(25, 25))
self.tabBar().setTabButton(3, self.tabBar().RightSide, TabButtonWidget(core))
@ -70,8 +70,7 @@ class TabButtonWidget(QToolButton):
super(TabButtonWidget, self).__init__()
self.setText("Icon")
self.setPopupMode(QToolButton.InstantPopup)
self.setIcon(QIcon(style_path + "/Icons/account.png"))
self.setIcon(icon("mdi.account-circle", color="white", scale_factor=1.25))
self.setToolTip("Account")
self.setIconSize(QSize(25, 25))
self.setMenu(QMenu())

View file

@ -1,11 +1,12 @@
import os
from PyQt5.QtCore import Qt
from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QPushButton, QVBoxLayout, QLabel, QHBoxLayout, QTabWidget
from PyQt5.QtWidgets import QWidget, QPushButton, QVBoxLayout, QLabel, QHBoxLayout, QTabWidget, QMessageBox
from legendary.core import LegendaryCore
from legendary.models.game import InstalledGame, Game
from Rare.utils import LegendaryApi
from Rare.utils.QtExtensions import SideTabBar
from Rare.utils.utils import IMAGE_DIR
@ -25,7 +26,7 @@ class InfoTabs(QTabWidget):
class GameInfo(QWidget):
igame: InstalledGame
game: Game
update_list = pyqtSignal()
def __init__(self, core: LegendaryCore):
super(GameInfo, self).__init__()
self.core = core
@ -63,10 +64,21 @@ class GameInfo(QWidget):
top_layout.addLayout(right_layout)
top_layout.addStretch()
self.game_actions = GameActions()
self.game_actions.uninstall_button.clicked.connect(self.uninstall)
self.layout.addLayout(top_layout)
self.layout.addWidget(self.game_actions)
self.layout.addStretch()
self.setLayout(self.layout)
def uninstall(self):
if QMessageBox.question(self, "Uninstall", self.tr("Are you sure to uninstall " + self.game.app_title), QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
LegendaryApi.uninstall(self.game.app_name, self.core)
self.update_list.emit()
self.back_button.click()
def update_game(self, app_name):
self.game = self.core.get_game(app_name)
self.igame = self.core.get_installed_game(app_name)
@ -86,10 +98,24 @@ class GameInfo(QWidget):
w = 200
pixmap = pixmap.scaled(w, int(w * 4 / 3))
self.image.setPixmap(pixmap)
self.app_name.setText("App name: "+ self.game.app_name)
self.app_name.setText("App name: " + self.game.app_name)
self.version.setText("Version: " + self.game.app_version)
self.dev.setText(self.tr("Developer: ") + self.game.metadata["developer"])
self.install_size.setText(self.tr("Install size: ") + str(round(self.igame.install_size/(1024**3), 2))+ " GB")
self.install_size.setText(
self.tr("Install size: ") + str(round(self.igame.install_size / (1024 ** 3), 2)) + " GB")
self.install_path.setText(self.tr("Install path: ") + self.igame.install_path)
print(self.game.__dict__)
print(self.igame.__dict__)
class GameActions(QWidget):
def __init__(self):
super(GameActions, self).__init__()
self.layout = QVBoxLayout()
self.game_actions = QLabel("<h3>Game actions</h3>")
self.layout.addWidget(self.game_actions)
uninstall_layout = QHBoxLayout()
self.uninstall_game = QLabel(self.tr("Uninstall game"))
uninstall_layout.addWidget(self.uninstall_game)
self.uninstall_button = QPushButton("Uninstall")
uninstall_layout.addWidget(self.uninstall_button)
self.layout.addLayout(uninstall_layout)
self.setLayout(self.layout)

View file

@ -6,13 +6,15 @@ from Rare.Components.Tabs.Games.GameWidgetInstalled import GameWidgetInstalled
from Rare.Components.Tabs.Games.GameWidgetListUninstalled import UninstalledGameWidget
from Rare.Components.Tabs.Games.GameWidgetUninstalled import GameWidgetUninstalled
from Rare.Components.Tabs.Games.InstalledListWidget import GameWidget
from Rare.utils.Models import InstallOptions
from Rare.utils.QtExtensions import FlowLayout
class GameList(QScrollArea):
install_game = pyqtSignal(dict)
install_game = pyqtSignal(InstallOptions)
show_game_info = pyqtSignal(str)
update_game = pyqtSignal()
def __init__(self, core: LegendaryCore):
super(GameList, self).__init__()
self.core = core
@ -49,8 +51,6 @@ class GameList(QScrollArea):
self.layout.addWidget(widget)
widget.update_list.connect(self.update_list)
uninstalled_games = []
installed = [i.app_name for i in self.core.get_installed_list()]
# get Uninstalled games

View file

@ -1,13 +1,13 @@
import os
from logging import getLogger
from PyQt5.QtCore import QEvent, pyqtSignal, QSettings
from PyQt5.QtGui import QPixmap, QIcon
from PyQt5.QtCore import QEvent, pyqtSignal, QSettings, QSize
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import *
from legendary.core import LegendaryCore
from legendary.models.game import InstalledGame
from qtawesome import icon
from Rare import style_path
from Rare.utils import LegendaryApi
from Rare.utils.QtExtensions import ClickableLabel
@ -59,14 +59,22 @@ class GameWidgetInstalled(QWidget):
minilayout = QHBoxLayout()
self.title_label.setObjectName("game_widget")
minilayout.addWidget(self.title_label)
# minilayout.addStretch(1)
# Info Button
self.menu_btn = QPushButton()
self.menu_btn.setIcon(QIcon(style_path + "/Icons/menu.png"))
self.menu_btn.setObjectName("installed_menu_button")
self.menu = Menu()
self.menu.action.connect(self.menu_action)
self.menu_btn.setMenu(self.menu)
self.menu_btn.setObjectName("menu")
self.menu_btn.setIcon(icon("ei.info-circle", color="white"))
# self.menu_btn.setObjectName("installed_menu_button")
self.menu_btn.setIconSize(QSize(18, 18))
self.menu_btn.enterEvent = lambda x: self.info_label.setText("Information")
self.menu_btn.leaveEvent = lambda x: self.info_label.setText(
"Please update Game") if self.update_available else self.info_label.setText("Start Game")
# remove Border
self.menu_btn.setStyleSheet("""
QPushButton{
border: none;
}
""")
self.menu_btn.clicked.connect(lambda: self.show_info.emit(self.game.app_name))
self.menu_btn.setFixedWidth(17)
minilayout.addWidget(self.menu_btn)
minilayout.addStretch(1)
@ -81,7 +89,7 @@ class GameWidgetInstalled(QWidget):
def enterEvent(self, a0: QEvent) -> None:
if self.update_available:
self.info_label.setText("Please update Game")
self.info_label.setText(self.tr("Please update Game"))
elif not self.running:
self.info_label.setText("Start Game")
@ -107,22 +115,3 @@ class GameWidgetInstalled(QWidget):
def finished(self):
self.info_label.setText("")
self.running = False
def menu_action(self, action: str):
if action == "uninstall":
if QMessageBox.question(self, "Uninstall", self.tr("Do you want to uninstall") + self.game.title,
QMessageBox.Yes | QMessageBox.No) == QMessageBox.Yes:
logger.info("Uninstalling " + self.game.title)
self.core.uninstall_game(self.game)
self.update_list.emit()
elif action == "info":
self.show_info.emit(self.game.app_name)
class Menu(QMenu):
action = pyqtSignal(str)
def __init__(self):
super(Menu, self).__init__()
self.addAction(self.tr("Game info"), lambda: self.action.emit("info"))
self.addAction(self.tr("Uninstall"), lambda: self.action.emit("uninstall"))

View file

@ -8,6 +8,7 @@ from legendary.core import LegendaryCore
from legendary.models.game import Game
from Rare.Components.Dialogs.InstallDialog import InstallDialog
from Rare.utils.Models import InstallOptions
from Rare.utils.QtExtensions import ClickableLabel
from Rare.utils.utils import download_image
@ -15,7 +16,7 @@ logger = getLogger("Uninstalled")
class GameWidgetUninstalled(QWidget):
install_game = pyqtSignal(dict)
install_game = pyqtSignal(InstallOptions)
def __init__(self, core: LegendaryCore, game: Game):
super(GameWidgetUninstalled, self).__init__()
@ -68,11 +69,5 @@ class GameWidgetUninstalled(QWidget):
infos = InstallDialog().get_information()
if infos != 0:
path, max_workers = infos
self.install_game.emit({
"app_name": self.game.app_name,
"options": {
"path": path,
"max_workers": max_workers
}
})
self.install_game.emit(InstallOptions(app_name=self.game.app_name, max_workers=max_workers, path=path))
# wait for update of legendary to get progress

View file

@ -1,6 +1,7 @@
from PyQt5.QtCore import QSettings
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QCheckBox, QLineEdit, QLabel, QPushButton, QStyle, \
QStackedLayout
from qtawesome import icon
from Rare.Components.Tabs.Games.GameInfo.GameInfo import InfoTabs
from Rare.Components.Tabs.Games.GameList import GameList
@ -16,6 +17,8 @@ class GameTab(QWidget):
self.layout.addWidget(self.default_widget)
self.game_info = InfoTabs(core)
self.game_info.info.back_button.clicked.connect(lambda: self.layout.setCurrentIndex(0))
self.game_info.info.update_list.connect(
lambda: self.default_widget.game_list.update_list(not self.default_widget.head_bar.view.isChecked()))
self.layout.addWidget(self.game_info)
self.setLayout(self.layout)
@ -40,7 +43,7 @@ class Games(QWidget):
self.head_bar.installed_only.stateChanged.connect(lambda:
self.game_list.installed_only(
self.head_bar.installed_only.isChecked()))
self.head_bar.refresh_list.clicked.connect(lambda: self.game_list.update_list())
self.head_bar.refresh_list.clicked.connect(lambda: self.game_list.update_list(not self.head_bar.view.isChecked()))
self.layout.addWidget(self.head_bar)
self.layout.addWidget(self.game_list)
# self.layout.addStretch(1)
@ -76,7 +79,7 @@ class GameListHeadBar(QWidget):
self.layout.addWidget(self.list_view)
self.refresh_list = QPushButton()
self.refresh_list.setIcon(self.style().standardIcon(getattr(QStyle, "SP_BrowserReload"))) # Reload icon
self.refresh_list.setIcon(icon("fa.refresh", color="white")) # Reload icon
self.layout.addWidget(self.refresh_list)
self.setLayout(self.layout)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

View file

@ -1,7 +1,10 @@
import os
from logging import getLogger
from PyQt5.QtCore import QProcess, QProcessEnvironment
logger = getLogger("Legendary Utils")
def launch_game(core, app_name: str, offline: bool = False, skip_version_check: bool = False):
game = core.get_installed_game(app_name)
@ -36,3 +39,21 @@ def launch_game(core, app_name: str, offline: bool = False, skip_version_check:
process.setProcessEnvironment(environment)
process.start(params[0], params[1:])
return process
def uninstall(app_name: str, core):
igame = core.get_installed_game(app_name)
try:
# Remove DLC first so directory is empty when game uninstall runs
dlcs = core.get_dlc_for_game(app_name)
for dlc in dlcs:
if (idlc := core.get_installed_game(dlc.app_name)) is not None:
logger.info(f'Uninstalling DLC "{dlc.app_name}"...')
core.uninstall_game(idlc, delete_files=True)
logger.info(f'Removing "{igame.title}" from "{igame.install_path}"...')
core.uninstall_game(igame, delete_files=True, delete_root_directory=True)
logger.info('Game has been uninstalled.')
except Exception as e:
logger.warning(f'Removing game failed: {e!r}, please remove {igame.install_path} manually.')

View file

@ -229,10 +229,10 @@ class SwitchPrivate(QObject):
button = self.mPointer.palette().color(QPalette.Button)
painter.setPen(Qt.NoPen)
self.mGradient.setColorAt(0, shadow.darker(130))
self.mGradient.setColorAt(1, light.darker(130))
self.mGradient.setStart(0, r.height())
self.mGradient.setFinalStop(0, 0)
#self.mGradient.setColorAt(0, shadow.darker(130))
#self.mGradient.setColorAt(1, light.darker(130))
#self.mGradient.setStart(0, r.height())
#self.mGradient.setFinalStop(0, 0)
painter.setBrush(self.mGradient)
painter.drawRoundedRect(r, r.height()/2, r.height()/2)

View file

@ -2,3 +2,4 @@ legendary-gl
requests
Pillow
PyQt5
QtAwesome