diff --git a/.github/workflows/build-macos-basic.yml b/.github/workflows/build-macos-basic.yml new file mode 100644 index 00000000..0a85d87a --- /dev/null +++ b/.github/workflows/build-macos-basic.yml @@ -0,0 +1,51 @@ +name: Basic Build (macOS) + +on: [pull_request] + +jobs: + build-macos: + runs-on: macos-14 + env: + PKG_CONFIG_PATH: /opt/homebrew/lib/pkgconfig:/opt/homebrew/share/pkgconfig + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: | + brew update + brew install pkg-config cmake boost ffmpeg libconfig taglib libarchive xxhash pugixml googletest openssl git + + - name: Build and install Wt + run: | + WT_VERSION=4.12.1 + git clone https://github.com/emweb/wt.git /tmp/wt + cd /tmp/wt + git checkout ${WT_VERSION} + cmake -B build -S . \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DBUILD_EXAMPLES=OFF \ + -DENABLE_LIBWTTEST=OFF \ + -DCONNECTOR_FCGI=OFF + cmake --build build --parallel 2 + sudo cmake --install build + + - name: Install Stb headers + run: | + git clone https://github.com/nothings/stb.git /opt/homebrew/include/stb + + - name: Configure LMS + run: | + export PKG_CONFIG_PATH="$(brew --prefix libarchive)/lib/pkgconfig:$PKG_CONFIG_PATH" + cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_UNITY_BUILD=ON \ + -DBUILD_TESTING=ON \ + -DSTB_IMAGE_INCLUDE_DIR=/opt/homebrew/include/stb + + - name: Build LMS + run: cmake --build build --parallel 2 + + - name: Test LMS + run: ctest --test-dir build --output-on-failure diff --git a/CMakeLists.txt b/CMakeLists.txt index bc0ce574..eba3736f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.12) -project(lms VERSION 3.73.0) +project(lms VERSION 3.74.0) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules/) 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 diff --git a/README.md b/README.md index 8534b2f0..5a55ee41 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,8 @@ _LMS_ supports an Artist information folder to manage metadata and images for ar The folder must follow a structure defined by Kodi, as detailed [here](https://kodi.wiki/view/Artist_information_folder). `artist.nfo` files are used to define additional artist information such as biography, sort name, and MusicBrainz ArtistID. See the format [here](https://kodi.wiki/view/NFO_files/Artists). -__Note__: If no name is provided in the `artist.nfo` file, the name of the containing folder is used. +The canonical artist name used by _LMS_ is the one specified in the `artist.nfo` file; If an `artist.nfo` exists but does not provide a name, the name of the containing folder is used. +If no artist info file is provided, _LMS_ will pick the artist name found on the latest release. ### Filtering It is possible to apply global filters on your collection using `genre`, `mood`, `grouping`, `language`, `codec`, and by music library. More tags, including custom ones, can be added in the database administration settings. 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/) 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 @@ ${}