1
0
Fork 0
mirror of synced 2024-06-17 18:14:44 +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
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.QtWidgets import QMainWindow, QMessageBox, QApplication
@ -51,7 +51,7 @@ class MainWindow(QMainWindow):
if not shared.args.offline:
self.rpc = DiscordRPC()
self.tab_widget.delete_presence.connect(self.rpc.set_discord_rpc)
if shared.args.subparser == "launch":
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)

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 qtawesome import icon
@ -13,8 +13,6 @@ from rare.components.tabs.tab_utils import MainTabBar, TabButtonWidget
class TabWidget(QTabWidget):
delete_presence = pyqtSignal()
def __init__(self, parent):
super(TabWidget, self).__init__(parent=parent)
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")
else:
start_menu_file = ""
if os.path.exists(start_menu_file):
self.create_start_menu = QAction(self.tr("Remove start menu link"))
else:
self.create_start_menu = QAction(self.tr("Create start menu link"))
if not self.is_origin:
self.create_start_menu.triggered.connect(lambda: self.create_desktop_link("start_menu"))
self.addAction(self.create_start_menu)
if platform.system() in ["Windows", "Linux"]:
if os.path.exists(start_menu_file):
self.create_start_menu = QAction(self.tr("Remove start menu link"))
else:
self.create_start_menu = QAction(self.tr("Create start menu link"))
if not self.is_origin:
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.triggered.connect(self.reload_image)

View file

@ -1,22 +1,23 @@
from PyQt5.QtCore import Qt, QRect
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 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):
super(InstallingGameWidget, self).__init__()
self.setObjectName("game_widget_icon")
self.setProperty("noBorder", 1)
self.setLayout(QVBoxLayout())
self.pixmap = QPixmap()
w = 200
# self.pixmap = self.pixmap.scaled(w, int(w * 4 / 3), transformMode=Qt.SmoothTransformation)
self.image_widget = PaintWidget()
self.setContentsMargins(4, 4, 4, 4)
self.image_widget.setFixedSize(w, int(w * 4 / 3))
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.ui.components.tabs.settings.rare import Ui_RareSettings
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")
@ -109,13 +109,20 @@ class RareSettings(QWidget, Ui_RareSettings):
self.desktop_file = ""
self.start_menu_link = ""
if os.path.exists(self.desktop_file):
self.desktop_link.setText(self.tr("Remove desktop link"))
if os.path.exists(self.start_menu_link):
self.startmenu_link.setText(self.tr("Remove start menu link"))
if self.desktop_file:
if os.path.exists(self.desktop_file):
self.desktop_link_btn.setText(self.tr("Remove desktop link"))
else:
self.desktop_link.setDisabled(True)
self.desktop_link.clicked.connect(self.create_desktop_link)
self.startmenu_link.clicked.connect(self.create_start_menu_link)
if self.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_clean_button.clicked.connect(self.clean_logdir)
@ -139,10 +146,10 @@ class RareSettings(QWidget, Ui_RareSettings):
try:
if not os.path.exists(self.start_menu_link):
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:
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:
logger.error(str(e))
QMessageBox.warning(self, "Error", "Permission error, cannot remove " + str(self.start_menu_link))
@ -151,10 +158,10 @@ class RareSettings(QWidget, Ui_RareSettings):
try:
if not os.path.exists(self.desktop_file):
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:
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:
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(price_label)
else:
if price == "0":
price_label.setText(self.tr("Free"))
mini_layout.addWidget(price_label)
for c in r'<>?":|\/*':
@ -72,6 +74,8 @@ class GameWidget(QWidget):
self.setLayout(self.layout)
self.setFixedSize(self.width + 10, self.width * 9 // 16 + 50)
def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None:
self.show_info.emit(self.json_info)

View file

@ -1,8 +1,9 @@
import urllib.parse
from logging import getLogger
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
from rare.components.tabs.shop.shop_models import BrowseModel
from rare.utils.qt_requests import QtRequestManager
@ -90,12 +91,16 @@ class ShopApiCore(QObject):
self.next_browse_request = (browse_model, handle_func)
return
self.browse_active = True
payload = {
"variables": browse_model.__dict__,
"query": game_query
}
url = "https://www.epicgames.com/graphql?operationName=searchStoreQuery&variables="
args = urllib.parse.quote_plus(str(browse_model.__dict__))
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):
self.browse_active = False

