App-DrivePlayer

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

Revision history for App::DrivePlayer.

0.2.10 2026-09-21
        - Sidebar: Artists/Albums/Genres now sort by their
          displayed names (case-insensitive) rather than the raw
          stored values.
        - Config: stop writing a misplaced 'class' key at the
          google_restapi level; it is stripped on load (self-
          healing) and the auth hash is copied before being passed
          to Google::RestApi so the library cannot delete our
          'class' key from the live config.
        - Internal: de-bloat pass -- removed dead methods, unused
          imports and the obsolete tools/fix_mojibake.pl migration,
          and collapsed duplicated logic into shared helpers.
        - Sync: the progress dialog now stays up through the
          post-scan Google Sheet sync instead of being destroyed
          first.  On a large folder the sheet sync is a long
          synchronous step, and closing the dialog beforehand left
          the app looking frozen with no indication work was still
          in progress.
        - Logging: added a restapi_log_level config key (default
          WARN) that controls the Google::RestApi logger subtree
          independently of log_level.  At DEBUG that library emits
          ~27 lines per cell while reading a worksheet -- tens of
          thousands of lines for a large sheet -- and writing them
          synchronously stalled the UI for around a minute during
          a big sheet sync.  The app can now run at DEBUG without
          the RestApi firehose.
        - Require Google::RestApi 2.2.4 (cpanfile and Makefile.PL).

0.2.9 2026-04-30
        - Fix: player IPC no longer drops mpv events when a recv()
          slices an event mid-line.  _drain_events and
          _send_command_sync now share _pending_buf so partial
          events get reassembled across reads.  Symptom: roughly
          every 15-20 tracks playback would stick on a finished
          track because end-file was lost and on_track_end never
          fired.
        - Settings: saving with changed Google credentials now
          tears down rest_api / drive / player and rebuilds them
          against the new config, so a refreshed token takes
          effect without restarting the app.
        - Errors: HTTP 4xx / OAuth-grant failures from Google now
          pop the Settings dialog automatically after the error
          is dismissed, routing the user straight to the
          credentials.  Re-entry from errors fired inside the
          Settings dialog itself (e.g. Find-or-Create) is
          suppressed.
        - Tracklist: Artist, Album and Genre cells are now click
          targets that switch the sidebar to that group; the
          existing cursor-changed signal repopulates the
          tracklist.  A hand cursor on hover indicates the cell
          is clickable.
        - Edit metadata: when an artist / album / genre value
          changes and other tracks share the previous value, a
          single confirmation dialog offers to apply the rename
          across all matching tracks -- so one mojibake fix can
          clean up the lingering sidebar entry instead of leaving
          it stuck behind unrenamed siblings.
        - Edit metadata: small grey help label under the Fetch
          button states that Fetch only fills blank fields, and
          that clearing a populated field lets Fetch replace it.
        - Config: write 'class: OAuth2Client' on the
          google_restapi blob (in addition to under auth) and
          require Google::RestApi >= 2.2.3.
        - Docs: README Files section converted from a GFM pipe
          table to a bulleted list so it renders correctly on
          MetaCPAN (Text::Markdown doesn't support tables).

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).

0.2.7 2026-04-22
        - Settings dialog: move the Google Sheet Sync section so it
          follows the Google API Credentials section (related Google
          settings grouped together).
        - Settings dialog: add mouseover tooltips on every label and
          input (OAuth Client ID / Secret / Token File, Spreadsheet
          ID, fpcalc row, AcoustID API Key) explaining what each



( run in 1.736 second using v1.01-cache-2.11-cpan-3f962061493 )