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:
parent
6700974a36
commit
4c9ef8acd8
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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__":
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue