1
0
Fork 0
mirror of synced 2024-06-09 14:14:41 +12:00

Fix some memory leaks and some other errors

This commit is contained in:
Dummerle 2021-09-12 23:28:54 +02:00
parent 152c1a326d
commit c07992b982
10 changed files with 245 additions and 200 deletions

View file

@ -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

View file

@ -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

View file

@ -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:

View file

@ -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()

View file

@ -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:

View file

@ -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):
handle_func(data["data"]["Catalog"]["searchStore"]["elements"])
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:
handle_func(data["data"]["Catalog"]["searchStore"]["elements"])
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(())

View file

@ -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())

View file

@ -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):
self.wishlist = wishlist
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)

View file

@ -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"))

View file

@ -1,178 +1,185 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Wishlist</class>
<widget class="QStackedWidget" name="Wishlist">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>736</width>
<height>398</height>
</rect>
</property>
<property name="windowTitle">
<string>StackedWidget</string>
</property>
<widget class="QWidget" name="page">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QScrollArea" name="scroll_area">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scroll_widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>716</width>
<height>378</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="title_label">
<property name="font">
<font>
<pointsize>15</pointsize>
</font>
</property>
<property name="text">
<string>Wishlist</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="sort_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Sort by</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="sort_cb">
<item>
<property name="text">
<string>Name</string>
</property>
</item>
<item>
<property name="text">
<string>Price</string>
</property>
</item>
<item>
<property name="text">
<string>Developer</string>
</property>
</item>
<item>
<property name="text">
<string>Discount</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="filter_label">
<property name="text">
<string>Filter:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="filter_cb">
<item>
<property name="text">
<string>None</string>
</property>
</item>
<item>
<property name="text">
<string>Discount</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="reload_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="list_layout"/>
</item>
<item>
<widget class="QLabel" name="no_games_label">
<property name="text">
<string>No games matching your filter</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>379</width>
<height>218</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
<class>Wishlist</class>
<widget class="QStackedWidget" name="Wishlist">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>736</width>
<height>398</height>
</rect>
</property>
<property name="windowTitle">
<string>StackedWidget</string>
</property>
<widget class="QWidget" name="page">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QScrollArea" name="scroll_area">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scroll_widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>716</width>
<height>378</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="title_label">
<property name="font">
<font>
<pointsize>15</pointsize>
</font>
</property>
<property name="text">
<string>Wishlist</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="sort_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Sort by</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="sort_cb">
<item>
<property name="text">
<string>Name</string>
</property>
</item>
<item>
<property name="text">
<string>Price</string>
</property>
</item>
<item>
<property name="text">
<string>Developer</string>
</property>
</item>
<item>
<property name="text">
<string>Discount</string>
</property>
</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">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="filter_label">
<property name="text">
<string>Filter:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="filter_cb">
<item>
<property name="text">
<string>None</string>
</property>
</item>
<item>
<property name="text">
<string>Discount</string>
</property>
</item>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="reload_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="list_layout"/>
</item>
<item>
<widget class="QLabel" name="no_games_label">
<property name="text">
<string>No games matching your filter</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>379</width>
<height>218</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>