1
0
Fork 0
mirror of synced 2024-06-21 12:00:25 +12:00

Shop info works now

This commit is contained in:
Dummerle 2021-06-04 18:16:27 +02:00
parent 654788410a
commit bcce9487cd
5 changed files with 146 additions and 88 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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__":

View file

@ -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/>

View file

@ -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