import logging from PyQt5.QtCore import pyqtSignal, Qt from PyQt5.QtGui import QMouseEvent from PyQt5.QtWidgets import QPushButton from rare.components.tabs.store.api.debug import DebugDialog from rare.components.tabs.store.api.models.response import CatalogOfferModel from rare.models.image import ImageSize from rare.utils.misc import qta_icon from rare.utils.qt_requests import QtRequests from .image import LoadingImageWidget logger = logging.getLogger("StoreWidgets") class ItemWidget(LoadingImageWidget): show_details = pyqtSignal(CatalogOfferModel) def __init__(self, manager: QtRequests, catalog_game: CatalogOfferModel = None, parent=None): super(ItemWidget, self).__init__(manager, parent=parent) self.catalog_game = catalog_game def mousePressEvent(self, a0: QMouseEvent) -> None: if a0.button() == Qt.LeftButton: a0.accept() self.show_details.emit(self.catalog_game) if a0.button() == Qt.RightButton: a0.accept() print(self.catalog_game.__dict__) dialog = DebugDialog(self.catalog_game.__dict__, self) dialog.show() class StoreItemWidget(ItemWidget): def __init__(self, manager: QtRequests, catalog_game: CatalogOfferModel = None, parent=None): super(StoreItemWidget, self).__init__(manager, catalog_game, parent=parent) self.setFixedSize(ImageSize.DisplayWide) self.ui.setupUi(self) if catalog_game: self.init_ui(catalog_game) def init_ui(self, game: CatalogOfferModel): if not game: self.ui.title_label.setText(self.tr("An error occurred")) return self.ui.title_label.setText(game.title) for attr in game.customAttributes: if attr["key"] == "developerName": developer = attr["value"] break else: developer = game.seller["name"] self.ui.developer_label.setText(developer) price = game.price.totalPrice.fmtPrice["originalPrice"] discount_price = game.price.totalPrice.fmtPrice["discountPrice"] self.ui.price_label.setText(f'{price if price != "0" else self.tr("Free")}') if price != discount_price: font = self.ui.price_label.font() font.setStrikeOut(True) self.ui.price_label.setFont(font) self.ui.discount_label.setText(f'{discount_price if discount_price != "0" else self.tr("Free")}') else: self.ui.discount_label.setVisible(False) key_images = game.keyImages self.fetchPixmap(key_images.for_dimensions(self.width(), self.height()).url) # for img in json_info["keyImages"]: # if img["type"] in ["DieselStoreFrontWide", "OfferImageWide", "VaultClosed", "ProductLogo"]: # if img["type"] == "VaultClosed" and json_info["title"] != "Mystery Game": # continue # self.fetchPixmap(img["url"]) # break # else: # logger.info(", ".join([img["type"] for img in json_info["keyImages"]])) class ResultsItemWidget(ItemWidget): def __init__(self, manager: QtRequests, catalog_game: CatalogOfferModel, parent=None): super(ResultsItemWidget, self).__init__(manager, catalog_game, parent=parent) self.setFixedSize(ImageSize.Display) self.ui.setupUi(self) key_images = catalog_game.keyImages self.fetchPixmap(key_images.for_dimensions(self.width(), self.height()).url) self.ui.title_label.setText(catalog_game.title) price = catalog_game.price.totalPrice.fmtPrice["originalPrice"] discount_price = catalog_game.price.totalPrice.fmtPrice["discountPrice"] self.ui.price_label.setText(f'{price if price != "0" else self.tr("Free")}') if price != discount_price: font = self.ui.price_label.font() font.setStrikeOut(True) self.ui.price_label.setFont(font) self.ui.discount_label.setText(f'{discount_price if discount_price != "0" else self.tr("Free")}') else: self.ui.discount_label.setVisible(False) class WishlistItemWidget(ItemWidget): delete_from_wishlist = pyqtSignal(CatalogOfferModel) def __init__(self, manager: QtRequests, catalog_game: CatalogOfferModel, parent=None): super(WishlistItemWidget, self).__init__(manager, catalog_game, parent=parent) self.setFixedSize(ImageSize.DisplayWide) self.ui.setupUi(self) for attr in catalog_game.customAttributes: if attr["key"] == "developerName": developer = attr["value"] break else: developer = catalog_game.seller["name"] original_price = catalog_game.price.totalPrice.fmtPrice["originalPrice"] discount_price = catalog_game.price.totalPrice.fmtPrice["discountPrice"] self.ui.title_label.setText(catalog_game.title) self.ui.developer_label.setText(developer) self.ui.price_label.setText(f'{original_price if original_price != "0" else self.tr("Free")}') if original_price != discount_price: font = self.ui.price_label.font() font.setStrikeOut(True) self.ui.price_label.setFont(font) self.ui.discount_label.setText(f'{discount_price if discount_price != "0" else self.tr("Free")}') else: self.ui.discount_label.setVisible(False) key_images = catalog_game.keyImages self.fetchPixmap( key_images.for_dimensions(self.width(), self.height()).url ) self.delete_button = QPushButton(self) self.delete_button.setIcon(icon("mdi.delete", color="white")) self.delete_button.clicked.connect( lambda: self.delete_from_wishlist.emit(self.catalog_game) ) self.layout().insertWidget(0, self.delete_button, alignment=Qt.AlignRight)