You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+49Lines changed: 49 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,54 @@
1
1
# Changelog
2
2
3
+
## [0.7.0] — 2026-03-18
4
+
5
+
### Fixed
6
+
-**Tiny settings labels** — all `text-[10px]` instances in Settings replaced with `text-xs` for readable, consistent label sizing throughout the settings page
7
+
-**Invalid platform/status saved silently** — `update_game` now validates `platform` (must be `steam`, `epic`, `gog`, or `custom`) and `status` (must be `none`, `backlog`, `playing`, `completed`, `dropped`, or `on_hold`) and returns a descriptive error instead of persisting garbage values
8
+
-**Import library accepts bad data** — `import_library` now validates each game before inserting: skips entries with empty or >255 char names, ratings outside 0–10, and unrecognised platform strings
9
+
-**Launcher threads run forever** — background process-polling threads for Steam/Epic/GOG/custom now have a hard 86 400-second (24-hour) cap; previously a game that never launched would leave a thread running indefinitely
10
+
-**Batch status dropdown invisible on dark background** — the floating `BatchActionBar` status select now forces a dark background (`bg-[#1a1825]`) with matching dark option elements so the text is readable on all platforms
11
+
-**Batch rating input shows number spinners** — the rating field in the batch action bar no longer renders browser-native up/down spinners; uses CSS to suppress them on all engines
12
+
-**Batch rating not clamped** — entering a value outside 1–10 in the batch rating field is now rejected on every keystroke; the input clamps to `[1, 10]` immediately
13
+
-**Export missing sessions and notes** — `export_library` previously only exported games; the JSON export now uses a v2 `FullExport` envelope (`{ version, games, sessions, notes }`) so all play history and notes are preserved; `import_library` detects v1 (plain array) vs v2 automatically and restores sessions and notes, skipping any whose `game_id` no longer exists
14
+
-**Playtime not recorded for short sessions** — three root causes fixed: GOG/custom process polling interval reduced from 30 s to 5 s; Steam/Epic `game_start` timer now begins only after the target PID is found (not at launch time, which inflated playtime by up to 3 minutes); sessions ≥ 30 seconds are now saved (previous threshold was > 0 minutes, silently dropping any session under 1 minute)
15
+
-**Game card action buttons invisible on light covers** — overlay buttons changed from `bg-black/40` to `bg-black/70` with an explicit `border border-white/10 shadow-lg`, ensuring they are always legible regardless of cover brightness
16
+
-**Fire icon appears squished** — `FireIcon` completely redrawn as a proper three-layer SVG flame; size on game cards raised from 12 px to 18 px, and on list rows from 10 px to 15 px
17
+
-**Spin wheel inner hub dominates the empty wheel** — removed the large dark center circle entirely; pie slices now extend from the exact center point, giving the wheel a clean look even with a single entry
18
+
-**Spin wheel empty state spinner icon** — removed the decorative rotating icon from the empty state overlay; the empty state now shows text only
19
+
-**Spin winner card pushes "Spin the Wheel" button upward** — the right panel is now split into a fixed top section (wheel + button, `shrink-0`) and a separate scrollable bottom section (winner card + history); the button never moves regardless of how much content appears below it
20
+
-**Directory traversal in cover file copy** — `set_game_cover` now rejects symlinks (via `symlink_metadata`), validates the file extension against an allowlist (`jpg`, `jpeg`, `png`, `webp`), and checks magic bytes before copying; previously any file path including sensitive system files could be copied into the app data directory
21
+
-**N+1 query pattern in scanner** — Steam, Epic, and GOG scan loops previously fired one `SELECT` per discovered game to check for duplicates; each scanner now bulk-fetches all existing IDs into a `HashMap`/`HashSet` before the loop and does in-memory lookups, reducing scan overhead from O(n) queries to a single query per platform
22
+
-**Playtime chart renders as a solid block** — the "Last 12 Weeks" chart used `preserveAspectRatio="none"` on its SVG, which stretched all bars to fill the full container width and merged them into an indistinguishable block; replaced with a div-based flexbox chart where bars grow from the bottom, labels show every other week, and a Framer Motion `scaleY` entrance animation staggers each bar in
23
+
24
+
### Added
25
+
-**Command palette** (`Ctrl+K`) — centered overlay with a fuzzy search that matches any game by name; results show cover thumbnail and platform badge; keyboard navigation (↑ ↓ Enter Escape); also surfaces six quick actions (Add Game, Library, Favorites, Stats, Spin, Settings); `Ctrl+K` again or Escape closes it
26
+
-**Batch multi-select** — hold-click the checkbox that appears on any game card (top-left, visible on hover) or list row to build a selection; a floating `BatchActionBar` slides up from the bottom showing the selection count, a status dropdown, a rating input, an "add tag" field, and a Delete button; all changes apply to every selected game in one transaction; × clears the selection
27
+
-**Weekly playtime chart** — new "Playtime — Last 12 Weeks" SVG bar chart on the Stats page; each bar represents one ISO week; bars animate in on mount; hovering a bar shows the exact playtime and week label in a tooltip; data comes from the `sessions` table
28
+
-**Lowest Rated section** — Stats page shows a ranked list of up to 5 games rated ≤ 4 with their scores highlighted in red
29
+
-**Most Neglected section** — Stats page shows up to 5 games with zero recorded playtime, sorted by how long they have been in the library, with a "Added X days ago" label
30
+
-**Screenshot lightbox navigation** — left / right chevron buttons let you page through all screenshots without closing the lightbox; an "X / Y" counter in the top-right corner tracks position; `ArrowLeft` / `ArrowRight` keyboard support added; navigation wraps around at both ends
31
+
-**Playtime reminder on startup** — if Playtime Reminders is enabled in settings, the app checks on launch for the game you have not played in the longest time (minimum 30-day threshold); emits a toast-style notification with the game name and number of days since last session
32
+
-**Window position and size memory** — the app saves the window's last position (`window_x`, `window_y`) and size (`window_width`, `window_height`) to the database on close and restores them exactly on next launch; only restores if coordinates are on-screen (≥ 0)
33
+
-**Playtime Reminders toggle** — new toggle in Settings → Behavior; persisted as `playtime_reminders` in the settings table; defaults to enabled
34
+
-**"Game Started" play button confirmation** — after clicking Play in the game detail panel, the button transitions to a green "Game Started" state with a checkmark for 3 seconds using `AnimatePresence`, giving clear visual feedback that the launch command was sent
35
+
36
+
### Changed
37
+
-**Sidebar active link** now has a clear left-edge accent bar (`border-l-2 border-accent-500`) plus a subtle background fill and bold white text; previously only the text color changed on the active route
38
+
-**Fire icon on high-rated games** now pulses with a Framer Motion breathing animation (scale 1 → 1.2 → 1, 2-second loop) on both game cards and list rows
39
+
-**Game card hover overlay** buttons now stagger in (opacity 0→1, y 10→0) with a 50 ms per-button delay instead of appearing all at once
40
+
-**Rating buttons on game cards** moved above the game title (previously rendered below the title, partially obscured by the status badge)
41
+
-**Spin wheel clock tick marks** removed from the static overlay SVG; the outer ring and pointer triangle are kept; the wheel looks cleaner with no decorative minute-hand lines
@@ -43,8 +43,8 @@ Track, organize, rate and launch every game you own — Steam, Epic, GOG, and cu
43
43
44
44
| Installer | Format | Notes |
45
45
|-----------|--------|-------|
46
-
|[ZGameLib_0.6.0_x64_en-US.msi](https://zsync.eu/zgamelib/app/ZGameLib_0.6.0_x64_en-US.msi)|`.msi`|**Recommended** — Windows Installer |
47
-
|[ZGameLib_0.6.0_x64-setup.exe](https://zsync.eu/zgamelib/app/ZGameLib_0.6.0_x64-setup.exe)|`.exe`| NSIS alternative installer |
46
+
|[ZGameLib_0.7.0_x64_en-US.msi](https://zsync.eu/zgamelib/app/ZGameLib_0.7.0_x64_en-US.msi)|`.msi`|**Recommended** — Windows Installer |
47
+
|[ZGameLib_0.7.0_x64-setup.exe](https://zsync.eu/zgamelib/app/ZGameLib_0.7.0_x64-setup.exe)|`.exe`| NSIS alternative installer |
48
48
49
49
> **Windows SmartScreen:** On first launch you may see *"Windows protected your PC"* — click **More info → Run anyway**. This is expected for unsigned indie apps.
50
50
@@ -133,6 +133,17 @@ Track, organize, rate and launch every game you own — Steam, Epic, GOG, and cu
133
133
-**Exe health badge** — amber warning icon on cards when the executable is missing
134
134
- Loading skeleton grid while library loads
135
135
136
+
**Command Palette** (`Ctrl+K`)
137
+
- Centered overlay with fuzzy search across all game names
138
+
- Results show cover thumbnail and platform badge; keyboard navigation (↑ ↓ Enter Escape)
139
+
- Six built-in quick actions: Add Game · Library · Favorites · Stats · Spin · Settings
140
+
141
+
**Batch Multi-Select**
142
+
- Checkbox appears top-left on game cards (visible on hover or when selected) and in list rows
143
+
- Select multiple games; a **BatchActionBar** slides up from the bottom
144
+
- Apply a status, set a rating (clamped 1–10), or add a tag to all selected games at once
145
+
- Delete all selected games with one click; × clears the selection
146
+
136
147
**Weekly Playtime Goal**
137
148
- Set a weekly playtime target in hours at the top of the Library page
138
149
- Animated progress bar with current week's playtime
@@ -213,7 +224,7 @@ A slide-in drawer (500 px wide) that opens without navigating away from your lib
213
224
**Screenshots Tab***(label shows count, e.g. "Screenshots (6)")*
214
225
- Fetches all Steam screenshots for the game
215
226
- Masonry grid layout
216
-
- Full-screen lightbox
227
+
- Full-screen lightbox with left / right navigation, "X / Y" counter, and `ArrowLeft` / `ArrowRight` keyboard support
217
228
- Per-screenshot actions: Copy Path · Open File · Open Folder · Export
218
229
219
230
**History Tab***(label shows count, e.g. "History (3)")*
@@ -348,6 +359,9 @@ All stat cards are **clickable** — each navigates to the Library with the rele
348
359
-**Rating distribution** — horizontal bar chart showing game count per rating (1–10)
349
360
-**Completion rate** — circular SVG progress ring (completed / total)
350
361
-**Top 5 rated games** — ranked list with cover thumbnails and star display
362
+
-**Playtime — Last 12 Weeks** — bar chart grouped by ISO week; bars grow from bottom with staggered entrance animation; hover for exact hours; weeks labeled every other column to avoid crowding
363
+
-**Lowest Rated** — up to 5 games with a rating ≤ 4, scores highlighted in red
364
+
-**Most Neglected** — up to 5 games with zero recorded playtime, sorted by time in library, with "Added X days ago" label
351
365
- Staggered entrance animations
352
366
353
367
</td>
@@ -415,6 +429,8 @@ All themes are implemented as **CSS custom properties** (`--accent-200` through
415
429
-**Close to tray** — ✕ hides the window rather than exiting
416
430
-**Launch on Windows startup** — writes `HKEY_CURRENT_USER\...\Run\ZGameLib` via the Windows registry
417
431
-**Start minimized** — launches directly to tray without showing the window
432
+
-**Window position memory** — window position and size are saved on close and restored exactly on next launch
433
+
-**Playtime reminder** — on startup, a notification is shown if your longest-neglected game (≥ 30 days since last play) is detected; can be toggled off in Settings → Behavior
418
434
419
435
---
420
436
@@ -443,8 +459,9 @@ All themes are implemented as **CSS custom properties** (`--accent-200` through
443
459
| <kbd>/</kbd> | Focus the search bar on any page |
444
460
| <kbd>N</kbd> | Open the Add Game modal |
445
461
| <kbd>F</kbd> | Toggle favorite on the currently open game |
446
-
| <kbd>Escape</kbd> | Close the detail panel or any overlay |
462
+
| <kbd>Escape</kbd> | Close the detail panel, command palette, or any overlay |
447
463
| <kbd>?</kbd> | Show / hide the keyboard shortcuts help overlay |
464
+
| <kbd>Ctrl</kbd> + <kbd>K</kbd> | Open the command palette (fuzzy game search + 6 quick actions) |
448
465
| <kbd>Ctrl</kbd> + <kbd>Enter</kbd> | Save a new note in the notes editor |
449
466
450
467
---
@@ -595,7 +612,7 @@ All themes are implemented as **CSS custom properties** (`--accent-200` through
0 commit comments