Changes for version 0.2.5 - 2026-04-18
- Unified sheet sync: Library -> Sync now does a single bidirectional reconcile after the Drive scan. Rules: both sides have a value -> DB wins; one side blank -> filled from the other; drive_id only in DB -> added to sheet; drive_id only on sheet -> Drive is queried and the track is either added to the DB (exists) or removed from the sheet (gone). Drive API errors during the existence check preserve the row on both sides -- sync never destroys data on an API error.
- Removed the separate File -> Sync from Sheet / Sync to Sheet menu items. Auto-push after metadata edits/fetches is kept as a targeted merge-push, since running a full two-way sync after every field edit would be wasteful.
- Fix: clicking a track in the list no longer auto-scrolls the viewport between the two clicks of a double-click, which could cause a different track to end up under the cursor and be played instead of the one clicked. The tracklist now handles left-clicks manually so GTK's set_cursor auto-scroll never fires on click.
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