diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9a6af1e..594e25d 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -7,14 +7,14 @@ body: - type: markdown attributes: value: | - Thanks for taking the time to report an issue. Please search [existing issues](https://github.com/vindeckyy/OpenBoxGL/issues) first. The current release is [v0.5.0](https://github.com/vindeckyy/OpenBoxGL/releases/latest). + Thanks for taking the time to report an issue. Please search [existing issues](https://github.com/vindeckyy/OpenBoxGL/issues) first. The current release is [v0.6.0](https://github.com/vindeckyy/OpenBoxGL/releases/latest). - type: input id: version attributes: label: OpenBox version description: Release tag, AppImage version, or git commit hash - placeholder: v0.5.0 + placeholder: v0.6.0 validations: required: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 2adc973..34d0c60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,26 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), - Flatpak packages now include the diagnostic logging module. +## [0.6.0] - 2026-07-30 + +### Added + +- LaunchBox-style advanced search in the Web UI, including field terms, quoted values, status filters, and negative terms. +- Ordered manual playlists with parent grouping, notes, membership editing, and keyboard-friendly reorder controls, alongside existing filter playlists. +- Game context actions, Ctrl/Shift multi-selection, configurable status badges, richer platform/category/playlist detail panes, related-game reasons, artwork galleries, and per-game launch profile overrides. +- Backup archive listing, manifest summaries, restore actions, expanded artwork groups, and metadata fields for controller support, disc count, portable games, and broken entries. + +### Changed + +- State persistence now uses schema migrations, stable game identities with legacy aliases, last-known-good recovery, process-safe transactions, atomic writes, and corruption preservation. +- Long-running backend jobs now expose bounded state, retries, cancellation, durations, and replacement protection. Request bodies, downloads, archives, media responses, save restores, backup restores, and plugin execution use bounded and validated paths. +- Packaging uses the runtime module manifest and stricter import and artifact checks. Flatpak support documentation and release validation were refreshed. + +### Verification + +- Added focused API and launch-profile regression tests. +- Ran `./run_all_tests.sh`, Python compilation, JavaScript syntax checks, diff validation, and a Chromium smoke test covering the new search, selection, context, playlist, backup, settings, media, and detail workflows. + ## [0.5.0] - 2026-07-30 ### Added @@ -188,7 +208,8 @@ If you jumped from an older build and skipped the last two releases: - Session tracking and plugin hooks - AppImage, Flatpak manifest, and Makefile install targets -[Unreleased]: https://github.com/vindeckyy/OpenBoxGL/compare/v0.5.0...HEAD +[Unreleased]: https://github.com/vindeckyy/OpenBoxGL/compare/v0.6.0...HEAD +[0.6.0]: https://github.com/vindeckyy/OpenBoxGL/releases/tag/v0.6.0 [0.5.0]: https://github.com/vindeckyy/OpenBoxGL/releases/tag/v0.5.0 [0.4.10]: https://github.com/vindeckyy/OpenBoxGL/releases/tag/v0.4.10 [0.4.9]: https://github.com/vindeckyy/OpenBoxGL/releases/tag/v0.4.9 diff --git a/PARITY.md b/PARITY.md index 683935c..0245132 100644 --- a/PARITY.md +++ b/PARITY.md @@ -1,6 +1,6 @@ # OpenBox Parity Matrix -OpenBox tracks LaunchBox feature parity for Linux environments. For contribution and release workflow, see [CONTRIBUTING.md](CONTRIBUTING.md) and [CHANGELOG.md](CHANGELOG.md). The latest release is **v0.5.0**, with Steam Game Mode, library and AppImage reliability fixes, local diagnostic logs, Steam-import cleanup, and repaired LaunchBox artwork downloads (see the CHANGELOG). +OpenBox tracks LaunchBox feature parity for Linux environments. For contribution and release workflow, see [CONTRIBUTING.md](CONTRIBUTING.md) and [CHANGELOG.md](CHANGELOG.md). The latest release is **v0.6.0**, with LaunchBox-style search, playlists, collection details, badges, media groups, backup management, and backend reliability work (see the CHANGELOG). > **Legal disclaimer:** OpenBox is an independent open-source project and is NOT affiliated, associated, authorized, endorsed by, or in any way officially connected with LaunchBox or Unbroken Software, LLC. Reference to LaunchBox features is solely for software compatibility tracking and open-source parity comparison. @@ -22,7 +22,7 @@ Acceptance source: [LaunchBox product overview](https://www.launchbox-app.com/ab | EA, Ubisoft, and Xbox imports | done | Lutris/Heroic catalog import with EA, Ubisoft, and Xbox/Game Pass tagging; Xbox native PC packages remain unavailable on Linux | | MAME and FinalBurn full-set imports | done | DAT/XML metadata classifies and imports merged, split, and non-merged sets | | LaunchBox Games Database matching | done | Official daily database sync, local matching, and selected metadata/media downloads work | -| Media manager and image groups | done | Grid image groups, audits, bulk downloads, duplicate cleanup, region priority, and download limits work | +| Media manager and image groups | done | Grid image groups, extended artwork groups, audits, bulk downloads, duplicate cleanup, region priority, and download limits work | | Emulator profiles and per-game commands | done | Commands launch without a shell | | Emulator installation and automatic configuration | done | Install, Update All, open emulator, recommend-on-import, and dependency checks work | | Archive extraction before launch | done | ZIP uses safe built-in extraction; 7z/RAR use installed 7z | @@ -33,12 +33,12 @@ Acceptance source: [LaunchBox product overview](https://www.launchbox-app.com/ab | Save management | done | Discover, scan, retention limits, versioned backups, backup-on-close, and restore work | | RetroAchievements | done | Account, matching, progress, badges, Big Box filters, pause access, and emulator injection work | | Video, music, and screenshot playback | done | Multi-category videos, library BGM, video/BGM mix, capture, and gallery work | -| Playlists, auto-filters, and saved filters | done | Platform, view, and search rules save, apply, update, and delete | +| Playlists, auto-filters, and saved filters | done | Platform, view, search rules, ordered manual members, parent playlists, and notes save, apply, update, and delete | | Big Box controller-first navigation | done | Stage, hybrid, and CoverFlow layouts; filter/sort/RA filters; pause overlay; screensaver launch | | Steam Game Mode / gamescope guest | done | `--game-mode` opens Big Box; guest detection; Steam launches keep Input; non-Steam windows get best-effort STEAM_GAME props | | Themes and per-platform themes | done | Five stock CSS themes ship with the Web UI; import, persist, apply live, and open-folder access work | | Plugin manager and extension API | done | Local packages install and run hooks; curated community catalog is bundled | -| Backups and restore | done | Restore creates a pre-restore safety copy | +| Backups and restore | done | The web UI lists archives, shows manifests, restores selected archives, and creates a pre-restore safety copy | | Library audit and missing-file checks | done | Files, provider-aware duplicates, media, extras, saves, and emulator configuration are audited | | Linux packaging and updates | done | AppImage build, Flatpak manifest, Makefile install/uninstall, desktop entry, and verified update mechanism | | Welcome wizard and first-run setup | done | Staged setup wizard with media limits and persistent import queues | @@ -78,6 +78,11 @@ Acceptance source: [LaunchBox product overview](https://www.launchbox-app.com/ab | Big Box shutdown apps on mode switch | done | Configurable commands run when entering or leaving Big Box | | Xbox 360 and loose arcade import | done | default.xex folder scan and Hypseus/Singe loose file import | | Vita3K title resolution | done | Title IDs resolve to readable game names on import | +| Advanced search syntax | done | Field terms such as `platform:PC`, quoted values, status terms, and negative terms filter the live grid | +| Context actions and multi-selection | done | Right-click actions plus Ctrl/Shift range selection expose launch, favorite, progress, playlist, edit, and remove actions | +| Configurable status badges | done | Settings controls favorite, install, media, save, progress, storefront, achievement, rating, and hardware badges | +| Collection and related details | done | Platform, category, and playlist detail panes show stats, quick actions, rich related-game reasons, and artwork galleries | +| Per-game launch profile overrides | done | A game can select an installed emulator profile without changing the platform default | All LaunchBox Premium-equivalent workflows above are included in OpenBox without a subscription. OpenBox sets `premium_features_free: true` in settings and ships bundled media packs without a license gate. diff --git a/README.md b/README.md index 95baf67..839c32f 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@
diff --git a/SECURITY.md b/SECURITY.md index e5c6651..a9cf897 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,7 +4,8 @@ | Version | Supported | | --- | --- | -| 0.5.x | Yes | +| 0.6.x | Yes | +| 0.5.x | Best effort | | 0.4.x | Best effort | | < 0.4.0 | No | diff --git a/catalog.py b/catalog.py index 97ee254..7124f0c 100644 --- a/catalog.py +++ b/catalog.py @@ -4,7 +4,7 @@ from datetime import datetime PROGRESS = {"", "Playing", "Paused", "Beaten", "Completed", "Mastered", "Abandoned"} -MEDIA_FIELDS = ("cover", "background", "video", "music") +MEDIA_FIELDS = ("cover", "background", "clear_logo", "fanart", "banner", "icon", "box_back", "box_spine", "box_3d", "title_screen", "video", "music") def related_game_ids(games, selected, limit=8): diff --git a/index.html b/index.html index 80a4383..d8c2133 100644 --- a/index.html +++ b/index.html @@ -200,6 +200,25 @@ .primary { border:0; border-radius:4px; padding:8px 16px; background:#21aeda; color:#07131a; font-weight:800; } .toast { position:fixed; z-index:20; right:18px; bottom:18px; max-width:360px; padding:11px 14px; border:1px solid #495169; border-radius:6px; background:#202638; color:#fff; box-shadow:0 12px 30px #0009; opacity:0; transform:translateY(8px); pointer-events:none; transition:.2s; } .toast.show { opacity:1; transform:none; } + .context-menu { position:fixed; z-index:60; width:min(280px,calc(100vw - 20px)); padding:6px; border:1px solid #4a536b; border-radius:7px; background:#171d2c; box-shadow:0 18px 50px #000c; } + .context-menu[hidden] { display:none; } + .context-menu button,.context-menu select { width:100%; margin:2px 0; } + .context-menu button { text-align:left; } + .badge-row { display:flex; flex-wrap:wrap; gap:4px; min-height:18px; } + .badge { display:inline-flex; align-items:center; gap:3px; padding:2px 5px; border:1px solid #3e4961; border-radius:4px; color:#c8d1e2; background:#20283a; font-size:9px; line-height:1.2; } + .badge.favorite,.badge.progress { color:#f2c34a; } + .badge.danger { color:#ff9d9d; border-color:#78404b; } + .collection-summary { display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin-top:12px; } + .collection-stat { padding:9px; border:1px solid #30374a; border-radius:6px; background:#1c2131; } + .collection-stat small,.collection-stat strong { display:block; } + .collection-stat small { color:#7f899f; font-size:9px; text-transform:uppercase; } + .collection-stat strong { margin-top:2px; font-size:16px; } + .playlist-manager-list,.backup-list { display:grid; gap:8px; max-height:55vh; overflow:auto; } + .playlist-manager-item,.backup-item { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:10px; align-items:center; padding:10px; border:1px solid #30374a; border-radius:7px; background:#1c2131; } + .playlist-manager-item small,.backup-item small { display:block; color:#7f899f; } + .playlist-manager-actions { display:flex; flex-wrap:wrap; gap:5px; justify-content:flex-end; } + .member-list { display:grid; gap:4px; margin-top:7px; } + .member-row { display:grid; grid-template-columns:minmax(0,1fr) auto auto; gap:4px; align-items:center; } .lifecycle { position:fixed; z-index:40; inset:0; display:grid; place-items:center; text-align:center; background:radial-gradient(circle at 50% 42%,var(--lifecycle-bg),#080b12 70%); } .lifecycle[hidden] { display:none; } .lifecycle small { color:var(--lifecycle-kicker); font-size:12px; font-weight:800; letter-spacing:.2em; text-transform:uppercase; } @@ -318,6 +337,7 @@ + @@ -351,7 +371,7 @@0 games