import logging from PyQt5 import QtGui from PyQt5.QtCore import pyqtSignal from PyQt5.QtGui import QFont from PyQt5.QtNetwork import QNetworkAccessManager from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QHBoxLayout from rare.components.tabs.store.shop_models import ImageUrlModel from rare.ui.components.tabs.store.wishlist_widget import Ui_WishlistWidget from rare.utils.extra_widgets import ImageLabel from rare.utils.misc import qta_icon as icon logger = logging.getLogger("GameWidgets") class GameWidget(QWidget): show_info = pyqtSignal(dict) def __init__(self, path, json_info=None, width=300): super(GameWidget, self).__init__() self.manager = QNetworkAccessManager() self.width = width self.path = path if json_info: self.init_ui(json_info) def init_ui(self, json_info): self.layout = QVBoxLayout() self.image = ImageLabel() self.layout.addWidget(self.image) mini_layout = QHBoxLayout() self.layout.addLayout(mini_layout) if not json_info: self.layout.addWidget(QLabel("An error occurred")) self.setLayout(self.layout) return self.title_label = QLabel(json_info.get("title")) self.title_label.setWordWrap(True) mini_layout.addWidget(self.title_label) mini_layout.addStretch(1) price = json_info["price"]["totalPrice"]["fmtPrice"]["originalPrice"] discount_price = json_info["price"]["totalPrice"]["fmtPrice"]["discountPrice"] price_label = QLabel(price) if price != discount_price: font = QFont() font.setStrikeOut(True) price_label.setFont(font) 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'<>?":|\/*': json_info["title"] = json_info["title"].replace(c, "") self.json_info = json_info self.slug = json_info["productSlug"] self.title = json_info["title"] for img in json_info["keyImages"]: if img["type"] in [ "DieselStoreFrontWide", "OfferImageWide", "VaultClosed", "ProductLogo", ]: if img["type"] == "VaultClosed" and self.title != "Mystery Game": continue self.image.update_image( img["url"], json_info["title"], (self.width, int(self.width * 9 / 16)), ) break else: logger.info(", ".join([img["type"] for img in json_info["keyImages"]])) 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) class WishlistWidget(QWidget, Ui_WishlistWidget): open_game = pyqtSignal(dict) delete_from_wishlist = pyqtSignal(dict) def __init__(self, game: dict): super(WishlistWidget, self).__init__() self.setupUi(self) self.game = game self.title_label.setText(game.get("title")) for attr in game["customAttributes"]: if attr["key"] == "developerName": self.developer.setText(attr["value"]) break else: self.developer.setText(game["seller"]["name"]) original_price = game["price"]["totalPrice"]["fmtPrice"]["originalPrice"] discount_price = game["price"]["totalPrice"]["fmtPrice"]["discountPrice"] self.price.setText(original_price if original_price != "0" else self.tr("Free")) # if discount if original_price != discount_price: self.discount = True font = QFont() font.setStrikeOut(True) self.price.setFont(font) self.discount_price.setText(discount_price) else: self.discount = False self.discount_price.setVisible(False) self.image = ImageLabel() self.layout().insertWidget(0, self.image) image_model = ImageUrlModel.from_json(game["keyImages"]) url = image_model.front_wide if not url: url = image_model.offer_image_wide self.image.update_image(url, game.get("title"), (240, 135)) self.delete_button.setIcon(icon("mdi.delete", color="white")) self.delete_button.clicked.connect( lambda: self.delete_from_wishlist.emit(self.game) ) def mousePressEvent(self, e: QtGui.QMouseEvent) -> None: # left button if e.button() == 1: self.open_game.emit(self.game) # right elif e.button() == 2: pass # self.showMenu(e)