1
0
Fork 0
mirror of synced 2024-06-26 18:20:50 +12:00

Many fixes:

- store: updated epic api + many other fixes
- installing widget has now no border
- disable startmenu and desktop link on unsupported os
This commit is contained in:
Dummerle 2021-11-21 22:44:45 +01:00
parent 6700974a36
commit 4c9ef8acd8
No known key found for this signature in database
GPG key ID: AB68CC59CA39F2F1
11 changed files with 91 additions and 67 deletions

View file

@ -1,7 +1,7 @@
import os import os
from logging import getLogger from logging import getLogger
from PyQt5.QtCore import Qt, QSettings, QTimer, QSize, QRect from PyQt5.QtCore import Qt, QSettings, QTimer, QSize
from PyQt5.QtGui import QCloseEvent, QCursor from PyQt5.QtGui import QCloseEvent, QCursor
from PyQt5.QtWidgets import QMainWindow, QMessageBox, QApplication from PyQt5.QtWidgets import QMainWindow, QMessageBox, QApplication
@ -51,7 +51,7 @@ class MainWindow(QMainWindow):
if not shared.args.offline: if not shared.args.offline:
self.rpc = DiscordRPC() self.rpc = DiscordRPC()
self.tab_widget.delete_presence.connect(self.rpc.set_discord_rpc)
if shared.args.subparser == "launch": if shared.args.subparser == "launch":
if shared.args.app_name in [i.app_name for i in self.tab_widget.games_tab.installed]: if shared.args.app_name in [i.app_name for i in self.tab_widget.games_tab.installed]:
logger.info("Launching " + self.core.get_installed_game(shared.args.app_name).title) logger.info("Launching " + self.core.get_installed_game(shared.args.app_name).title)

View file

@ -1,4 +1,4 @@
from PyQt5.QtCore import QSize, pyqtSignal from PyQt5.QtCore import QSize
from PyQt5.QtWidgets import QMenu, QTabWidget, QWidget, QWidgetAction, QShortcut from PyQt5.QtWidgets import QMenu, QTabWidget, QWidget, QWidgetAction, QShortcut
from qtawesome import icon from qtawesome import icon
@ -13,8 +13,6 @@ from rare.components.tabs.tab_utils import MainTabBar, TabButtonWidget
class TabWidget(QTabWidget): class TabWidget(QTabWidget):
delete_presence = pyqtSignal()
def __init__(self, parent): def __init__(self, parent):
super(TabWidget, self).__init__(parent=parent) super(TabWidget, self).__init__(parent=parent)
disabled_tab = 3 if not shared.args.offline else 1 disabled_tab = 3 if not shared.args.offline else 1

View file

@ -88,13 +88,14 @@ class BaseInstalledWidget(QGroupBox):
start_menu_file = os.path.expandvars("%appdata%/Microsoft/Windows/Start Menu") start_menu_file = os.path.expandvars("%appdata%/Microsoft/Windows/Start Menu")
else: else:
start_menu_file = "" start_menu_file = ""
if os.path.exists(start_menu_file): if platform.system() in ["Windows", "Linux"]:
self.create_start_menu = QAction(self.tr("Remove start menu link")) if os.path.exists(start_menu_file):
else: self.create_start_menu = QAction(self.tr("Remove start menu link"))
self.create_start_menu = QAction(self.tr("Create start menu link")) else:
if not self.is_origin: self.create_start_menu = QAction(self.tr("Create start menu link"))
self.create_start_menu.triggered.connect(lambda: self.create_desktop_link("start_menu")) if not self.is_origin:
self.addAction(self.create_start_menu) self.create_start_menu.triggered.connect(lambda: self.create_desktop_link("start_menu"))
self.addAction(self.create_start_menu)
reload_image = QAction(self.tr("Reload Image"), self) reload_image = QAction(self.tr("Reload Image"), self)
reload_image.triggered.connect(self.reload_image) reload_image.triggered.connect(self.reload_image)

View file

@ -1,22 +1,23 @@
from PyQt5.QtCore import Qt, QRect from PyQt5.QtCore import Qt, QRect
from PyQt5.QtGui import QPaintEvent, QPainter, QPixmap, QPen, QFont, QColor from PyQt5.QtGui import QPaintEvent, QPainter, QPixmap, QPen, QFont, QColor
from PyQt5.QtWidgets import QGroupBox, QVBoxLayout, QLabel, QHBoxLayout, QWidget from PyQt5.QtWidgets import QVBoxLayout, QLabel, QHBoxLayout, QWidget
from legendary.models.game import Game from legendary.models.game import Game
from rare.utils.utils import get_pixmap, get_uninstalled_pixmap, optimal_text_background, text_color_for_background from rare.utils.utils import get_pixmap, get_uninstalled_pixmap, optimal_text_background, text_color_for_background
class InstallingGameWidget(QGroupBox): class InstallingGameWidget(QWidget):
def __init__(self): def __init__(self):
super(InstallingGameWidget, self).__init__() super(InstallingGameWidget, self).__init__()
self.setObjectName("game_widget_icon") self.setObjectName("game_widget_icon")
self.setProperty("noBorder", 1)
self.setLayout(QVBoxLayout()) self.setLayout(QVBoxLayout())
self.pixmap = QPixmap() self.pixmap = QPixmap()
w = 200 w = 200
# self.pixmap = self.pixmap.scaled(w, int(w * 4 / 3), transformMode=Qt.SmoothTransformation) # self.pixmap = self.pixmap.scaled(w, int(w * 4 / 3), transformMode=Qt.SmoothTransformation)
self.image_widget = PaintWidget() self.image_widget = PaintWidget()
self.setContentsMargins(4, 4, 4, 4)
self.image_widget.setFixedSize(w, int(w * 4 / 3)) self.image_widget.setFixedSize(w, int(w * 4 / 3))
self.layout().addWidget(self.image_widget) self.layout().addWidget(self.image_widget)

View file

@ -11,7 +11,7 @@ from rare import cache_dir, shared
from rare.components.tabs.settings.rpc import RPCSettings from rare.components.tabs.settings.rpc import RPCSettings
from rare.ui.components.tabs.settings.rare import Ui_RareSettings from rare.ui.components.tabs.settings.rare import Ui_RareSettings
from rare.utils import utils from rare.utils import utils
from rare.utils.utils import get_translations, get_color_schemes, set_color_pallete, get_style_sheets, set_style_sheet from rare.utils.utils import get_translations, get_color_schemes, set_color_pallete, get_style_sheets, set_style_sheet
logger = getLogger("RareSettings") logger = getLogger("RareSettings")
@ -109,13 +109,20 @@ class RareSettings(QWidget, Ui_RareSettings):
self.desktop_file = "" self.desktop_file = ""
self.start_menu_link = "" self.start_menu_link = ""
if os.path.exists(self.desktop_file): if self.desktop_file:
self.desktop_link.setText(self.tr("Remove desktop link")) if os.path.exists(self.desktop_file):
if os.path.exists(self.start_menu_link): self.desktop_link_btn.setText(self.tr("Remove desktop link"))
self.startmenu_link.setText(self.tr("Remove start menu link")) else:
self.desktop_link.setDisabled(True)
self.desktop_link.clicked.connect(self.create_desktop_link) if self.start_menu_link:
self.startmenu_link.clicked.connect(self.create_start_menu_link) if os.path.exists(self.start_menu_link):
self.startmenu_link_btn.setText(self.tr("Remove start menu link"))
else:
self.startmenu_link_btn.setDisabled(True)
self.desktop_link_btn.clicked.connect(self.create_desktop_link)
self.startmenu_link_btn.clicked.connect(self.create_start_menu_link)
self.log_dir_open_button.clicked.connect(self.open_dir) self.log_dir_open_button.clicked.connect(self.open_dir)
self.log_dir_clean_button.clicked.connect(self.clean_logdir) self.log_dir_clean_button.clicked.connect(self.clean_logdir)
@ -139,10 +146,10 @@ class RareSettings(QWidget, Ui_RareSettings):
try: try:
if not os.path.exists(self.start_menu_link): if not os.path.exists(self.start_menu_link):
utils.create_rare_desktop_link("start_menu") utils.create_rare_desktop_link("start_menu")
self.startmenu_link.setText(self.tr("Remove start menu link")) self.startmenu_link_btn.setText(self.tr("Remove start menu link"))
else: else:
os.remove(self.start_menu_link) os.remove(self.start_menu_link)
self.startmenu_link.setText(self.tr("Create start menu link")) self.startmenu_link_btn.setText(self.tr("Create start menu link"))
except PermissionError as e: except PermissionError as e:
logger.error(str(e)) logger.error(str(e))
QMessageBox.warning(self, "Error", "Permission error, cannot remove " + str(self.start_menu_link)) QMessageBox.warning(self, "Error", "Permission error, cannot remove " + str(self.start_menu_link))
@ -151,10 +158,10 @@ class RareSettings(QWidget, Ui_RareSettings):
try: try:
if not os.path.exists(self.desktop_file): if not os.path.exists(self.desktop_file):
utils.create_rare_desktop_link("desktop") utils.create_rare_desktop_link("desktop")
self.desktop_link.setText(self.tr("Remove Desktop link")) self.desktop_link_btn.setText(self.tr("Remove Desktop link"))
else: else:
os.remove(self.desktop_file) os.remove(self.desktop_file)
self.desktop_link.setText(self.tr("Create desktop link")) self.desktop_link_btn.setText(self.tr("Create desktop link"))
except PermissionError as e: except PermissionError as e:
logger.warning(self, "Error", "Permission error, cannot remove " + str(self.desktop_file)) logger.warning(self, "Error", "Permission error, cannot remove " + str(self.desktop_file))

