From 532bdf1904b31abc1f3395ec5687397a9fceb1f7 Mon Sep 17 00:00:00 2001 From: Dummerle <44114474+Dummerle@users.noreply.github.com> Date: Mon, 1 Nov 2021 20:17:36 +0100 Subject: [PATCH] Fix some errors in shop, if api request fails --- rare/components/tabs/shop/game_info.py | 2 + rare/components/tabs/shop/shop_api_core.py | 26 ++++++++--- rare/components/tabs/shop/shop_widget.py | 52 ++++++++++++++++------ rare/components/tabs/shop/wishlist.py | 6 ++- 4 files changed, 66 insertions(+), 20 deletions(-) diff --git a/rare/components/tabs/shop/game_info.py b/rare/components/tabs/shop/game_info.py index 291e02b5..5339deb5 100644 --- a/rare/components/tabs/shop/game_info.py +++ b/rare/components/tabs/shop/game_info.py @@ -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 diff --git a/rare/components/tabs/shop/shop_api_core.py b/rare/components/tabs/shop/shop_api_core.py index ddd1a54b..834db6e5 100644 --- a/rare/components/tabs/shop/shop_api_core.py +++ b/rare/components/tabs/shop/shop_api_core.py @@ -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": { diff --git a/rare/components/tabs/shop/shop_widget.py b/rare/components/tabs/shop/shop_widget.py index 1dae47af..1a1c7cce 100644 --- a/rare/components/tabs/shop/shop_widget.py +++ b/rare/components/tabs/shop/shop_widget.py @@ -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) diff --git a/rare/components/tabs/shop/wishlist.py b/rare/components/tabs/shop/wishlist.py index a1a27c94..34d64062 100644 --- a/rare/components/tabs/shop/wishlist.py +++ b/rare/components/tabs/shop/wishlist.py @@ -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"])