From 4331b0d8c01cafe8ff4ac0d0bb7dfb4043f70d6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= Date: Sat, 2 Nov 2024 19:16:32 +0100 Subject: [PATCH] Clear temporary files after conversion convert_cover() now always return a temporary file, which needs to be removed after the cover is saved. Without this, these files would remain on the system until reboot. Also remove the downloaded temporary files after save. --- cartridges/details_dialog.py | 23 +++++++++++++++++----- cartridges/store/managers/cover_manager.py | 10 +++++++--- cartridges/utils/steamgriddb.py | 6 +++++- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/cartridges/details_dialog.py b/cartridges/details_dialog.py index 0677199..f2bf5cc 100644 --- a/cartridges/details_dialog.py +++ b/cartridges/details_dialog.py @@ -68,7 +68,8 @@ class DetailsDialog(Adw.Dialog): # Make it so only one dialog can be open at a time self.__class__.is_open = True - self.connect("closed", lambda *_: self.set_is_open(False)) + self.tmp_cover_path = None + self.connect("closed", self.on_closed) self.game: Optional[Game] = game self.game_cover: GameCover = GameCover({self.cover}) @@ -160,11 +161,20 @@ class DetailsDialog(Adw.Dialog): self.set_focus(self.name) def delete_pixbuf(self, *_args: Any) -> None: + if self.tmp_cover_path: + self.tmp_cover_path.unlink(missing_ok=True) + self.game_cover.new_cover() self.cover_button_delete_revealer.set_reveal_child(False) self.cover_changed = True + def on_closed(self, *args): + if self.tmp_cover_path: + self.tmp_cover_path.unlink(missing_ok=True) + + self.set_is_open(False) + def apply_preferences(self, *_args: Any) -> None: final_name = self.name.get_text() final_developer = self.developer.get_text() @@ -296,17 +306,20 @@ class DetailsDialog(Adw.Dialog): return def thread_func() -> None: - new_path = None + is_animated = False try: with Image.open(path) as image: if getattr(image, "is_animated", False): - new_path = convert_cover(path) + is_animated = True except (UnidentifiedImageError, OSError, ValueError): pass - if new_path: - self.game_cover.new_cover(new_path) + if is_animated: + if self.tmp_cover_path: + self.tmp_cover_path.unlink(missing_ok=True) + self.tmp_cover_path = convert_cover(path) + self.game_cover.new_cover(self.tmp_cover_path) else: self.game_cover.new_cover( pixbuf=shared.store.managers[CoverManager].composite_cover( diff --git a/cartridges/store/managers/cover_manager.py b/cartridges/store/managers/cover_manager.py index 28b4e1b..5cf2f25 100644 --- a/cartridges/store/managers/cover_manager.py +++ b/cartridges/store/managers/cover_manager.py @@ -133,12 +133,13 @@ class CoverManager(Manager): str(image_path) ) except GLib.Error: - new_path = convert_cover(image_path, resize=False) + tmp_cover_path = convert_cover(image_path, resize=False) - if new_path: + if tmp_cover_path: source = GdkPixbuf.Pixbuf.new_from_file( - str(new_path) + str(tmp_cover_path) ) + tmp_cover_path.unlink(missing_ok=True) else: return None @@ -205,3 +206,6 @@ class CoverManager(Manager): game.game_id, pixbuf=self.composite_cover(image_path, **composite_kwargs), ) + + if key == "online_cover_url": + image_path.unlink(missing_ok=True) diff --git a/cartridges/utils/steamgriddb.py b/cartridges/utils/steamgriddb.py index d4d8aff..e1cd6f9 100644 --- a/cartridges/utils/steamgriddb.py +++ b/cartridges/utils/steamgriddb.py @@ -134,7 +134,11 @@ class SgdbHelper: tmp_file = Gio.File.new_tmp()[0] tmp_file_path = tmp_file.get_path() Path(tmp_file_path).write_bytes(response.content) - save_cover(game.game_id, convert_cover(tmp_file_path)) + tmp_cover_path = convert_cover(tmp_file_path) + if tmp_cover_path: + save_cover(game.game_id, tmp_cover_path) + tmp_cover_path.unlink(missing_ok=True) + tmp_file_path.unlink(missing_ok=True) except SgdbAuthError as error: # Let caller handle auth errors raise error