View file

@ -52,6 +52,8 @@ class GameWidget(QWidget):
mini_layout.addWidget(QLabel(discount_price if discount_price != "0" else self.tr("Free"))) mini_layout.addWidget(QLabel(discount_price if discount_price != "0" else self.tr("Free")))
mini_layout.addWidget(price_label) mini_layout.addWidget(price_label)
else: else:
if price == "0":
price_label.setText(self.tr("Free"))
mini_layout.addWidget(price_label) mini_layout.addWidget(price_label)
for c in r'<>?":|\/*': for c in r'<>?":|\/*':
@ -72,6 +74,8 @@ class GameWidget(QWidget):
self.setLayout(self.layout) self.setLayout(self.layout)
self.setFixedSize(self.width + 10, self.width * 9 // 16 + 50)
def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None: def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None:
self.show_info.emit(self.json_info) self.show_info.emit(self.json_info)

View file

@ -1,8 +1,9 @@
import urllib.parse
from logging import getLogger from logging import getLogger
from PyQt5.QtCore import pyqtSignal, QObject from PyQt5.QtCore import pyqtSignal, QObject
from rare.components.tabs.shop.constants import wishlist_query, search_query, game_query, add_to_wishlist_query, \ from rare.components.tabs.shop.constants import wishlist_query, search_query, add_to_wishlist_query, \
remove_from_wishlist_query remove_from_wishlist_query
from rare.components.tabs.shop.shop_models import BrowseModel from rare.components.tabs.shop.shop_models import BrowseModel
from rare.utils.qt_requests import QtRequestManager from rare.utils.qt_requests import QtRequestManager
@ -90,12 +91,16 @@ class ShopApiCore(QObject):
self.next_browse_request = (browse_model, handle_func) self.next_browse_request = (browse_model, handle_func)
return return
self.browse_active = True self.browse_active = True
payload = { url = "https://www.epicgames.com/graphql?operationName=searchStoreQuery&variables="
"variables": browse_model.__dict__, args = urllib.parse.quote_plus(str(browse_model.__dict__))
"query": game_query
}
self.auth_manager.post(graphql_url, payload, lambda data: self._handle_browse_games(data, handle_func)) for old, new in [("%27", "%22"), ("+", ""), ("%3A", ":"), ("%2C", ","), ("%5B", "["), ("%5D", "]"),
("True", "true")]:
args = args.replace(old, new)
url = url + args + "&extensions=%7B%22persistedQuery%22:%7B%22version%22:1,%22sha256Hash%22:%220304d711e653a2914f3213a6d9163cc17153c60aef0ef52279731b02779231d2%22%7D%7D"
self.auth_manager.get(url, lambda data: self._handle_browse_games(data, handle_func))
def _handle_browse_games(self, data, handle_func): def _handle_browse_games(self, data, handle_func):
self.browse_active = False self.browse_active = False

View file

@ -1,5 +1,4 @@
import datetime import datetime
import random
from dataclasses import dataclass from dataclasses import dataclass
@ -117,31 +116,37 @@ class BrowseModel:
tag: str = "" tag: str = ""
withMapping: bool = True withMapping: bool = True
withPrice: bool = True withPrice: bool = True
date: str = f"[,{datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%dT%X')}.{str(random.randint(0, 999)).zfill(3)}Z]" date: str = f"[,{datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%dT%X')}.999Z]"
price: str = "" price: str = ""
onSale: bool = False onSale: bool = False
@property @property
def __dict__(self): def __dict__(self):
payload = {"category": self.category, payload = {
"count": self.count, "allowCountries": self.country_code,
"country": self.country_code, "category": self.category,
"keywords": self.keywords, "count": self.count,
"locale": self.language_code + "-" + self.country_code, "country": self.country_code,
"sortDir": self.sortDir, "keywords": self.keywords,
"allowCountries": self.country_code, "locale": self.language_code,
"start": self.start, "priceRange": self.price,
"tag": self.tag, "releaseDate": self.date,
"withMapping": self.withMapping, "sortBy": "releaseDate",
"withPrice": self.withPrice, "sortDir": self.sortDir,
"releaseDate": self.date, "start": self.start,
"effectiveDate": self.date, "tag": self.tag,
} "withPrice": self.withPrice,
}
if self.price == "free": if self.price == "free":
payload["freeGame"] = True payload["freeGame"] = True
payload.pop("priceRange")
elif self.price.startswith("<price>"): elif self.price.startswith("<price>"):
payload["priceRange"] = self.price.replace("<price>", "") payload["priceRange"] = self.price.replace("<price>", "")
if self.onSale: if self.onSale:
payload["onSale"] = True payload["onSale"] = True
if self.price:
payload["effectiveDate"] = self.date
else:
payload.pop("priceRange")
return payload return payload

View file

@ -6,12 +6,12 @@ from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QGroupBox, QScrollArea, QCheckBox, QVBoxLayout, QLabel, QPushButton, QHBoxLayout from PyQt5.QtWidgets import QGroupBox, QScrollArea, QCheckBox, QVBoxLayout, QLabel, QPushButton, QHBoxLayout
from legendary.core import LegendaryCore from legendary.core import LegendaryCore
from rare.components.tabs.shop import ShopApiCore
from rare.components.tabs.shop.constants import Constants
from rare.components.tabs.shop.game_widgets import GameWidget
from rare.components.tabs.shop.shop_models import BrowseModel
from rare.ui.components.tabs.store.store import Ui_ShopWidget from rare.ui.components.tabs.store.store import Ui_ShopWidget
from rare.utils.extra_widgets import WaitingSpinner, FlowLayout, ButtonLineEdit from rare.utils.extra_widgets import WaitingSpinner, FlowLayout, ButtonLineEdit
from . import ShopApiCore
from .constants import Constants
from .game_widgets import GameWidget
from .shop_models import BrowseModel
logger = logging.getLogger("Shop") logger = logging.getLogger("Shop")
@ -221,6 +221,8 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
self.update_games_allowed = True self.update_games_allowed = True
self.prepare_request("") self.prepare_request("")
self.on_discount.setChecked(False)
def prepare_request(self, price: str = None, added_tag: int = 0, removed_tag: int = 0, def prepare_request(self, price: str = None, added_tag: int = 0, removed_tag: int = 0,
added_type: str = "", removed_type: str = ""): added_type: str = "", removed_type: str = ""):
if not self.update_games_allowed: if not self.update_games_allowed:
@ -258,9 +260,8 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
self.api_core.browse_games(browse_model, self.show_games) self.api_core.browse_games(browse_model, self.show_games)
def show_games(self, data): def show_games(self, data):
for child in self.game_widget.layout().children(): for item in (self.game_widget.layout().itemAt(i) for i in range(self.game_widget.layout().count())):
child.deleteLater() item.widget().deleteLater()
del child
if data: if data:
for game in data: for game in data:
@ -276,6 +277,8 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
self.game_widget.setLayout(layout) self.game_widget.setLayout(layout)
self.game_stack.setCurrentIndex(0) self.game_stack.setCurrentIndex(0)
self.game_widget.layout().update()
class CheckBox(QCheckBox): class CheckBox(QCheckBox):
activated = pyqtSignal(str) activated = pyqtSignal(str)

View file

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'rare/ui/components/tabs/settings/rare.ui' # Form implementation generated from reading ui file 'rare/ui/components/tabs/settings/rare.ui'
# #
# Created by: PyQt5 UI code generator 5.15.4 # Created by: PyQt5 UI code generator 5.15.6
# #
# WARNING: Any manual changes made to this file will be lost when pyuic5 is # 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. # run again. Do not edit this file unless you know what you are doing.
@ -134,12 +134,12 @@ class Ui_RareSettings(object):
self.groupBox.setObjectName("groupBox") self.groupBox.setObjectName("groupBox")
self.shortcuts_layout = QtWidgets.QVBoxLayout(self.groupBox) self.shortcuts_layout = QtWidgets.QVBoxLayout(self.groupBox)
self.shortcuts_layout.setObjectName("shortcuts_layout") self.shortcuts_layout.setObjectName("shortcuts_layout")
self.desktop_link = QtWidgets.QPushButton(self.groupBox) self.desktop_link_btn = QtWidgets.QPushButton(self.groupBox)
self.desktop_link.setObjectName("desktop_link") self.desktop_link_btn.setObjectName("desktop_link_btn")
self.shortcuts_layout.addWidget(self.desktop_link) self.shortcuts_layout.addWidget(self.desktop_link_btn)
self.startmenu_link = QtWidgets.QPushButton(self.groupBox) self.startmenu_link_btn = QtWidgets.QPushButton(self.groupBox)
self.startmenu_link.setObjectName("startmenu_link") self.startmenu_link_btn.setObjectName("startmenu_link_btn")
self.shortcuts_layout.addWidget(self.startmenu_link) self.shortcuts_layout.addWidget(self.startmenu_link_btn)
self.right_layout.addWidget(self.groupBox) self.right_layout.addWidget(self.groupBox)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.right_layout.addItem(spacerItem2) self.right_layout.addItem(spacerItem2)
@ -169,8 +169,8 @@ class Ui_RareSettings(object):
self.log_dir_open_button.setText(_translate("RareSettings", "Open Log directory")) self.log_dir_open_button.setText(_translate("RareSettings", "Open Log directory"))
self.log_dir_clean_button.setText(_translate("RareSettings", "Clean Log directory")) self.log_dir_clean_button.setText(_translate("RareSettings", "Clean Log directory"))
self.groupBox.setTitle(_translate("RareSettings", "Shortcuts")) self.groupBox.setTitle(_translate("RareSettings", "Shortcuts"))
self.desktop_link.setText(_translate("RareSettings", "Create Desktop link")) self.desktop_link_btn.setText(_translate("RareSettings", "Create Desktop link"))
self.startmenu_link.setText(_translate("RareSettings", "Create start menu link")) self.startmenu_link_btn.setText(_translate("RareSettings", "Create start menu link"))
if __name__ == "__main__": if __name__ == "__main__":

View file

@ -247,14 +247,14 @@
</property> </property>
<layout class="QVBoxLayout" name="shortcuts_layout"> <layout class="QVBoxLayout" name="shortcuts_layout">
<item> <item>
<widget class="QPushButton" name="desktop_link"> <widget class="QPushButton" name="desktop_link_btn">
<property name="text"> <property name="text">
<string>Create Desktop link</string> <string>Create Desktop link</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="startmenu_link"> <widget class="QPushButton" name="startmenu_link_btn">
<property name="text"> <property name="text">
<string>Create start menu link</string> <string>Create start menu link</string>
</property> </property>