From ca5db1ebf983ab7388497c986185fb8971dd548f Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 10 Dec 2025 21:32:45 +0100 Subject: [PATCH 01/20] Updated doc with missing info --- SUBSONIC.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SUBSONIC.md b/SUBSONIC.md index 025367b7..3b8a2a0c 100644 --- a/SUBSONIC.md +++ b/SUBSONIC.md @@ -34,7 +34,9 @@ The following extra fields are implemented: * `musicBrainzId` * `originalReleaseDate` * `recordLabels` + * `releaseDate` * `releaseTypes` + * `sortName` * `userRating` * `version` * `Child` response: @@ -64,5 +66,7 @@ The following extra fields are implemented: * [API Key Authentication](https://opensubsonic.netlify.app/docs/extensions/apikeyauth/) * [getPodcastEpisode](https://opensubsonic.netlify.app/docs/extensions/getpodcastepisode/) * [HTTP form POST](https://opensubsonic.netlify.app/docs/extensions/formpost/) +* [Index based Queue](https://opensubsonic.netlify.app/docs/extensions/indexbasedqueue/) * [Transcode offset](https://opensubsonic.netlify.app/docs/extensions/transcodeoffset/) * [Song Lyrics](https://opensubsonic.netlify.app/docs/extensions/songlyrics/) +* [Transcoding](https://opensubsonic.netlify.app/docs/extensions/transcoding/) From 622efff7f59edb455950e46673cc205fbcd90418 Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 10 Dec 2025 21:35:21 +0100 Subject: [PATCH 02/20] Using long names for codec field to keep consistency with global filter values --- src/lms/ui/explore/ReleaseView.cpp | 2 +- src/lms/ui/explore/TrackListHelpers.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lms/ui/explore/ReleaseView.cpp b/src/lms/ui/explore/ReleaseView.cpp index f2ea10dc..1c2a74ff 100644 --- a/src/lms/ui/explore/ReleaseView.cpp +++ b/src/lms/ui/explore/ReleaseView.cpp @@ -146,7 +146,7 @@ namespace lms::ui { if (!codecStr.empty()) codecStr += " · "; - codecStr += core::media::getCodecDesc(codec).name.str(); + codecStr += core::media::getCodecDesc(codec).longName.str(); } if (!codecStr.empty()) diff --git a/src/lms/ui/explore/TrackListHelpers.cpp b/src/lms/ui/explore/TrackListHelpers.cpp index f52d0dc2..bca9fe80 100644 --- a/src/lms/ui/explore/TrackListHelpers.cpp +++ b/src/lms/ui/explore/TrackListHelpers.cpp @@ -130,7 +130,7 @@ namespace lms::ui::TrackListHelpers if (const auto codec{ track->getCodec() }) { trackInfo->setCondition("if-has-codec", true); - trackInfo->bindString("codec", core::media::getCodecDesc(*codec).name.c_str(), Wt::TextFormat::Plain); + trackInfo->bindString("codec", core::media::getCodecDesc(*codec).longName.c_str(), Wt::TextFormat::Plain); } trackInfo->bindString("duration", utils::durationToString(track->getDuration())); From 7fce60b4ff55ad1714823f10864e18afdcf08a70 Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 10 Dec 2025 21:35:44 +0100 Subject: [PATCH 03/20] Fixed bad case --- src/libs/subsonic/impl/responses/Song.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libs/subsonic/impl/responses/Song.cpp b/src/libs/subsonic/impl/responses/Song.cpp index b7a44fda..eb347a76 100644 --- a/src/libs/subsonic/impl/responses/Song.cpp +++ b/src/libs/subsonic/impl/responses/Song.cpp @@ -194,7 +194,7 @@ namespace lms::api::subsonic } { - trackResponse.createEmptyArrayChild("albumartists"); + trackResponse.createEmptyArrayChild("albumArtists"); trackResponse.createEmptyArrayChild("artists"); trackResponse.createEmptyArrayChild("contributors"); @@ -205,7 +205,7 @@ namespace lms::api::subsonic trackResponse.addArrayChild("artists", createArtistNode(artist)); break; case db::TrackArtistLinkType::ReleaseArtist: - trackResponse.addArrayChild("albumartists", createArtistNode(artist)); + trackResponse.addArrayChild("albumArtists", createArtistNode(artist)); break; default: trackResponse.addArrayChild("contributors", createContributorNode(link, artist)); From 0c5883928ee1ebff3104b226a7123ce25aa1fe80 Mon Sep 17 00:00:00 2001 From: emeric Date: Thu, 11 Dec 2025 22:00:57 +0100 Subject: [PATCH 04/20] Added a note on the provided PAM authentication and needed privileges, ref #790 --- INSTALL.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 76791b73..55a5455b 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -102,10 +102,10 @@ If a setting is not present in the configuration file, a hardcoded default value ## Authentication backends You can define which authentication backend to be used thanks to the `authentication-backend` option: * `internal` (default): _LMS_ uses an internal database to store users and their associated passwords (salted and hashed using [Bcrypt](https://en.wikipedia.org/wiki/Bcrypt)). Only the admin user can create, edit or remove other users. -* `PAM`: the user/password authentication request is forwarded to PAM (see the default [PAM configuration file](conf/pam/lms) provided). +* `PAM`: the user/password authentication request is forwarded to PAM. A default example PAM configuration file is provided at [`conf/pam/lms`](conf/pam/lms), which demonstrates how to authenticate using system passwords. **Note:** this file is just a base example; depending on your PAM setup, you may need to adjust the service file or PAM rules to ensure proper privileges. * `http-headers`: _LMS_ uses a configurable HTTP header field, typically set by a reverse proxy to handle [SSO](https://en.wikipedia.org/wiki/Single_sign-on), to extract the login name. You can customize the field to be used using the `http-headers-login-field` option. __Note__: the first created user is the admin user. -#### `internal` backend: reset admin password +### `internal` backend: reset admin password Open the the database file located in `/var/lms/lms.db` using `sqlite3`: ```sh sqlite3 /var/lms/lms.db From d129bd766b80cba3a46c318c1ab2f6347f99efbd Mon Sep 17 00:00:00 2001 From: Tuukka Ojala Date: Sat, 18 Jan 2025 00:14:12 +0200 Subject: [PATCH 05/20] Improve accessibility for screen reader users - Marked UI regions with ARIA landmarks - Added text labels to icon-only buttons - Added ARIA state semantics to track star buttons - Added static alt text to cover art images --- approot/artist.xml | 2 +- approot/main.xml | 4 ++-- approot/mediaplayer.xml | 12 ++++++------ approot/messages.xml | 11 +++++++++++ approot/release.xml | 2 +- approot/releases.xml | 2 +- approot/tracks.xml | 2 +- src/lms/ui/Utils.cpp | 1 + src/lms/ui/explore/ReleaseView.cpp | 20 +++++++++++++++----- src/lms/ui/explore/TrackListHelpers.cpp | 8 +++++++- 10 files changed, 46 insertions(+), 18 deletions(-) diff --git a/approot/artist.xml b/approot/artist.xml index 78195b00..00c4f3a0 100644 --- a/approot/artist.xml +++ b/approot/artist.xml @@ -15,7 +15,7 @@ ${}
${play-btn class="btn btn-primary"} - - -
@@ -39,7 +39,7 @@
- +
${playqueue-btn class="btn btn-outline-primary border-0"} diff --git a/approot/messages.xml b/approot/messages.xml index 00d92c46..1b10384a 100644 --- a/approot/messages.xml +++ b/approot/messages.xml @@ -15,6 +15,7 @@ Loading... Login Logout +More... Ok Password Bad login / password combination @@ -197,6 +198,7 @@ All Artists Bitrate +Cover art Codec Download Duration @@ -207,6 +209,7 @@ Most played MusicBrainz Artist MusicBrainz Release +Play {1} Play Play last Play next @@ -221,6 +224,7 @@ Albums Search Star +Star {1} Starred Track information Lyrics @@ -309,6 +313,13 @@ Transcoding active +Now playing +Previous +Play / pause +Next +Seek +Volume + Clear diff --git a/approot/release.xml b/approot/release.xml index d19cd070..36afe78e 100644 --- a/approot/release.xml +++ b/approot/release.xml @@ -18,7 +18,7 @@ ${clusters class="mb-2"}
${play-btn class="btn btn-primary"} -