1
0
Fork 0
mirror of synced 2024-05-18 19:42:54 +12:00
Rare/rare/components/tabs/store/widgets/items.py
2024-02-25 21:35:44 +02:00

142 lines
5.9 KiB
Python

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("GameWidgets")
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.custom_attributes:
if attr["key"] == "developerName":
developer = attr["value"]
break
else:
developer = game.seller["name"]
self.ui.developer_label.setText(developer)
price = game.price.total_price["fmtPrice"]["originalPrice"]
discount_price = game.price.total_price["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.key_images
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.key_images
self.fetchPixmap(key_images.for_dimensions(self.width(), self.height()).url)
self.ui.title_label.setText(catalog_game.title)
price = catalog_game.price.total_price["fmtPrice"]["originalPrice"]
discount_price = catalog_game.price.total_price["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):
show_details = pyqtSignal(CatalogOfferModel)
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.custom_attributes:
if attr["key"] == "developerName":
developer = attr["value"]
break
else:
developer = catalog_game.seller["name"]
original_price = catalog_game.price.total_price["fmtPrice"]["originalPrice"]
discount_price = catalog_game.price.total_price["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.key_images
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)