From 22de74430fc3aa83a82c34bc3cfc8753701db995 Mon Sep 17 00:00:00 2001 From: emeric Date: Sun, 22 Feb 2026 22:19:46 +0100 Subject: [PATCH] Added OS field 'readonly' in playlist responses --- SUBSONIC.md | 2 ++ src/libs/subsonic/impl/responses/Playlist.cpp | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/SUBSONIC.md b/SUBSONIC.md index 3b8a2a0c..9c106e7e 100644 --- a/SUBSONIC.md +++ b/SUBSONIC.md @@ -61,6 +61,8 @@ The following extra fields are implemented: * `musicBrainzId` * `sortName` * `roles` +* `Playlist` response: + * `readonly` ## Supported extensions * [API Key Authentication](https://opensubsonic.netlify.app/docs/extensions/apikeyauth/) diff --git a/src/libs/subsonic/impl/responses/Playlist.cpp b/src/libs/subsonic/impl/responses/Playlist.cpp index 2ba03013..9e4c6871 100644 --- a/src/libs/subsonic/impl/responses/Playlist.cpp +++ b/src/libs/subsonic/impl/responses/Playlist.cpp @@ -43,8 +43,10 @@ namespace lms::api::subsonic playlistNode.setAttribute("public", tracklist->getVisibility() == db::TrackList::Visibility::Public); playlistNode.setAttribute("changed", core::stringUtils::toISO8601String(tracklist->getLastModifiedDateTime())); playlistNode.setAttribute("created", core::stringUtils::toISO8601String(tracklist->getCreationDateTime())); - if (const db::User::pointer user{ tracklist->getUser() }) - playlistNode.setAttribute("owner", user->getLoginName()); + + const db::User::pointer trackListUser{ tracklist->getUser() }; + if (trackListUser) + playlistNode.setAttribute("owner", trackListUser->getLoginName()); if (const db::ArtworkId artworkId{ core::Service::get()->findTrackListImage(tracklist->getId()) }; artworkId.isValid()) { @@ -55,6 +57,12 @@ namespace lms::api::subsonic } } + if (context.isOpenSubsonicEnabled()) + { + // A playlist with no owner is always read only, and only the owner of a tracklist can modify it + playlistNode.setAttribute("readonly", !trackListUser || trackListUser != context.getUser()); + } + return playlistNode; } } // namespace lms::api::subsonic \ No newline at end of file