1
0
Fork 0
mirror of synced 2024-06-26 10:11:19 +12:00

Added other games,set type to scrollarea

This commit is contained in:
Dummerle 2021-06-11 13:37:09 +02:00
parent bd6e195e37
commit bc6b9e5ae2
6 changed files with 142 additions and 62 deletions

View file

@ -67,12 +67,13 @@ class _SearchResultItem(QGroupBox):
price = result['price']['totalPrice']['fmtPrice']['originalPrice']
discount_price = result['price']['totalPrice']['fmtPrice']['discountPrice']
price_layout = QHBoxLayout()
price = QLabel(price)
price_layout.addWidget(price)
price_label = QLabel(price)
price_layout.addWidget(price_label)
if price != discount_price:
font = QFont()
font.setStrikeOut(True)
price.setFont(font)
price_label.setFont(font)
price_layout.addWidget(QLabel(discount_price))
# self.discount_price = QLabel(f"{self.tr('Discount price: ')}{discount_price}")
self.layout.addLayout(price_layout)

View file

@ -60,7 +60,7 @@ class ShopGame:
for item in links:
if item.startswith("link"):
tmp.links.append(tuple((item.replace("link", ""), links[item])))
tmp.available_voice_langs = api_data["data"]["requirements"]["languages"]
tmp.available_voice_langs = api_data["data"]["requirements"].get("languages", "Failed")
tmp.reqs = {}
for i, system in enumerate(api_data["data"]["requirements"]["systems"]):
tmp.reqs[system["systemType"]] = {}

View file

