This commit is contained in:
kramo
2023-04-18 21:11:38 +02:00
parent bc9192e83b
commit 96a16c1adb
7 changed files with 60 additions and 57 deletions

View File

@@ -60,6 +60,10 @@ class Game(Gtk.Box):
self.win = win self.win = win
self.app = win.get_application() self.app = win.get_application()
self.update_values(data)
self.win.games[self.game_id] = self
self.set_play_label() self.set_play_label()
self.overlay.set_measure_overlay(self.play_revealer, True) self.overlay.set_measure_overlay(self.play_revealer, True)
@@ -73,25 +77,12 @@ class Game(Gtk.Box):
self.win.schema.connect("changed", self.schema_changed) self.win.schema.connect("changed", self.schema_changed)
self.update_values(data)
def update(self): def update(self):
if self.win.stack.get_visible_child() == self.win.details_view:
self.win.show_details_view(None, self.game_id)
self.win.games[self.game_id] = self
if self.get_parent(): if self.get_parent():
self.get_parent().get_parent().remove(self) self.get_parent().get_parent().remove(self)
if self.get_parent(): if self.get_parent():
self.get_parent().set_child() self.get_parent().set_child()
if self.game_id in self.win.game_covers:
self.win.game_covers[self.game_id].add_picture(self.cover)
else:
game_cover = GameCover({self.cover}, self.get_cover_path())
self.win.game_covers[self.game_id] = game_cover
self.menu_button.set_menu_model( self.menu_button.set_menu_model(
self.hidden_game_options if self.hidden else self.game_options self.hidden_game_options if self.hidden else self.game_options
) )
@@ -103,19 +94,28 @@ class Game(Gtk.Box):
"notify::visible", self.win.set_active_game, self.game_id "notify::visible", self.win.set_active_game, self.game_id
) )
if not self.removed or self.blacklisted: if self.game_id in self.win.game_covers:
self.win.game_covers[self.game_id].add_picture(self.cover)
else:
game_cover = GameCover({self.cover}, self.get_cover_path())
self.win.game_covers[self.game_id] = game_cover
if self.win.stack.get_visible_child() == self.win.details_view:
self.win.show_details_view(None, self.game_id)
if not self.removed and not self.blacklisted:
if self.hidden: if self.hidden:
self.win.hidden_library.append(self) self.win.hidden_library.append(self)
else: else:
self.win.library.append(self) self.win.library.append(self)
self.get_parent().set_focusable(False) self.get_parent().set_focusable(False)
self.win.set_library_child()
def update_values(self, data): def update_values(self, data):
for key, value in data.items(): for key, value in data.items():
setattr(self, key, value) setattr(self, key, value)
self.save()
def save(self): def save(self):
self.win.games_dir.mkdir(parents=True, exist_ok=True) self.win.games_dir.mkdir(parents=True, exist_ok=True)
@@ -140,18 +140,6 @@ class Game(Gtk.Box):
self.update() self.update()
self.win.library_bin.set_child(
self.win.scrolledwindow
if any(not game.hidden for game in self.win.games.values())
else self.win.notice_empty
)
self.win.hidden_library_bin.set_child(
self.win.hidden_scrolledwindow
if any(game.hidden for game in self.win.games.values())
else self.win.hidden_notice_empty
)
def launch(self): def launch(self):
# Generate launch arguments, either list (no shell) or a string (for shell). # Generate launch arguments, either list (no shell) or a string (for shell).
argv = ( argv = (

View File

@@ -340,7 +340,7 @@ class PreferencesWindow(Adw.PreferencesWindow):
self.toast.dismiss() self.toast.dismiss()
def remove_all_games(self, _widget): def remove_all_games(self, _widget):
for game in self.win.games: for game in self.win.games.values():
if not game.removed: if not game.removed:
self.removed_games.add(game.game_id) self.removed_games.add(game.game_id)

View File

@@ -17,7 +17,6 @@
# #
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
import json
import os import os
import shlex import shlex
import time import time
@@ -90,7 +89,7 @@ def create_details_window(win, game_id=None):
apply_button = Gtk.Button.new_with_label(_("Apply")) apply_button = Gtk.Button.new_with_label(_("Apply"))
game_cover.new_cover(win.games[game_id].get_cover_path()) game_cover.new_cover(win.games[game_id].get_cover_path())
if game_cover.get_pixbuf(): if game_cover.pixbuf:
cover_button_delete_revealer.set_reveal_child(True) cover_button_delete_revealer.set_reveal_child(True)
else: else:
window.set_title(_("Add New Game")) window.set_title(_("Add New Game"))
@@ -328,7 +327,7 @@ def create_details_window(win, game_id=None):
else: else:
Game(win, values).save() Game(win, values).save()
if not game_cover.get_pixbuf(): if not game_cover.pixbuf:
SGDBSave(win, {(game_id, values["name"])}) SGDBSave(win, {(game_id, values["name"])})
win.game_covers[game_id].pictures.remove(cover) win.game_covers[game_id].pictures.remove(cover)

View File

@@ -23,8 +23,10 @@ import json
def get_games(win): def get_games(win):
games = {} games = {}
if not win.games_dir.exists():
return games
for open_file in win.games_dir.iterdir(): for open_file in win.games_dir.iterdir():
if open_file.exists():
data = json.load(open_file.open()) data = json.load(open_file.open())
games[data["game_id"]] = data games[data["game_id"]] = data

View File

@@ -56,7 +56,7 @@ class Importer:
def save_game(self, values=None, cover_path=None): def save_game(self, values=None, cover_path=None):
if values: if values:
Game(self.win, values).save() Game(self.win, values)
if cover_path: if cover_path:
save_cover( save_cover(

View File

@@ -111,9 +111,13 @@ class SGDBSave:
_("Preferences"), _("Preferences"),
).connect("response", self.response) ).connect("response", self.response)
if not self.importer: game = self.win.games.get(result.propagate_value()[1])
game = self.win.games[result.propagate_value()[1]]
game.set_loading(-1) game.set_loading(-1)
if game:
if self.importer:
game.save()
else:
game.update() game.update()
def response(self, _widget, response): def response(self, _widget, response):

View File

@@ -115,8 +115,8 @@ class CartridgesWindow(Adw.ApplicationWindow):
self.details_view.set_measure_overlay(self.details_view_box, True) self.details_view.set_measure_overlay(self.details_view_box, True)
self.details_view.set_clip_overlay(self.details_view_box, False) self.details_view.set_clip_overlay(self.details_view_box, False)
self.library.set_filter_func(self.search_filter) self.library.set_filter_func(self.filter_func)
self.hidden_library.set_filter_func(self.search_filter) self.hidden_library.set_filter_func(self.filter_func)
self.library.set_sort_func(self.sort_func) self.library.set_sort_func(self.sort_func)
self.hidden_library.set_sort_func(self.sort_func) self.hidden_library.set_sort_func(self.sort_func)
@@ -124,6 +124,8 @@ class CartridgesWindow(Adw.ApplicationWindow):
for game in get_games(self).values(): for game in get_games(self).values():
Game(self, game).update() Game(self, game).update()
self.set_library_child()
# Connect signals # Connect signals
self.search_entry.connect("search-changed", self.search_changed, False) self.search_entry.connect("search-changed", self.search_changed, False)
self.hidden_search_entry.connect("search-changed", self.search_changed, True) self.hidden_search_entry.connect("search-changed", self.search_changed, True)
@@ -146,7 +148,27 @@ class CartridgesWindow(Adw.ApplicationWindow):
else: else:
self.library.invalidate_filter() self.library.invalidate_filter()
def search_filter(self, child): def set_library_child(self):
child, hidden_child = self.notice_empty, self.hidden_notice_empty
for game in self.games.values():
if game.removed or game.blacklisted:
continue
if game.hidden:
if game.filtered and hidden_child != self.hidden_scrolledwindow:
hidden_child = self.notice_no_results
continue
hidden_child = self.hidden_scrolledwindow
else:
if game.filtered and child != self.scrolledwindow:
child = self.notice_no_results
continue
child = self.scrolledwindow
self.library_bin.set_child(child)
self.hidden_library_bin.set_child(hidden_child)
def filter_func(self, child):
hidden = self.stack.get_visible_child() == self.hidden_library_view hidden = self.stack.get_visible_child() == self.hidden_library_view
text = ( text = (
(self.hidden_search_entry if hidden else self.search_entry) (self.hidden_search_entry if hidden else self.search_entry)
@@ -164,19 +186,7 @@ class CartridgesWindow(Adw.ApplicationWindow):
game.filtered = filtered game.filtered = filtered
(self.hidden_library_bin if hidden else self.library_bin).set_child( self.set_library_child()
(self.hidden_scrolledwindow if hidden else self.scrolledwindow)
if any(
not game.filtered
for game in self.games.values()
if not (
game.removed
or game.blacklisted
or (not game.hidden if hidden else game.hidden)
)
)
else self.notice_no_results
)
return not filtered return not filtered
@@ -223,7 +233,7 @@ class CartridgesWindow(Adw.ApplicationWindow):
self.details_view_game_cover.add_picture(self.details_view_cover) self.details_view_game_cover.add_picture(self.details_view_cover)
self.scaled_pixbuf = ( self.scaled_pixbuf = (
self.details_view_game_cover.get_pixbuf() self.details_view_game_cover.pixbuf
or self.details_view_game_cover.placeholder_pixbuf or self.details_view_game_cover.placeholder_pixbuf
).scale_simple(2, 3, GdkPixbuf.InterpType.BILINEAR) ).scale_simple(2, 3, GdkPixbuf.InterpType.BILINEAR)
self.details_view_blurred_cover.set_pixbuf(self.scaled_pixbuf) self.details_view_blurred_cover.set_pixbuf(self.scaled_pixbuf)