2021-06-04 10:01:54 +12:00
|
|
|
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
|
2021-06-04 10:01:54 +12:00
|
|
|
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 = ""
|
|
|
|
|
2021-06-04 10:01:54 +12:00
|
|
|
# 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
|
2021-06-04 10:01:54 +12:00
|
|
|
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)
|
2021-06-04 10:01:54 +12:00
|
|
|
|
|
|
|
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())
|
2021-06-04 10:01:54 +12:00
|
|
|
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)
|