View file

@ -1,5 +1,4 @@
import datetime
import random
from dataclasses import dataclass
@ -117,31 +116,37 @@ class BrowseModel:
tag: str = ""
withMapping: 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 = ""
onSale: bool = False
@property
def __dict__(self):
payload = {"category": self.category,
"count": self.count,
"country": self.country_code,
"keywords": self.keywords,
"locale": self.language_code + "-" + self.country_code,
"sortDir": self.sortDir,
"allowCountries": self.country_code,
"start": self.start,
"tag": self.tag,
"withMapping": self.withMapping,
"withPrice": self.withPrice,
"releaseDate": self.date,
"effectiveDate": self.date,
}
payload = {
"allowCountries": self.country_code,
"category": self.category,
"count": self.count,
"country": self.country_code,
"keywords": self.keywords,
"locale": self.language_code,
"priceRange": self.price,
"releaseDate": self.date,
"sortBy": "releaseDate",
"sortDir": self.sortDir,
"start": self.start,
"tag": self.tag,
"withPrice": self.withPrice,
}
if self.price == "free":
payload["freeGame"] = True
payload.pop("priceRange")
elif self.price.startswith("<price>"):
payload["priceRange"] = self.price.replace("<price>", "")
if self.onSale:
payload["onSale"] = True
if self.price:
payload["effectiveDate"] = self.date
else:
payload.pop("priceRange")
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 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.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")
@ -221,6 +221,8 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
self.update_games_allowed = True
self.prepare_request("")
self.on_discount.setChecked(False)
def prepare_request(self, price: str = None, added_tag: int = 0, removed_tag: int = 0,
added_type: str = "", removed_type: str = ""):
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)
def show_games(self, data):
for child in self.game_widget.layout().children():
child.deleteLater()
del child
for item in (self.game_widget.layout().itemAt(i) for i in range(self.game_widget.layout().count())):
item.widget().deleteLater()
if data:
for game in data:
@ -276,6 +277,8 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
self.game_widget.setLayout(layout)
self.game_stack.setCurrentIndex(0)
self.game_widget.layout().update()
class CheckBox(QCheckBox):
activated = pyqtSignal(str)

View file

@ -2,7 +2,7 @@
# 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
# 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.shortcuts_layout = QtWidgets.QVBoxLayout(self.groupBox)
self.shortcuts_layout.setObjectName("shortcuts_layout")
self.desktop_link = QtWidgets.QPushButton(self.groupBox)
self.desktop_link.setObjectName("desktop_link")
self.shortcuts_layout.addWidget(self.desktop_link)
self.startmenu_link = QtWidgets.QPushButton(self.groupBox)
self.startmenu_link.setObjectName("startmenu_link")
self.shortcuts_layout.addWidget(self.startmenu_link)
self.desktop_link_btn = QtWidgets.QPushButton(self.groupBox)
self.desktop_link_btn.setObjectName("desktop_link_btn")
self.shortcuts_layout.addWidget(self.desktop_link_btn)
self.startmenu_link_btn = QtWidgets.QPushButton(self.groupBox)
self.startmenu_link_btn.setObjectName("startmenu_link_btn")
self.shortcuts_layout.addWidget(self.startmenu_link_btn)
self.right_layout.addWidget(self.groupBox)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
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_clean_button.setText(_translate("RareSettings", "Clean Log directory"))
self.groupBox.setTitle(_translate("RareSettings", "Shortcuts"))
self.desktop_link.setText(_translate("RareSettings", "Create Desktop link"))
self.startmenu_link.setText(_translate("RareSettings", "Create start menu link"))
self.desktop_link_btn.setText(_translate("RareSettings", "Create Desktop link"))
self.startmenu_link_btn.setText(_translate("RareSettings", "Create start menu link"))
if __name__ == "__main__":

View file

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