Fix some memory leaks and some other errors
This commit is contained in:
parent
152c1a326d
commit
c07992b982
|
@ -3,11 +3,8 @@
|
|||
import os
|
||||
import pathlib
|
||||
import sys
|
||||
import traceback
|
||||
from argparse import ArgumentParser
|
||||
|
||||
from PyQt5.QtWidgets import QApplication, QMessageBox
|
||||
|
||||
from rare import __version__, data_dir
|
||||
from rare.utils import singleton
|
||||
|
||||
|
|
|
@ -178,6 +178,6 @@ def start(args):
|
|||
exit_code = app.exec_()
|
||||
# if not restart
|
||||
# restart app
|
||||
app.deleteLater()
|
||||
del app
|
||||
if exit_code != -133742:
|
||||
break
|
||||
|
|
|
@ -71,8 +71,9 @@ class DlQueueWidget(QGroupBox):
|
|||
def update_queue(self, dl_queue: list):
|
||||
logger.info("Update Queue " + ", ".join(i.download.game.app_title for i in dl_queue))
|
||||
self.dl_queue = dl_queue
|
||||
QWidget().setLayout(self.layout())
|
||||
self.setLayout(QVBoxLayout())
|
||||
|
||||
for item in (self.layout().itemAt(i) for i in range(self.layout().count())):
|
||||
item.widget().deleteLater()
|
||||
|
||||
if len(dl_queue) == 0:
|
||||
self.layout().addWidget(QLabel(self.tr("No downloads in queue")))
|
||||
|
@ -88,8 +89,6 @@ class DlQueueWidget(QGroupBox):
|
|||
if index + 1 == len(dl_queue):
|
||||
widget.move_down_buttton.setDisabled(True)
|
||||
|
||||
self.setLayout(self.layout())
|
||||
|
||||
def remove(self, app_name):
|
||||
for index, i in enumerate(self.dl_queue):
|
||||
if i.download.game.app_name == app_name:
|
||||
|
|
|
@ -289,7 +289,10 @@ class GameList(QStackedWidget):
|
|||
# new installed
|
||||
elif self.core.is_installed(widgets[0].game.app_name) and not isinstance(widgets[0],
|
||||
BaseInstalledWidget):
|
||||
self.widgets.pop(widgets[0].game.app_name)
|
||||
name = widgets[0].game.app_name
|
||||
self.widgets[name][0].deleteLater()
|
||||
self.widgets[name][1].deleteLater()
|
||||
self.widgets.pop(name)
|
||||
|
||||
# QWidget().setLayout(self.icon_layout)
|
||||
|
||||
|
@ -304,6 +307,9 @@ class GameList(QStackedWidget):
|
|||
self.list_layout.removeWidget(widgets[1])
|
||||
self.icon_layout.removeWidget(widgets[0])
|
||||
|
||||
widgets[0].deleteLater()
|
||||
widgets[1].deleteLater()
|
||||
|
||||
self.widgets.pop(app_name)
|
||||
|
||||
game = self.core.get_game(app_name, True)
|
||||
|
@ -331,6 +337,8 @@ class GameList(QStackedWidget):
|
|||
self.icon_layout.removeWidget(self.widgets[app_name][0])
|
||||
self.list_layout.removeWidget(self.widgets[app_name][1])
|
||||
|
||||
self.widgets[name][0].deleteLater()
|
||||
self.widgets[name][1].deleteLater()
|
||||
self.widgets.pop(name)
|
||||
|
||||
igame = self.core.get_installed_game(name)
|
||||
|
@ -340,6 +348,9 @@ class GameList(QStackedWidget):
|
|||
self.icon_layout.removeWidget(self.widgets[app_name][0])
|
||||
self.list_layout.removeWidget(self.widgets[app_name][1])
|
||||
|
||||
self.widgets[name][0].deleteLater()
|
||||
self.widgets[name][1].deleteLater()
|
||||
|
||||
self.widgets.pop(name)
|
||||
|
||||
game = self.core.get_game(name, True)
|
||||
|
@ -379,15 +390,15 @@ class GameList(QStackedWidget):
|
|||
# get Uninstalled games
|
||||
games, self.dlcs = self.core.get_game_and_dlc_list()
|
||||
for game in sorted(games, key=lambda x: x.app_title):
|
||||
if not game.app_name in installed_names:
|
||||
if game.app_name not in installed_names:
|
||||
self.uninstalled_names.append(game)
|
||||
for game in self.uninstalled_names:
|
||||
i_widget, list_widget = self.widgets[game.app_name]
|
||||
icon_layout.addWidget(i_widget)
|
||||
list_layout.addWidget(list_widget)
|
||||
|
||||
QWidget().setLayout(self.icon_layout)
|
||||
QWidget().setLayout(self.list_layout)
|
||||
self.icon_layout.deleteLater()
|
||||
self.list_layout.deleteLater()
|
||||
|
||||
self.icon_widget = QWidget()
|
||||
self.list_widget = QWidget()
|
||||
|
|
|
@ -3,7 +3,7 @@ import webbrowser
|
|||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtGui import QPixmap, QFont
|
||||
from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QHBoxLayout
|
||||
from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QHBoxLayout, QSpacerItem, QGroupBox
|
||||
from qtawesome import icon
|
||||
|
||||
from rare.components.tabs.shop.shop_models import ShopGame
|
||||
|
@ -175,9 +175,15 @@ class ShopGameInfo(QWidget, Ui_shop_info):
|
|||
self.tags.setText(", ".join(self.game.tags))
|
||||
|
||||
# clear Layout
|
||||
QWidget().setLayout(self.social_link_gb.layout())
|
||||
for widget in (self.social_link_gb.layout().itemAt(i) for i in range(self.social_link_gb.layout().count())):
|
||||
if not isinstance(widget, QSpacerItem):
|
||||
widget.widget().deleteLater()
|
||||
self.social_link_gb.deleteLater()
|
||||
self.social_link_gb = QGroupBox(self.tr("Social Links"))
|
||||
self.social_link_gb.setLayout(QHBoxLayout())
|
||||
|
||||
self.layout().insertWidget(3, self.social_link_gb)
|
||||
|
||||
self.social_link_gb.layout().addStretch(1)
|
||||
link_count = 0
|
||||
for name, url in self.game.links:
|
||||
|
|
|
@ -60,7 +60,11 @@ class ShopApiCore(QObject):
|
|||
self.manager.post(graphql_url, payload, lambda data: self._handle_search(data, handle_func))
|
||||
|
||||
def _handle_search(self, data, handle_func):
|
||||
try:
|
||||
handle_func(data["data"]["Catalog"]["searchStore"]["elements"])
|
||||
except KeyError as e:
|
||||
logger.error(str(e))
|
||||
handle_func([])
|
||||
|
||||
def browse_games(self, browse_model: BrowseModel, handle_func):
|
||||
if self.browse_active:
|
||||
|
@ -77,7 +81,11 @@ class ShopApiCore(QObject):
|
|||
def _handle_browse_games(self, data, handle_func):
|
||||
self.browse_active = False
|
||||
if not self.next_browse_request:
|
||||
try:
|
||||
handle_func(data["data"]["Catalog"]["searchStore"]["elements"])
|
||||
except KeyError as e:
|
||||
logger.error(str(e))
|
||||
handle_func([])
|
||||
else:
|
||||
self.browse_games(*self.next_browse_request)
|
||||
self.next_browse_request = tuple(())
|
||||
|
|
|
@ -80,9 +80,10 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
|
|||
self.api_core.get_wishlist(self.add_wishlist_items)
|
||||
|
||||
def add_wishlist_items(self, wishlist):
|
||||
QWidget().setLayout(self.discount_widget.layout())
|
||||
|
||||
self.discount_widget.setLayout(FlowLayout())
|
||||
for item in (self.discount_widget.layout().itemAt(i) for i in range(self.discount_widget.layout().count())):
|
||||
item.widget().deleteLater()
|
||||
|
||||
discounts = 0
|
||||
for game in wishlist:
|
||||
if not game:
|
||||
|
@ -232,7 +233,12 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
|
|||
self.api_core.browse_games(browse_model, self.show_games)
|
||||
|
||||
def show_games(self, data):
|
||||
for child in self.game_widget.layout().children():
|
||||
child.deleteLater()
|
||||
del child
|
||||
|
||||
QWidget().setLayout(self.game_widget.layout())
|
||||
|
||||
if data:
|
||||
self.game_widget.setLayout(FlowLayout())
|
||||
|
||||
|
|
|
@ -26,6 +26,8 @@ class Wishlist(QStackedWidget, Ui_Wishlist):
|
|||
self.reload_button.clicked.connect(self.update_wishlist)
|
||||
self.reload_button.setIcon(icon("fa.refresh", color="white"))
|
||||
|
||||
self.reverse.stateChanged.connect(lambda: self.set_wishlist(sort=self.sort_cb.currentIndex()))
|
||||
|
||||
def update_wishlist(self):
|
||||
self.setCurrentIndex(1)
|
||||
self.api_core.get_wishlist(self.set_wishlist)
|
||||
|
@ -54,24 +56,26 @@ class Wishlist(QStackedWidget, Ui_Wishlist):
|
|||
else:
|
||||
self.no_games_label.setVisible(False)
|
||||
|
||||
def set_wishlist(self, wishlist, sort=0):
|
||||
def set_wishlist(self, wishlist=None, sort=0):
|
||||
if wishlist is not None:
|
||||
self.wishlist = wishlist
|
||||
|
||||
for i in self.widgets:
|
||||
i.setParent(None)
|
||||
del i
|
||||
|
||||
if sort == 0:
|
||||
sorted_list = sorted(wishlist, key=lambda x: x["offer"]["title"])
|
||||
sorted_list = sorted(self.wishlist, key=lambda x: x["offer"]["title"])
|
||||
elif sort == 1:
|
||||
sorted_list = sorted(wishlist, key=lambda x: x["offer"]['price']['totalPrice']['fmtPrice']['discountPrice'])
|
||||
sorted_list = sorted(self.wishlist, key=lambda x: x["offer"]['price']['totalPrice']['fmtPrice']['discountPrice'])
|
||||
elif sort == 2:
|
||||
sorted_list = sorted(wishlist, key=lambda x: x["offer"]["seller"]["name"])
|
||||
sorted_list = sorted(self.wishlist, key=lambda x: x["offer"]["seller"]["name"])
|
||||
elif sort == 3:
|
||||
sorted_list = sorted(wishlist, reverse=True, key=lambda x: 1 - (
|
||||
sorted_list = sorted(self.wishlist, reverse=True, key=lambda x: 1 - (
|
||||
x["offer"]["price"]["totalPrice"]["discountPrice"] / x["offer"]["price"]["totalPrice"][
|
||||
"originalPrice"]))
|
||||
else:
|
||||
sorted_list = wishlist
|
||||
sorted_list = self.wishlist
|
||||
self.widgets.clear()
|
||||
|
||||
if len(sorted_list) == 0:
|
||||
|
@ -79,6 +83,9 @@ class Wishlist(QStackedWidget, Ui_Wishlist):
|
|||
else:
|
||||
self.no_games_label.setVisible(False)
|
||||
|
||||
if self.reverse.isChecked():
|
||||
sorted_list.reverse()
|
||||
|
||||
for game in sorted_list:
|
||||
w = WishlistWidget(game["offer"])
|
||||
self.widgets.append(w)
|
||||
|
|
|
@ -50,6 +50,9 @@ class Ui_Wishlist(object):
|
|||
self.sort_cb.addItem("")
|
||||
self.sort_cb.addItem("")
|
||||
self.horizontalLayout.addWidget(self.sort_cb)
|
||||
self.reverse = QtWidgets.QCheckBox(self.scroll_widget)
|
||||
self.reverse.setObjectName("reverse")
|
||||
self.horizontalLayout.addWidget(self.reverse)
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem)
|
||||
self.filter_label = QtWidgets.QLabel(self.scroll_widget)
|
||||
|
@ -96,6 +99,7 @@ class Ui_Wishlist(object):
|
|||
self.sort_cb.setItemText(1, _translate("Wishlist", "Price"))
|
||||
self.sort_cb.setItemText(2, _translate("Wishlist", "Developer"))
|
||||
self.sort_cb.setItemText(3, _translate("Wishlist", "Discount"))
|
||||
self.reverse.setText(_translate("Wishlist", "Reverse"))
|
||||
self.filter_label.setText(_translate("Wishlist", "Filter:"))
|
||||
self.filter_cb.setItemText(0, _translate("Wishlist", "None"))
|
||||
self.filter_cb.setItemText(1, _translate("Wishlist", "Discount"))
|
||||
|
|
|
@ -81,6 +81,13 @@
|
|||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="reverse">
|
||||
<property name="text">
|
||||
<string>Reverse</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
|
|
Loading…
Reference in a new issue