@ -10,7 +10,7 @@ from PyQt5.QtCore import Qt, pyqtSignal, QUrl, QJsonDocument, QJsonParseError, \
QStringListModel
from PyQt5.QtGui import QPixmap
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QCompleter, QGroupBox, QHBoxLayout
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QCompleter, QGroupBox, QHBoxLayout, QScrollArea
from rare.ui.components.tabs.store.store import Ui_ShopWidget
from rare.utils.extra_widgets import WaitingSpinner, ImageLabel, FlowLayout
@ -18,13 +18,14 @@ from rare.utils.utils import get_lang
# noinspection PyAttributeOutsideInit,PyBroadException
class ShopWidget(QWidget, Ui_ShopWidget):
class ShopWidget(QScrollArea, Ui_ShopWidget):
show_info = pyqtSignal(list)
show_game = pyqtSignal(dict)
free_game_widgets = []
def __init__(self):
super(ShopWidget, self).__init__()
self.setWidgetResizable(True)
self.setupUi(self)
self.manager = QNetworkAccessManager()
self.free_games_widget = QWidget()
@ -44,6 +45,8 @@ class ShopWidget(QWidget, Ui_ShopWidget):
self.search.returnPressed.connect(self.show_search_result)
self.data = []
self.games_groupbox.setLayout(FlowLayout())
def load(self):
if p := os.getenv("XDG_CACHE_HOME"):
self.path = p
@ -55,7 +58,12 @@ class ShopWidget(QWidget, Ui_ShopWidget):
self.free_game_request = self.manager.get(QNetworkRequest(QUrl(url)))
self.free_game_request.finished.connect(self.add_free_games)
# free_games = api_utils.get_free_games()
game_list = ["Satisfactory", "Among Us", "Star Wars Jedi Fallen Order", "Watch Dogs", "Subnautica Below Zero"]
# TODO read from api
for game in game_list:
w = GameWidget.from_request(game, self.path)
self.games_groupbox.layout().addWidget(w)
w.show_info.connect(self.show_game.emit)
def add_free_games(self):
if self.free_game_request:
@ -111,14 +119,14 @@ class ShopWidget(QWidget, Ui_ShopWidget):
coming_free_games.append(game)
for free_game in free_games_now:
w = GameWidget(free_game, self.path)
w = GameWidget(self.path, free_game)
w.show_info.connect(self.show_game.emit)
self.free_games_now.layout().addWidget(w)
self.free_game_widgets.append(w)
self.free_games_now.layout().addStretch(1)
for free_game in coming_free_games:
w = GameWidget(free_game, self.path)
w = GameWidget(self.path, free_game)
if free_game["title"] != "Mystery Game":
w.show_info.connect(self.show_game.emit)
self.coming_free_games.layout().addWidget(w)
@ -188,8 +196,14 @@ class ShopWidget(QWidget, Ui_ShopWidget):
class GameWidget(QWidget):
show_info = pyqtSignal(dict)
def __init__(self, json_info, path: str):
def __init__(self, path, json_info=None):
super(GameWidget, self).__init__()
if json_info:
self.init_ui(json_info, path)
self.path = path
def init_ui(self, json_info, path):
self.path = path
self.layout = QVBoxLayout()
self.image = ImageLabel()
self.json_info = json_info
@ -203,7 +217,7 @@ class GameWidget(QWidget):
self.slug = json_info["productSlug"]
self.title = json_info["title"]
if not os.path.exists(p := os.path.join(path, f"{json_info['title']}.png")):
if not os.path.exists(p := os.path.join(self.path, f"{json_info['title']}.png")):
for img in json_info["keyImages"]:
if json_info["title"] != "Mystery Game":
if img["type"] == "DieselStoreFrontWide":
@ -220,17 +234,56 @@ class GameWidget(QWidget):
else:
print("No image found")
width = 300
self.image.setPixmap(QPixmap(os.path.join(path, f"{json_info['title']}.png"))
self.image.setPixmap(QPixmap(os.path.join(self.path, f"{json_info['title']}.png"))
.scaled(width, int(width * 9 / 16), transformMode=Qt.SmoothTransformation))
self.layout.addWidget(self.image)
self.title_label = QLabel(json_info["title"])
self.title_label.setWordWrap(True)
self.layout.addWidget(self.title_label)
self.setLayout(self.layout)
def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None:
self.show_info.emit(self.json_info)
@classmethod
def from_request(cls, name, path):
c = cls(path)
c.manager = QNetworkAccessManager()
c.request = c.manager.get(QNetworkRequest())
locale = get_lang()
payload = json.dumps({
"query": query,
"variables": {"category": "games/edition/base|bundles/games|editors|software/edition/base", "count": 1,
"country": "DE", "keywords": name, "locale": locale, "sortDir": "DESC",
"allowCountries": locale.upper(),
"start": 0, "tag": "", "withMapping": False, "withPrice": True}
}).encode()
request = QNetworkRequest(QUrl("https://www.epicgames.com/graphql"))
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
c.search_request = c.manager.post(request, payload)
c.search_request.finished.connect(lambda: c.handle_response(path))
return c
def handle_response(self, path):
if self.search_request:
if self.search_request.error() == QNetworkReply.NoError:
error = QJsonParseError()
json_data = QJsonDocument.fromJson(self.search_request.readAll().data(), error)
if QJsonParseError.NoError == error.error:
data = json.loads(json_data.toJson().data().decode())["data"]["Catalog"]["searchStore"][
"elements"][0]
self.init_ui(data, path)
else:
logging.error(error.errorString())
return
else:
return
else:
return
query = "query searchStoreQuery($allowCountries: String, $category: String, $count: Int, $country: String!, " \
"$keywords: String, $locale: String, $namespace: String, $withMapping: Boolean = false, $itemNs: String, " \

View file

@ -17,24 +17,32 @@ class Ui_ShopWidget(object):
ShopWidget.resize(697, 362)
self.verticalLayout = QtWidgets.QVBoxLayout(ShopWidget)
self.verticalLayout.setObjectName("verticalLayout")
self.search = QtWidgets.QLineEdit(ShopWidget)
self.scrollArea = QtWidgets.QScrollArea(ShopWidget)
self.scrollArea.setWidgetResizable(True)
self.scrollArea.setObjectName("scrollArea")
self.scrollAreaWidgetContents = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 677, 342))
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.search = QtWidgets.QLineEdit(self.scrollAreaWidgetContents)
self.search.setObjectName("search")
self.verticalLayout.addWidget(self.search)
self.free_game_group_box = QtWidgets.QGroupBox(ShopWidget)
self.verticalLayout_3.addWidget(self.search)
self.free_game_group_box = QtWidgets.QGroupBox(self.scrollAreaWidgetContents)
self.free_game_group_box.setObjectName("free_game_group_box")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.free_game_group_box)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.free_games_stack = QtWidgets.QStackedWidget(self.free_game_group_box)
self.free_games_stack.setObjectName("free_games_stack")
self.verticalLayout_2.addWidget(self.free_games_stack)
self.verticalLayout.addWidget(self.free_game_group_box)
self.games_groupbox = QtWidgets.QGroupBox(ShopWidget)
self.verticalLayout_3.addWidget(self.free_game_group_box)
self.games_groupbox = QtWidgets.QGroupBox(self.scrollAreaWidgetContents)
self.games_groupbox.setObjectName("games_groupbox")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.games_groupbox)
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.verticalLayout.addWidget(self.games_groupbox)
self.verticalLayout_3.addWidget(self.games_groupbox)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem)
self.verticalLayout_3.addItem(spacerItem)
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.verticalLayout.addWidget(self.scrollArea)
self.retranslateUi(ShopWidget)
self.free_games_stack.setCurrentIndex(-1)

View file

@ -15,49 +15,67 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLineEdit" name="search">
<property name="placeholderText">
<string>Search Games</string>
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>677</width>
<height>342</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLineEdit" name="search">
<property name="placeholderText">
<string>Search Games</string>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="free_game_group_box">
<property name="title">
<string>Free Games</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QStackedWidget" name="free_games_stack">
<property name="currentIndex">
<number>-1</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="games_groupbox">
<property name="title">
<string>Other nice games</string>
</property>
</widget>
</item>
<item>
<spacer name="spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<widget class="QGroupBox" name="free_game_group_box">
<property name="title">
<string>Free Games</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QStackedWidget" name="free_games_stack">
<property name="currentIndex">
<number>-1</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="games_groupbox">
<property name="title">
<string>Other nice games</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_7"/>
</widget>
</item>
<item>
<spacer name="spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>

View file

@ -259,7 +259,7 @@ class ImageLabel(QLabel):
super(ImageLabel, self).__init__()
path = os.path.expanduser("~/.cache/rare/cache")
if p := os.environ.get("XDG_CACHE_HOME"):
path = p
path = os.path.join(p, "rare", "cache")
self.path = path
self.manager = QNetworkAccessManager()