ID-first fallback for server-playlist add-track + diagnostic logging

The /api/server/playlist/<id>/add-track endpoint only looked up the
target Plex playlist by name, but Plex deletes + recreates playlists
on edit so the rating key the frontend cached can be stale. The
companion GET /tracks endpoint already had id-first / name-fallback;
add-track now does the same.

Added a warning log on GET /tracks when BOTH lookups fail so the
"all source items show Find & Add" symptom (which happens when
server_tracks comes back empty) has a clear diagnostic in the log
instead of silently rendering an empty server column.

Not a refactor regression — the original code had the same name-only
lookup. The mass-replace of `plex_client` → `media_server_engine.client('plex')`
is byte-equivalent. Just surfacing the latent bug.
This commit is contained in:
Broque Thomas 2026-05-05 19:54:31 -07:00
parent 03d1c36637
commit 218af65606

View file

@ -18100,6 +18100,12 @@ def get_server_playlist_tracks(playlist_id):
raw_playlist = media_server_engine.client('plex').server.playlist(playlist_name)
except Exception:
pass
if not raw_playlist:
logger.warning(
f"[ServerPlaylistTracks] Plex playlist not found by "
f"id={playlist_id} or name='{playlist_name}'"
f"compare view will show every source track as Find & Add"
)
if raw_playlist:
if not playlist_name:
playlist_name = raw_playlist.title
@ -18446,11 +18452,25 @@ def server_playlist_add_track(playlist_id):
active_server = config_manager.get_active_media_server()
if active_server == 'plex' and media_server_engine.client('plex'):
# ID-first, name-fallback — Plex deletes + recreates playlists
# on edit so the rating key the frontend cached can be stale.
# The GET tracks endpoint uses the same lookup chain.
plex_server = media_server_engine.client('plex').server
raw_playlist = None
try:
raw_playlist = media_server_engine.client('plex').server.playlist(playlist_name)
raw_playlist = plex_server.fetchItem(int(playlist_id))
except Exception:
pass
if not raw_playlist and playlist_name:
try:
raw_playlist = plex_server.playlist(playlist_name)
except Exception:
pass
if not raw_playlist:
logger.warning(f"[ServerPlaylist] add-track: playlist not found by id={playlist_id} or name='{playlist_name}'")
return jsonify({"success": False, "error": "Playlist not found"}), 404
new_item = media_server_engine.client('plex').server.fetchItem(int(track_id))
new_item = plex_server.fetchItem(int(track_id))
if not new_item:
return jsonify({"success": False, "error": "Track not found on server"}), 404