Shop info works now
This commit is contained in:
parent
654788410a
commit
bcce9487cd
5 changed files with 146 additions and 88 deletions
|
@ -1,4 +1,4 @@
|
|||
from PyQt5.QtWidgets import QStackedWidget, QWidget, QVBoxLayout, QLabel
|
||||
from PyQt5.QtWidgets import QStackedWidget
|
||||
|
||||
from rare.components.tabs.shop.shop_info import ShopGameInfo
|
||||
from rare.components.tabs.shop.shop_widget import ShopWidget
|
||||
|
@ -6,6 +6,7 @@ from rare.components.tabs.shop.shop_widget import ShopWidget
|
|||
|
||||
class Shop(QStackedWidget):
|
||||
init = False
|
||||
|
||||
def __init__(self):
|
||||
super(Shop, self).__init__()
|
||||
|
||||
|
@ -14,6 +15,7 @@ class Shop(QStackedWidget):
|
|||
|
||||
self.info = ShopGameInfo()
|
||||
self.addWidget(self.info)
|
||||
self.info.back_button.clicked.connect(lambda: self.setCurrentIndex(0))
|
||||
|
||||
self.shop.show_info.connect(self.show_info)
|
||||
|
||||
|
@ -22,7 +24,6 @@ class Shop(QStackedWidget):
|
|||
self.init = True
|
||||
self.shop.load()
|
||||
|
||||
|
||||
def show_info(self, slug):
|
||||
self.info.update_game(slug)
|
||||
self.setCurrentIndex(1)
|
||||
|
|
|
@ -2,12 +2,13 @@ import json
|
|||
import logging
|
||||
import os
|
||||
import webbrowser
|
||||
from json import JSONDecodeError
|
||||
|
||||
from PyQt5.QtCore import QLocale, Qt, QUrl
|
||||
import requests
|
||||
from PyQt5.QtCore import QLocale, QUrl, QJsonDocument, QJsonParseError, Qt
|
||||
from PyQt5.QtGui import QPixmap
|
||||
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
|
||||
from PyQt5.QtWidgets import QWidget
|
||||
from rare.utils import models
|
||||
|
||||
from rare.ui.components.tabs.store.shop_game_info import Ui_shop_info
|
||||
|
||||
|
@ -19,36 +20,52 @@ class ShopGameInfo(QWidget, Ui_shop_info):
|
|||
def __init__(self):
|
||||
super(ShopGameInfo, self).__init__()
|
||||
self.setupUi(self)
|
||||
self.pushButton.clicked.connect(self.button_clicked)
|
||||
self.open_store_button.clicked.connect(self.button_clicked)
|
||||
self.manager = QNetworkAccessManager()
|
||||
|
||||
def update_game(self, slug: str):
|
||||
self.title.setText(self.tr("Loading"))
|
||||
self.price.setText(self.tr("Loading"))
|
||||
self.dev.setText(self.tr("Loading"))
|
||||
self.image.setPixmap(QPixmap())
|
||||
self.slug = slug
|
||||
locale = QLocale.system().name().split("_")[0]
|
||||
url = f"https://store-content.ak.epicgames.com/api/{locale}/content/products/{slug}"
|
||||
# game = api_utils.get_product(slug, locale)
|
||||
self.request = self.manager.get(QNetworkRequest(QUrl(url)))
|
||||
self.request.readyRead.connect(self.data_received)
|
||||
self.request.finished.connect(self.request.deleteLater if self.request else None)
|
||||
self.request.finished.connect(self.data_received)
|
||||
# self.request.finished.connect(self.request.deleteLater if self.request else None)
|
||||
|
||||
def data_received(self):
|
||||
logging.info(f"Data of game {self.slug} received")
|
||||
if self.request:
|
||||
if self.request.error() == QNetworkReply.NoError:
|
||||
try:
|
||||
game = json.loads(self.request.readAll().data().decode())[0]
|
||||
except JSONDecodeError:
|
||||
error = QJsonParseError()
|
||||
json_data = QJsonDocument.fromJson(self.request.readAll().data(), error)
|
||||
|
||||
if error.error == error.NoError:
|
||||
game = json.loads(json_data.toJson().data().decode())
|
||||
else:
|
||||
logging.info(self.slug, error.errorString())
|
||||
return
|
||||
else:
|
||||
return
|
||||
else:
|
||||
return
|
||||
self.title.setText(game["productName"])
|
||||
self.image.setPixmap(
|
||||
QPixmap(os.path.expanduser(f"~/.cache/rare/cache/{game['productName']}.png")).scaled(180,
|
||||
int(180 * 9 / 16),
|
||||
transformMode=Qt.SmoothTransformation))
|
||||
self.dev.setText(game["data"]["meta"]["developer"][0])
|
||||
self.game = models.ShopGame.from_json(game)
|
||||
# print(game)
|
||||
self.title.setText(self.game.title)
|
||||
|
||||
if not os.path.exists(path := os.path.expanduser(f"~/.cache/rare/cache/{self.game.title}.png")):
|
||||
url = game["pages"][0]["_images_"][0]
|
||||
open(os.path.expanduser(path), "wb").write(requests.get(url).content)
|
||||
width = 360
|
||||
self.image.setPixmap(QPixmap(path).scaled(width, int(width * 9 / 16), transformMode=Qt.SmoothTransformation))
|
||||
try:
|
||||
self.dev.setText(",".join(self.game.developer))
|
||||
except KeyError:
|
||||
pass
|
||||
self.request.deleteLater()
|
||||
|
||||
def button_clicked(self):
|
||||
webbrowser.open("https://www.epicgames.com/store/de/p/" + self.slug)
|
||||
|
|
|
@ -15,28 +15,39 @@ class Ui_shop_info(object):
|
|||
def setupUi(self, shop_info):
|
||||
shop_info.setObjectName("shop_info")
|
||||
shop_info.resize(702, 468)
|
||||
self.gridLayout = QtWidgets.QGridLayout(shop_info)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.pushButton = QtWidgets.QPushButton(shop_info)
|
||||
self.pushButton.setObjectName("pushButton")
|
||||
self.gridLayout.addWidget(self.pushButton, 3, 1, 1, 1)
|
||||
self.price = QtWidgets.QLabel(shop_info)
|
||||
self.price.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
|
||||
self.price.setObjectName("price")
|
||||
self.gridLayout.addWidget(self.price, 1, 1, 1, 1)
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(shop_info)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.back_button = QtWidgets.QPushButton(shop_info)
|
||||
self.back_button.setObjectName("back_button")
|
||||
self.verticalLayout.addWidget(self.back_button)
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.image = QtWidgets.QLabel(shop_info)
|
||||
self.image.setObjectName("image")
|
||||
self.horizontalLayout.addWidget(self.image)
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.title = QtWidgets.QLabel(shop_info)
|
||||
self.title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
|
||||
self.title.setObjectName("title")
|
||||
self.gridLayout.addWidget(self.title, 0, 1, 1, 1)
|
||||
self.image = QtWidgets.QLabel(shop_info)
|
||||
self.image.setObjectName("image")
|
||||
self.gridLayout.addWidget(self.image, 0, 0, 1, 1)
|
||||
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||
self.gridLayout.addItem(spacerItem, 4, 1, 1, 1)
|
||||
self.verticalLayout_2.addWidget(self.title)
|
||||
self.dev = QtWidgets.QLabel(shop_info)
|
||||
self.dev.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
|
||||
self.dev.setObjectName("dev")
|
||||
self.gridLayout.addWidget(self.dev, 2, 1, 1, 1)
|
||||
self.verticalLayout_2.addWidget(self.dev)
|
||||
self.price = QtWidgets.QLabel(shop_info)
|
||||
self.price.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
|
||||
self.price.setObjectName("price")
|
||||
self.verticalLayout_2.addWidget(self.price)
|
||||
self.horizontalLayout.addLayout(self.verticalLayout_2)
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||
self.open_store_button = QtWidgets.QPushButton(shop_info)
|
||||
self.open_store_button.setObjectName("open_store_button")
|
||||
self.verticalLayout.addWidget(self.open_store_button)
|
||||
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||
self.verticalLayout.addItem(spacerItem1)
|
||||
|
||||
self.retranslateUi(shop_info)
|
||||
QtCore.QMetaObject.connectSlotsByName(shop_info)
|
||||
|
@ -44,11 +55,12 @@ class Ui_shop_info(object):
|
|||
def retranslateUi(self, shop_info):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
shop_info.setWindowTitle(_translate("shop_info", "Form"))
|
||||
self.pushButton.setText(_translate("shop_info", "Buy Game in Epic Games Store"))
|
||||
self.price.setText(_translate("shop_info", "TextLabel"))
|
||||
self.title.setText(_translate("shop_info", "Error"))
|
||||
self.back_button.setText(_translate("shop_info", "Back"))
|
||||
self.image.setText(_translate("shop_info", "TextLabel"))
|
||||
self.title.setText(_translate("shop_info", "Error"))
|
||||
self.dev.setText(_translate("shop_info", "TextLabel"))
|
||||
self.price.setText(_translate("shop_info", "TextLabel"))
|
||||
self.open_store_button.setText(_translate("shop_info", "Buy Game in Epic Games Store"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -13,43 +13,81 @@
|
|||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="3" column="1">
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="back_button">
|
||||
<property name="text">
|
||||
<string>Back</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="image">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="title">
|
||||
<property name="text">
|
||||
<string>Error</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="dev">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="price">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="open_store_button">
|
||||
<property name="text">
|
||||
<string>Buy Game in Epic Games Store</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="price">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="title">
|
||||
<property name="text">
|
||||
<string>Error</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="image">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<spacer name="spacer">
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
|
@ -61,16 +99,6 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="dev">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
|
|
@ -64,21 +64,21 @@ class ShopGame:
|
|||
tmp = cls()
|
||||
tmp.title = data.get("productName", "undefined")
|
||||
tmp.img_urls = {
|
||||
"DieselImage": data["data"]["about"]["image"]["src"],
|
||||
"banner": data["data"]["hero"]["backgroundImageUrl"]
|
||||
"DieselImage": data["pages"][0]["data"]["about"]["image"]["src"],
|
||||
"banner": data["pages"][0]["data"]["hero"]["backgroundImageUrl"]
|
||||
}
|
||||
links = data["data"]["socialLinks"]
|
||||
links = data["pages"][0]["data"]["socialLinks"]
|
||||
tmp.links = []
|
||||
for item in links:
|
||||
if item.startswith("link"):
|
||||
tmp.links.append(tuple((item.replace("link", ""), links[item])))
|
||||
tmp.available_voice_langs = data["data"]["requirements"]["languages"]
|
||||
tmp.reqs = {}
|
||||
for system in data["data"]["requirements"]["systems"]:
|
||||
tmp.reqs[system] = {}
|
||||
tmp.available_voice_langs = data["pages"][0]["data"]["requirements"]["languages"]
|
||||
tmp.reqs = []
|
||||
"""for system in data["pages"][0]["data"]["requirements"]["systems"]:
|
||||
tmp.reqs.append({"name": system, "value": []})
|
||||
for i in system:
|
||||
tmp.reqs[i[system]["title"]] = tuple((i[system]["minimum"], i[system]["recommend"]))
|
||||
|
||||
tmp.publisher = data["data"]["meta"].get("publisher", "undefined")
|
||||
tmp.developer = data["data"]["meta"].get("developer", "undefined")
|
||||
tmp.reqs[system].append(tuple((i[system]["minimum"], i[system]["recommend"])))
|
||||
"""
|
||||
tmp.publisher = data["pages"][0]["data"]["meta"].get("publisher", "undefined")
|
||||
tmp.developer = data["pages"][0]["data"]["meta"].get("developer", "undefined")
|
||||
return tmp
|
||||
|
|
Loading…
Reference in a new issue