feat: add Library 2.0A organization and search - #10
Draft
Ayerdi wants to merge 52 commits into
Draft
Conversation
Ayerdi
force-pushed
the
feat/library-2a
branch
from
September 1, 2026 20:41
bdbfb80 to
63cfd9e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implement the first post-foundation product slice from
docs/ROADMAP.md: Library 2.0A.The change keeps tracking identity small and adds separate user-owned library state plus lightweight WPF filtering and an explicit organization workflow. The design was also reviewed against the current
Ayerdi/gestor-juegosschema/API so a future Gestor-backed catalogue can remain an optional adapter rather than becoming a GameHours runtime dependency.No online metadata, tags, fuzzy-search dependency, alternate game scanner or Gestor network request is introduced.
User-facing behavior
g1r->Gothic 1 Remake);Organizar bibliotecaview with visible per-game status, favorite and hide/show actions;Pendiente,Jugando,Pausado,Completado,Abandonado) as a compact chip beside the game title;Sin estadostays visually empty;Jugandois a user library/progress state and remains distinct fromEn ejecución, which reflects actual live process tracking.Architecture
TrackedGameremains unchanged.LibraryGamePreferences/LibraryCompletionStatusdomain types own user organization state.game_library_preferenceswith a game FK and cascade cleanup.SqliteLibraryGamePreferencesRepositorydeletes rows that return to the default state rather than storing empty preferences.ICollectionView: one custom sort plus one filter. No duplicate library data source or search index.LibraryToolbarandLibraryOrganizerViewkeep library interaction out of the tracking/domain model.LibraryGamePreferences; it is not copied intoTrackedGameorGameRowViewModel. A small WPF binding invalidation signal makes the projection re-evaluate after load/write.Optional external catalogue compatibility
game_external_identitiesfor provider-scoped correlation such assteam:3946950;ExternalId, andGameExternalIdentityProvidersprovides the neutral mapping boundary for a future backfill/adapter;catalogo_juegos.steam_id;catalogo_juego_idremains Gestor-local adapter state and never replaces the GameHours UUID;favoritomaps naturally to GameHours favorite;completado_100is not treated as the same concept as GameHoursCompletedstatus;tiempo_jugadoor Steam snapshots.The reviewed compatibility and authority rules are documented under
integration/gestor-juegos/.Research applied
IgnoreCase | IgnoreNonSpacerather than a new dependency.Ayerdi/gestor-juegosdatabase/API was reviewed directly. Its separation between globalcatalogo_juegosand user-ownedmis_juegossupports keeping GameHours catalogue identity and personal preferences separate as well.No third-party source code was copied or adapted in this PR.
Tests added/updated
Sin estadopresentation;Scope deliberately deferred
Library 2.0C);Validation
Validated on head
63cfd9e7f65967d96f600e3bd398317bd328b278against currentmain1a37362a53594d4bed2603f43e7c3e3693e2cc46:GameHours.Tests: 161/161;GameHours.Windows.Tests: 292/292;win-x64desktop publish smoke: success;Velopack package/update-chain and install/uninstall recovery smokes remain intentionally skipped while the PR is draft. The PR is ready to leave draft once GitHub accepts the state transition.