1
0
Fork 0
mirror of synced 2024-06-24 01:00:43 +12:00
Rare/rare/components/tabs/shop/game_info.py

146 lines
5.9 KiB
Python
Raw Normal View History

import logging
2021-06-04 09:23:55 +12:00
import webbrowser
2021-06-10 09:12:49 +12:00
from PyQt5.QtGui import QPixmap, QFont
from PyQt5.QtWidgets import QWidget, QLabel
2021-06-04 09:23:55 +12:00
from rare.components.tabs.shop.shop_models import ShopGame
2021-06-04 09:23:55 +12:00
from rare.ui.components.tabs.store.shop_game_info import Ui_shop_info
from rare.utils.extra_widgets import WaitingSpinner, ImageLabel
2021-08-23 08:22:17 +12:00
from rare.utils.utils import get_lang
logger = logging.getLogger("ShopInfo")
2021-06-04 09:23:55 +12:00
class ShopGameInfo(QWidget, Ui_shop_info):
game: ShopGame
data: dict
2021-06-04 09:23:55 +12:00
2021-06-10 09:12:49 +12:00
# TODO Design
2021-08-23 08:22:17 +12:00
def __init__(self, installed_titles: list, api_core):
2021-06-04 09:23:55 +12:00
super(ShopGameInfo, self).__init__()
self.setupUi(self)
2021-08-23 08:22:17 +12:00
self.api_core = api_core
2021-06-15 08:30:57 +12:00
self.installed = installed_titles
2021-06-05 04:16:27 +12:00
self.open_store_button.clicked.connect(self.button_clicked)
self.image = ImageLabel()
self.image_stack.addWidget(self.image)
2021-06-10 09:12:49 +12:00
self.image_stack.addWidget(WaitingSpinner())
2021-08-23 08:22:17 +12:00
self.locale = get_lang()
self.wishlist_button.clicked.connect(self.add_to_wishlist)
self.in_wishlist = False
self.wishlist = []
def handle_wishlist_update(self, data):
self.wishlist = [i["offer"]["title"] for i in data]
if self.title_str in self.wishlist:
self.in_wishlist = True
self.wishlist_button.setVisible(True)
self.wishlist_button.setText(self.tr("Remove from Wishlist"))
else:
self.in_wishlist = False
self.wishlist_button.setVisible(False)
2021-06-04 09:23:55 +12:00
def update_game(self, data: dict):
2021-06-10 09:12:49 +12:00
self.image_stack.setCurrentIndex(1)
2021-08-23 08:22:17 +12:00
self.title.setText(data["title"])
self.title_str = data["title"]
self.api_core.get_wishlist(self.handle_wishlist_update)
2021-06-10 09:12:49 +12:00
for i in reversed(range(self.req_group_box.layout().count())):
self.req_group_box.layout().itemAt(i).widget().setParent(None)
slug = data["productSlug"]
if "/home" in slug:
slug = slug.replace("/home", "")
self.slug = slug
2021-08-23 08:22:17 +12:00
2021-06-15 08:30:57 +12:00
if data["namespace"] in self.installed:
self.open_store_button.setText(self.tr("Show Game on Epic Page"))
self.owned_label.setVisible(True)
else:
self.open_store_button.setText(self.tr("Buy Game in Epic Games Store"))
self.owned_label.setVisible(False)
2021-06-05 04:16:27 +12:00
self.dev.setText(self.tr("Loading"))
2021-06-30 10:38:42 +12:00
self.price.setText(self.tr("Loading"))
2021-08-23 08:22:17 +12:00
# self.title.setText(self.tr("Loading"))
2021-06-05 04:16:27 +12:00
self.image.setPixmap(QPixmap())
self.data = data
2021-06-09 23:25:57 +12:00
is_bundle = False
for i in data["categories"]:
if "bundles" in i.get("path", ""):
is_bundle = True
# init API request
2021-08-23 08:22:17 +12:00
self.api_core.get_game(slug, is_bundle, self.data_received)
def add_to_wishlist(self):
if not self.in_wishlist:
return
2021-08-25 10:01:53 +12:00
# self.api_core.add_to_wishlist(self.game.namespace, self.game.offer_id,
# lambda success: self.wishlist_button.setText(self.tr("Remove from wishlist"))
# if success else self.wishlist_button.setText("Something goes wrong"))
2021-08-23 08:22:17 +12:00
else:
self.api_core.remove_from_wishlist(self.game.namespace, self.game.offer_id,
lambda success: self.wishlist_button.setVisible(False)
if success else self.wishlist_button.setText("Something goes wrong"))
2021-08-08 09:42:40 +12:00
def data_received(self, game):
self.game = ShopGame.from_json(game, self.data)
2021-06-05 04:16:27 +12:00
self.title.setText(self.game.title)
2021-06-18 22:24:56 +12:00
self.price.setFont(QFont())
2021-08-26 06:41:10 +12:00
if self.game.price == "0" or self.game.price == 0:
2021-06-15 08:30:57 +12:00
self.price.setText(self.tr("Free"))
2021-08-26 06:41:10 +12:00
else:
self.price.setText(self.game.price)
if self.game.price != self.game.discount_price:
2021-06-18 22:24:56 +12:00
font = QFont()
font.setStrikeOut(True)
self.price.setFont(font)
self.discount_price.setText(
self.game.discount_price if self.game.discount_price != "0" else self.tr("Free"))
self.discount_price.setVisible(True)
else:
self.discount_price.setVisible(False)
2021-06-10 09:12:49 +12:00
# print(self.game.reqs)
bold_font = QFont()
bold_font.setBold(True)
min_label = QLabel(self.tr("Minimum"))
min_label.setFont(bold_font)
rec_label = QLabel(self.tr("Recommend"))
rec_label.setFont(bold_font)
if self.game.reqs:
self.req_group_box.layout().addWidget(min_label, 0, 1)
self.req_group_box.layout().addWidget(rec_label, 0, 2)
for i, (key, value) in enumerate(self.game.reqs.get("Windows", {}).items()):
self.req_group_box.layout().addWidget(QLabel(key), i + 1, 0)
min_label = QLabel(value[0])
min_label.setWordWrap(True)
self.req_group_box.layout().addWidget(min_label, i + 1, 1)
rec_label = QLabel(value[1])
rec_label.setWordWrap(True)
self.req_group_box.layout().addWidget(rec_label, i + 1, 2)
else:
self.req_group_box.layout().addWidget(QLabel(self.tr("Could not get requirements")))
self.image.update_image(self.game.image_urls.front_tall, self.game.title, (240, 320))
self.image_stack.setCurrentIndex(0)
2021-06-05 04:16:27 +12:00
try:
2021-06-10 09:12:49 +12:00
if isinstance(self.game.developer, list):
self.dev.setText(", ".join(self.game.developer))
else:
self.dev.setText(self.game.developer)
2021-06-05 04:16:27 +12:00
except KeyError:
pass
2021-06-17 05:03:18 +12:00
self.tags.setText(", ".join(self.game.tags))
2021-08-23 08:22:17 +12:00
def add_wishlist_items(self, wishlist):
wishlist = wishlist["data"]["Wishlist"]["wishlistItems"]["elements"]
for game in wishlist:
self.wishlist.append(game["offer"]["title"])
2021-06-04 09:23:55 +12:00
def button_clicked(self):
webbrowser.open("https://www.epicgames.com/store/de/p/" + self.slug)