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

72 lines
2.7 KiB
Python
Raw Normal View History

import json
import logging
2021-06-04 09:23:55 +12:00
import os
import webbrowser
2021-06-05 04:16:27 +12:00
import requests
from PyQt5.QtCore import QLocale, QUrl, QJsonDocument, QJsonParseError, Qt
2021-06-04 09:23:55 +12:00
from PyQt5.QtGui import QPixmap
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
2021-06-04 09:23:55 +12:00
from PyQt5.QtWidgets import QWidget
2021-06-05 04:16:27 +12:00
from rare.utils import models
2021-06-04 09:23:55 +12:00
from rare.ui.components.tabs.store.shop_game_info import Ui_shop_info
class ShopGameInfo(QWidget, Ui_shop_info):
slug = ""
# TODO GANZ VIEL
2021-06-04 09:23:55 +12:00
def __init__(self):
super(ShopGameInfo, self).__init__()
self.setupUi(self)
2021-06-05 04:16:27 +12:00
self.open_store_button.clicked.connect(self.button_clicked)
2021-06-04 09:23:55 +12:00
self.manager = QNetworkAccessManager()
def update_game(self, slug: str):
2021-06-05 04:16:27 +12:00
self.title.setText(self.tr("Loading"))
self.price.setText(self.tr("Loading"))
self.dev.setText(self.tr("Loading"))
self.image.setPixmap(QPixmap())
2021-06-04 09:23:55 +12:00
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)))
2021-06-05 04:16:27 +12:00
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:
2021-06-05 04:16:27 +12:00
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
2021-06-05 04:16:27 +12:00
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()
2021-06-04 09:23:55 +12:00
def button_clicked(self):
webbrowser.open("https://www.epicgames.com/store/de/p/" + self.slug)