Fix some errors in shop, if api request fails
This commit is contained in:
parent
e4b3594b07
commit
532bdf1904
|
@ -37,6 +37,8 @@ class ShopGameInfo(QWidget, Ui_shop_info):
|
||||||
self.wishlist = []
|
self.wishlist = []
|
||||||
|
|
||||||
def handle_wishlist_update(self, data):
|
def handle_wishlist_update(self, data):
|
||||||
|
if data[0] == "error":
|
||||||
|
return
|
||||||
self.wishlist = [i["offer"]["title"] for i in data]
|
self.wishlist = [i["offer"]["title"] for i in data]
|
||||||
if self.title_str in self.wishlist:
|
if self.title_str in self.wishlist:
|
||||||
self.in_wishlist = True
|
self.in_wishlist = True
|
||||||
|
|
|
@ -33,9 +33,16 @@ class ShopApiCore(QObject):
|
||||||
|
|
||||||
def _handle_free_games(self, data, handle_func):
|
def _handle_free_games(self, data, handle_func):
|
||||||
try:
|
try:
|
||||||
handle_func(data["data"]["Catalog"]["searchStore"]["elements"])
|
results: dict = data["data"]["Catalog"]["searchStore"]["elements"]
|
||||||
except KeyError as e:
|
except KeyError:
|
||||||
logger.error(str(e))
|
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):
|
def get_wishlist(self, handle_func):
|
||||||
self.auth_manager.post(graphql_url, {
|
self.auth_manager.post(graphql_url, {
|
||||||
|
@ -48,9 +55,17 @@ class ShopApiCore(QObject):
|
||||||
|
|
||||||
def _handle_wishlist(self, data, handle_func):
|
def _handle_wishlist(self, data, handle_func):
|
||||||
try:
|
try:
|
||||||
handle_func(data["data"]["Wishlist"]["wishlistItems"]["elements"])
|
results: list = data["data"]["Wishlist"]["wishlistItems"]["elements"]
|
||||||
except KeyError:
|
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):
|
def search_game(self, name, handle_func):
|
||||||
payload = {
|
payload = {
|
||||||
|
@ -101,6 +116,7 @@ class ShopApiCore(QObject):
|
||||||
def _handle_get_game(self, data, handle_func):
|
def _handle_get_game(self, data, handle_func):
|
||||||
handle_func(data)
|
handle_func(data)
|
||||||
|
|
||||||
|
# needs a captcha
|
||||||
def add_to_wishlist(self, namespace, offer_id, handle_func: callable):
|
def add_to_wishlist(self, namespace, offer_id, handle_func: callable):
|
||||||
payload = {
|
payload = {
|
||||||
"variables": {
|
"variables": {
|
||||||
|
|
|
@ -3,7 +3,7 @@ import logging
|
||||||
import random
|
import random
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSignal
|
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 legendary.core import LegendaryCore
|
||||||
from rare.components.tabs.shop import ShopApiCore
|
from rare.components.tabs.shop import ShopApiCore
|
||||||
|
@ -37,12 +37,7 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
|
||||||
self.types = []
|
self.types = []
|
||||||
self.update_games_allowed = True
|
self.update_games_allowed = True
|
||||||
self.free_widget.setLayout(FlowLayout())
|
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.addWidget(WaitingSpinner())
|
||||||
self.free_stack.setCurrentIndex(1)
|
self.free_stack.setCurrentIndex(1)
|
||||||
|
|
||||||
|
@ -78,9 +73,18 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
|
||||||
self.api_core.get_wishlist(self.add_wishlist_items)
|
self.api_core.get_wishlist(self.add_wishlist_items)
|
||||||
|
|
||||||
def add_wishlist_items(self, wishlist):
|
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())):
|
if wishlist[0] == "error":
|
||||||
item.widget().deleteLater()
|
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
|
discounts = 0
|
||||||
for game in wishlist:
|
for game in wishlist:
|
||||||
|
@ -98,7 +102,28 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
|
||||||
self.discounts_gb.setVisible(discounts > 0)
|
self.discounts_gb.setVisible(discounts > 0)
|
||||||
self.discount_stack.setCurrentIndex(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()
|
date = datetime.datetime.now()
|
||||||
free_games_now = []
|
free_games_now = []
|
||||||
coming_free_games = []
|
coming_free_games = []
|
||||||
|
@ -245,10 +270,11 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
|
||||||
w.show_info.connect(self.show_game.emit)
|
w.show_info.connect(self.show_game.emit)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.game_widget.setLayout(QVBoxLayout())
|
layout = QVBoxLayout()
|
||||||
self.game_widget.layout().addWidget(
|
layout.addWidget(
|
||||||
QLabel(self.tr("Could not get games matching the filter")))
|
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)
|
self.game_stack.setCurrentIndex(0)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -57,12 +57,14 @@ class Wishlist(QStackedWidget, Ui_Wishlist):
|
||||||
self.no_games_label.setVisible(False)
|
self.no_games_label.setVisible(False)
|
||||||
|
|
||||||
def set_wishlist(self, wishlist=None, sort=0):
|
def set_wishlist(self, wishlist=None, sort=0):
|
||||||
|
if wishlist and wishlist[0] == "error":
|
||||||
|
return
|
||||||
|
|
||||||
if wishlist is not None:
|
if wishlist is not None:
|
||||||
self.wishlist = wishlist
|
self.wishlist = wishlist
|
||||||
|
|
||||||
for i in self.widgets:
|
for i in self.widgets:
|
||||||
i.setParent(None)
|
i.deleteLater()
|
||||||
del i
|
|
||||||
|
|
||||||
if sort == 0:
|
if sort == 0:
|
||||||
sorted_list = sorted(self.wishlist, key=lambda x: x["offer"]["title"])
|
sorted_list = sorted(self.wishlist, key=lambda x: x["offer"]["title"])
|
||||||
|
|
Loading…
Reference in a new issue