1
0
Fork 0
mirror of synced 2024-06-22 16:20:32 +12:00

Fix some errors in shop, if api request fails

This commit is contained in:
Dummerle 2021-11-01 20:17:36 +01:00
parent e4b3594b07
commit 532bdf1904
No known key found for this signature in database
GPG key ID: AB68CC59CA39F2F1
4 changed files with 66 additions and 20 deletions

View file

@ -37,6 +37,8 @@ class ShopGameInfo(QWidget, Ui_shop_info):
self.wishlist = []
def handle_wishlist_update(self, data):
if data[0] == "error":
return
self.wishlist = [i["offer"]["title"] for i in data]
if self.title_str in self.wishlist:
self.in_wishlist = True

View file

@ -33,9 +33,16 @@ class ShopApiCore(QObject):
def _handle_free_games(self, data, handle_func):
try:
handle_func(data["data"]["Catalog"]["searchStore"]["elements"])
except KeyError as e:
logger.error(str(e))
results: dict = data["data"]["Catalog"]["searchStore"]["elements"]
except KeyError:
logger.error("Free games Api request failed")
handle_func(["error", "Key error"])
return
except Exception as e:
logger.error("Free games Api request failed: " + str(e))
handle_func(["error", e])
return
handle_func(results)
def get_wishlist(self, handle_func):
self.auth_manager.post(graphql_url, {
@ -48,9 +55,17 @@ class ShopApiCore(QObject):
def _handle_wishlist(self, data, handle_func):
try:
handle_func(data["data"]["Wishlist"]["wishlistItems"]["elements"])
results: list = data["data"]["Wishlist"]["wishlistItems"]["elements"]
except KeyError:
handle_func(None)
logger.error("Free games Api request failed")
handle_func(["error", "Key error"])
return
except Exception as e:
logger.error("Free games Api request failed: " + str(e))
handle_func(["error", e])
return
handle_func(results)
def search_game(self, name, handle_func):
payload = {
@ -101,6 +116,7 @@ class ShopApiCore(QObject):
def _handle_get_game(self, data, handle_func):
handle_func(data)
# needs a captcha
def add_to_wishlist(self, namespace, offer_id, handle_func: callable):
payload = {
"variables": {

View file

@ -3,7 +3,7 @@ import logging
import random
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QGroupBox, QScrollArea, QCheckBox, QVBoxLayout, QLabel
from PyQt5.QtWidgets import QGroupBox, QScrollArea, QCheckBox, QVBoxLayout, QLabel, QPushButton
from legendary.core import LegendaryCore
from rare.components.tabs.shop import ShopApiCore
@ -37,12 +37,7 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
self.types = []
self.update_games_allowed = True
self.free_widget.setLayout(FlowLayout())
self.free_games_now = QGroupBox(self.tr("Now Free"))
self.free_games_now.setLayout(FlowLayout())
self.free_widget.layout().addWidget(self.free_games_now)
self.coming_free_games = QGroupBox(self.tr("Free Games next week"))
self.coming_free_games.setLayout(FlowLayout())
self.free_widget.layout().addWidget(self.coming_free_games)
self.free_stack.addWidget(WaitingSpinner())
self.free_stack.setCurrentIndex(1)
@ -78,9 +73,18 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
self.api_core.get_wishlist(self.add_wishlist_items)
def add_wishlist_items(self, wishlist):
for i in range(self.discount_widget.layout().count()):
item = self.discount_widget.layout().itemAt(i)
if item:
item.widget().deleteLater()
for item in (self.discount_widget.layout().itemAt(i) for i in range(self.discount_widget.layout().count())):
item.widget().deleteLater()
if wishlist[0] == "error":
self.discount_widget.layout().addWidget(QLabel(self.tr("Failed to get wishlist: ") + wishlist[1]))
btn = QPushButton(self.tr("Reload"))
self.discount_widget.layout().addWidget(btn)
btn.clicked.connect(lambda: self.api_core.get_wishlist(self.add_wishlist_items))
self.discount_stack.setCurrentIndex(0)
return
discounts = 0
for game in wishlist:
@ -98,7 +102,28 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
self.discounts_gb.setVisible(discounts > 0)
self.discount_stack.setCurrentIndex(0)
def add_free_games(self, free_games):
def add_free_games(self, free_games: list):
for i in range(self.free_widget.layout().count()):
item = self.free_widget.layout().itemAt(i)
if item:
item.widget().deleteLater()
if free_games[0] == "error":
self.free_widget.layout().addWidget(QLabel(self.tr("Failed to fetch free games: ") + free_games[1]))
btn = QPushButton(self.tr("Reload"))
self.free_widget.layout().addWidget(btn)
btn.clicked.connect(lambda: self.api_core.get_free_games(self.add_free_games))
self.free_stack.setCurrentIndex(0)
return
self.free_games_now = QGroupBox(self.tr("Now Free"))
self.free_games_now.setLayout(FlowLayout())
self.free_widget.layout().addWidget(self.free_games_now)
self.coming_free_games = QGroupBox(self.tr("Free Games next week"))
self.coming_free_games.setLayout(FlowLayout())
self.free_widget.layout().addWidget(self.coming_free_games)
date = datetime.datetime.now()
free_games_now = []
coming_free_games = []
@ -245,10 +270,11 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
w.show_info.connect(self.show_game.emit)
else:
self.game_widget.setLayout(QVBoxLayout())
self.game_widget.layout().addWidget(
layout = QVBoxLayout()
layout.addWidget(
QLabel(self.tr("Could not get games matching the filter")))
self.game_widget.layout().addStretch(1)
layout.addStretch(1)
self.game_widget.setLayout(layout)
self.game_stack.setCurrentIndex(0)

View file

@ -57,12 +57,14 @@ class Wishlist(QStackedWidget, Ui_Wishlist):
self.no_games_label.setVisible(False)
def set_wishlist(self, wishlist=None, sort=0):
if wishlist and wishlist[0] == "error":
return
if wishlist is not None:
self.wishlist = wishlist
for i in self.widgets:
i.setParent(None)
del i
i.deleteLater()
if sort == 0:
sorted_list = sorted(self.wishlist, key=lambda x: x["offer"]["title"])