Remove animated covers properly

This commit is contained in:
kramo
2023-04-11 19:03:16 +02:00
parent 1d630722de
commit 984249c05b
2 changed files with 22 additions and 43 deletions

View File

@@ -53,12 +53,12 @@ class GameCover:
self.pixbuf = pixbuf self.pixbuf = pixbuf
if path: if path:
self.path = path
if str(path).rsplit(".", maxsplit=1)[-1] == "gif": if str(path).rsplit(".", maxsplit=1)[-1] == "gif":
self.path = path task = Gio.Task.new()
task = Gio.Task.new(None, None, None)
task.run_in_thread(self.create_func(self.path)) task.run_in_thread(self.create_func(self.path))
else: else:
self.path = path
self.pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale( self.pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(
str(path), 200, 300, False str(path), 200, 300, False
) )
@@ -76,7 +76,10 @@ class GameCover:
return self.path if self.animation else None return self.path if self.animation else None
def set_pixbuf(self, pixbuf): def set_pixbuf(self, pixbuf):
self.picture.set_pixbuf(pixbuf) if self.picture.is_visible():
self.picture.set_pixbuf(pixbuf)
else:
self.animation = None
def update_animation(self, data): def update_animation(self, data):
if self.animation == data[1]: if self.animation == data[1]:

View File

@@ -351,75 +351,51 @@ class PreferencesWindow(Adw.PreferencesWindow):
self.file_chooser.select_folder(self.parent_widget, None, function, None) self.file_chooser.select_folder(self.parent_widget, None, function, None)
def undo_remove_all(self, _widget, _unused): def undo_remove_all(self, _widget, _unused):
covers_dir = self.parent_widget.data_dir / "cartridges" / "covers"
deleted_covers_dir = ( deleted_covers_dir = (
self.parent_widget.cache_dir / "cartridges" / "deleted_covers" self.parent_widget.cache_dir / "cartridges" / "deleted_covers"
) )
deleted_animated_covers_dir = (
self.parent_widget.cache_dir / "cartridges" / "deleted_animated_covers"
)
for game_id in self.removed_games: for game_id in self.removed_games:
data = get_games(self.parent_widget, [game_id])[game_id] data = get_games(self.parent_widget, [game_id])[game_id]
if "removed" in data: if "removed" in data:
data.pop("removed") data.pop("removed")
save_game(self.parent_widget, data) save_game(self.parent_widget, data)
if (deleted_covers_dir / f"{game_id}.tiff").is_file():
move( cover_path = deleted_covers_dir / f"{game_id}.tiff"
deleted_covers_dir / f"{game_id}.tiff", animated_cover_path = deleted_covers_dir / f"{game_id}.gif"
self.parent_widget.data_dir
/ "cartridges" if cover_path.is_file():
/ "covers" move(cover_path, covers_dir / f"{game_id}.tiff")
/ f"{game_id}.tiff", elif animated_cover_path.is_file():
) move(animated_cover_path, covers_dir / f"{game_id}.gif")
if (deleted_animated_covers_dir / f"{game_id}.gif").is_file():
move(
deleted_animated_covers_dir / f"{game_id}.gif",
self.parent_widget.data_dir
/ "cartridges"
/ "animated_covers"
/ f"{game_id}.gif",
)
self.parent_widget.update_games(self.removed_games) self.parent_widget.update_games(self.removed_games)
self.removed_games = [] self.removed_games = []
self.toast.dismiss() self.toast.dismiss()
def remove_all_games(self, _widget): def remove_all_games(self, _widget):
covers_dir = self.parent_widget.data_dir / "cartridges" / "covers"
deleted_covers_dir = ( deleted_covers_dir = (
self.parent_widget.cache_dir / "cartridges" / "deleted_covers" self.parent_widget.cache_dir / "cartridges" / "deleted_covers"
) )
deleted_covers_dir.mkdir(parents=True, exist_ok=True) deleted_covers_dir.mkdir(parents=True, exist_ok=True)
deleted_animated_covers_dir = (
self.parent_widget.cache_dir / "cartridges" / "deleted_animated_covers"
)
deleted_animated_covers_dir.mkdir(parents=True, exist_ok=True)
for game in get_games(self.parent_widget).values(): for game in get_games(self.parent_widget).values():
if "removed" not in game: if "removed" not in game:
self.removed_games.append(game["game_id"]) self.removed_games.append(game["game_id"])
game["removed"] = True game["removed"] = True
save_game(self.parent_widget, game) save_game(self.parent_widget, game)
cover_path = ( cover_path = covers_dir / f'{game["game_id"]}.tiff'
self.parent_widget.data_dir animated_cover_path = covers_dir / f'{game["game_id"]}.gif'
/ "cartridges"
/ "covers"
/ f'{game["game_id"]}.tiff'
)
animated_cover_path = (
self.parent_widget.data_dir
/ "cartridges"
/ "animated_covers"
/ f'{game["game_id"]}.gif'
)
if cover_path.is_file(): if cover_path.is_file():
move(cover_path, deleted_covers_dir / f'{game["game_id"]}.tiff') move(cover_path, deleted_covers_dir / f'{game["game_id"]}.tiff')
if animated_cover_path.is_file(): elif animated_cover_path.is_file():
move( move(
animated_cover_path, animated_cover_path,
deleted_animated_covers_dir / f'{game["game_id"]}.gif', deleted_covers_dir / f'{game["game_id"]}.gif',
) )
self.parent_widget.update_games(self.parent_widget.games) self.parent_widget.update_games(self.parent_widget.games)