diff --git a/cartridges/__init__.py b/cartridges/__init__.py index 2ef55ab..4d1bb93 100644 --- a/cartridges/__init__.py +++ b/cartridges/__init__.py @@ -24,6 +24,7 @@ from gi.repository import Gio, GLib from .config import APP_ID, LOCALEDIR, PKGDATADIR DATA_DIR = Path(GLib.get_user_data_dir(), "cartridges") +settings = Gio.Settings.new(APP_ID) state_settings = Gio.Settings.new(f"{APP_ID}.State") _RESOURCES = ("data", "icons", "ui") diff --git a/cartridges/application.py b/cartridges/application.py index a5c4154..b896c69 100644 --- a/cartridges/application.py +++ b/cartridges/application.py @@ -8,7 +8,7 @@ from typing import override from gi.repository import Adw -from cartridges import games +from cartridges import collections, games from cartridges.games import Game from cartridges.sources import Source, steam @@ -31,6 +31,7 @@ class Application(Adw.Application): saved = tuple(games.load()) new = self.import_games(steam, skip_ids={g.game_id for g in saved}) games.model.splice(0, 0, (*saved, *new)) + collections.load() @staticmethod def import_games(*sources: Source, skip_ids: Iterable[str]) -> Generator[Game]: diff --git a/cartridges/collections.py b/cartridges/collections.py index 5564106..da3a6f8 100644 --- a/cartridges/collections.py +++ b/cartridges/collections.py @@ -1,10 +1,13 @@ # SPDX-License-Identifier: GPL-3.0-or-later # SPDX-FileCopyrightText: Copyright 2025 Jamie Gravendeel +from collections.abc import Generator from typing import Any from gi.repository import Gio, GObject +from cartridges import settings + class Collection(GObject.Object): """Collection data class.""" @@ -31,4 +34,24 @@ class Collection(GObject.Object): ) +def _get_collections() -> Generator[Collection]: + for data in settings.get_value("collections").unpack(): + if data.get("removed"): + continue + + collection = Collection() + for prop, value in data.items(): + try: + collection.set_property(prop, value) + except TypeError: + continue + + yield collection + + +def load(): + """Load collections from GSettings.""" + model.splice(0, 0, tuple(_get_collections())) + + model = Gio.ListStore.new(Collection) diff --git a/data/page.kramo.Cartridges.gschema.xml.in b/data/page.kramo.Cartridges.gschema.xml.in index 84517fb..97bf8cb 100644 --- a/data/page.kramo.Cartridges.gschema.xml.in +++ b/data/page.kramo.Cartridges.gschema.xml.in @@ -1,6 +1,9 @@ + + [] +