fix: recover playlist sync after OpenSubsonic backend migration #5

Open
opened 2026-08-28 11:19:40 +01:00 by nimmo · 1 comment
Owner

Problem

SynthSeek's existing Weekly Mix playlist was created/synchronised before the music server was switched from LMS to Navidrome. After restoring Navidrome and updating Plexdrome to use Navidrome username/password authentication, forcing a sync is accepted by SynthSeek but does not update Navidrome.

Evidence

Plexdrome on Chaos reaches Navidrome successfully:

  • OpenSubsonic search3 requests return ok
  • Requests complete quickly once the Nebula firewall/listener change is deployed

During a forced Weekly Mix sync, Plexdrome logs show:

opensubsonic operation=getPlaylist outcome=error
plex request method=GET path=/playlists/p_cGwtNA/items status=501
plex request method=PUT path=/playlists/p_cGwtNA/items status=501

The same playlist is reported by SynthSeek as synced_to_plex: true, which is likely stale state from the previous backend.

Goal

Make existing SynthSeek playlists recoverable after changing the OpenSubsonic backend, and ensure playlist sync can create or update the corresponding Navidrome playlist.

Scope

  • Investigate why Plexdrome returns 501 Not Implemented for playlist GET/PUT operations.
  • Handle stale or invalid remote playlist IDs gracefully.
  • Support creating a replacement playlist when the stored remote ID no longer exists.
  • Return a clear error when a playlist cannot be resolved rather than reporting a misleading success.
  • Preserve existing playlist behaviour for valid mappings.
  • Add regression tests covering stale IDs and Navidrome playlist creation/update.

Acceptance criteria

  • A forced sync of SynthSeek's existing Weekly Mix playlist creates or updates the correct Navidrome playlist.
  • Stale Plex-style playlist IDs do not permanently block synchronisation.
  • Plexdrome logs identify the backend failure and operation clearly.
  • The API response accurately reflects success or failure.
  • Existing Plexdrome library and track-search behaviour remains intact.
## Problem SynthSeek's existing `Weekly Mix` playlist was created/synchronised before the music server was switched from LMS to Navidrome. After restoring Navidrome and updating Plexdrome to use Navidrome username/password authentication, forcing a sync is accepted by SynthSeek but does not update Navidrome. ## Evidence Plexdrome on Chaos reaches Navidrome successfully: - OpenSubsonic `search3` requests return `ok` - Requests complete quickly once the Nebula firewall/listener change is deployed During a forced `Weekly Mix` sync, Plexdrome logs show: ``` opensubsonic operation=getPlaylist outcome=error plex request method=GET path=/playlists/p_cGwtNA/items status=501 plex request method=PUT path=/playlists/p_cGwtNA/items status=501 ``` The same playlist is reported by SynthSeek as `synced_to_plex: true`, which is likely stale state from the previous backend. ## Goal Make existing SynthSeek playlists recoverable after changing the OpenSubsonic backend, and ensure playlist sync can create or update the corresponding Navidrome playlist. ## Scope - Investigate why Plexdrome returns `501 Not Implemented` for playlist GET/PUT operations. - Handle stale or invalid remote playlist IDs gracefully. - Support creating a replacement playlist when the stored remote ID no longer exists. - Return a clear error when a playlist cannot be resolved rather than reporting a misleading success. - Preserve existing playlist behaviour for valid mappings. - Add regression tests covering stale IDs and Navidrome playlist creation/update. ## Acceptance criteria - A forced sync of SynthSeek's existing `Weekly Mix` playlist creates or updates the correct Navidrome playlist. - Stale Plex-style playlist IDs do not permanently block synchronisation. - Plexdrome logs identify the backend failure and operation clearly. - The API response accurately reflects success or failure. - Existing Plexdrome library and track-search behaviour remains intact.
Author
Owner

Investigation with a read-only Navidrome account confirmed that the legacy LMS remote ID pl-4 is absent; Navidrome returns OpenSubsonic error code 70 (“playlist not found”). Plexdrome had incorrectly treated that standard missing-resource code as endpoint unsupported and emitted HTTP 501. Commit 7aae550 maps it to a precise Plex 404 and adds regression coverage; Go tests and nix flake check pass. The adapter cannot safely create a replacement from a stale /playlists/{id}/items call alone because Synthseek sends neither the original playlist name nor a new remote ID there. Keeping the issue open for the Synthseek-side reset/recreate recovery path and valid Navidrome playlist operation validation.

Investigation with a read-only Navidrome account confirmed that the legacy LMS remote ID `pl-4` is absent; Navidrome returns OpenSubsonic error code 70 (“playlist not found”). Plexdrome had incorrectly treated that standard missing-resource code as endpoint unsupported and emitted HTTP 501. Commit 7aae550 maps it to a precise Plex 404 and adds regression coverage; Go tests and `nix flake check` pass. The adapter cannot safely create a replacement from a stale `/playlists/{id}/items` call alone because Synthseek sends neither the original playlist name nor a new remote ID there. Keeping the issue open for the Synthseek-side reset/recreate recovery path and valid Navidrome playlist operation validation.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nimmo/plexdrome#5
No description provided.