Changes for version 0.2.8 - 2026-04-23
- Fix: Scanner now decodes UTF-8 at the Drive API boundary, preventing double-encoded mojibake (e.g. "Nazan Ãncel" instead of "Nazan Öncel") from landing in SQLite. New tools/fix_mojibake.pl repairs existing corrupted rows.
- Edit dialog: context menu "Edit Metadata…" and "Fetch Metadata…" consolidated into a single "Edit…" with a Fetch button inside the dialog. Fetch fills only blank fields (whitespace-only counts as blank); to refresh a populated field, clear it first.
- Edit dialog: entries force LTR layout with an invisible LRM prefix, so RTL content (Arabic, Hebrew) no longer flips the dialog to right-justified after a fill. Text strippers remove the marker on read so nothing leaks into the DB or queries.
- Display: tracklist, sidebar, and now-playing label strip leading track-number prefixes from titles, leading YYYY- from albums, and underscores across title/artist/album. Stored values stay raw — DB lookups and sheet sync are unaffected.
- Sheet sync: single-track metadata saves now update just the one row on the relevant worksheet (two Sheets API calls total — values.get on the drive_id column, then values.update on the matching row) instead of rewriting every tab.
- Save: metadata edits refresh the single tracklist row in place, preserving sidebar selection and scroll position (was a full _load_library that bumped the user back to the "All Tracks" view).
Modules
GTK3 music player for Google Drive
Load, persist and query DrivePlayer configuration
SQLite database facade for the DrivePlayer library
GTK3 application window for DrivePlayer
Role for Drive folder browsing dialogs
Role for background metadata fetching
Role for Google Sheet synchronisation
Fetch track metadata from iTunes, MusicBrainz, and AcoustID
mpv-based audio player that streams from Google Drive
Recursively scan a Google Drive folder and store tracks
DBIx::Class schema for the DrivePlayer SQLite database
DBIx::Class result for the folders table
DBIx::Class result for the scan_folders table
DBIx::Class result for the tracks table
Common imports for all DrivePlayer modules
Sync the DrivePlayer library to/from a Google Sheet