diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 82119510..0498d4a4 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -6,7 +6,7 @@ on: pull_request: branches: [ "master", "develop" ] schedule: - - cron: "48 10 * * 4" + - cron: "48 10 1 * *" jobs: analyze: @@ -30,8 +30,8 @@ jobs: name: Install dependencies (cpp) run: | sudo apt-get update - sudo apt-get install --yes build-essential cmake libboost-all-dev libconfig++-dev libavcodec-dev libavutil-dev libavformat-dev libstb-dev libtag1-dev libpam0g-dev libgtest-dev libarchive-dev - export WT_VERSION=4.9.0 + sudo apt-get install --yes build-essential cmake libboost-all-dev libconfig++-dev libavcodec-dev libavutil-dev libavformat-dev libstb-dev libtag1-dev libpam0g-dev libgtest-dev libarchive-dev libxxhash-dev + export WT_VERSION=4.11.3 export WT_INSTALL_PREFIX=/usr git clone https://github.com/emweb/wt.git /tmp/wt pushd /tmp/wt diff --git a/Dockerfile-build-alpine b/Dockerfile-build-alpine index 6580b786..d7abb765 100644 --- a/Dockerfile-build-alpine +++ b/Dockerfile-build-alpine @@ -23,7 +23,8 @@ ARG LMS_BUILD_PACKAGES=" \ taglib-dev \ stb \ wt-dev \ - gtest-dev" + gtest-dev \ + xxhash-dev" COPY --from=xx / / diff --git a/Dockerfile-build-arch b/Dockerfile-build-arch index b197342c..55a5e7eb 100644 --- a/Dockerfile-build-arch +++ b/Dockerfile-build-arch @@ -13,7 +13,8 @@ ARG BUILD_PACKAGES="\ make \ pkgconfig \ taglib \ - wt" + wt \ + xxhash" RUN pacman -Syu --noconfirm RUN pacman -S --noconfirm ${BUILD_PACKAGES} diff --git a/Dockerfile-release b/Dockerfile-release index 2d1a29c8..e55552fe 100644 --- a/Dockerfile-release +++ b/Dockerfile-release @@ -32,7 +32,8 @@ ARG BUILD_PACKAGES=" \ libconfig-dev \ utfcpp \ sqlite-dev \ - gtest-dev" + gtest-dev \ + xxhash-dev" RUN apk add --no-cache --update ${BUILD_PACKAGES} diff --git a/INSTALL.md b/INSTALL.md index 115ddc3c..e4973605 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -37,7 +37,7 @@ __Notes__: * a C++20 compiler is needed * ffmpeg version 4 minimum is required ```sh -apt-get install g++ cmake libboost-program-options-dev libboost-system-dev libavutil-dev libavformat-dev libstb-dev libconfig++-dev ffmpeg libtag1-dev libpam0g-dev libgtest-dev libarchive-dev +apt-get install g++ cmake libboost-program-options-dev libboost-system-dev libavutil-dev libavformat-dev libstb-dev libconfig++-dev ffmpeg libtag1-dev libpam0g-dev libgtest-dev libarchive-dev libxxhash-dev ``` __Notes__: * libpam0g-dev is optional (only for using PAM authentication) diff --git a/README.md b/README.md index d9978ff6..87e52361 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,13 @@ __Note__: depending on your database size and/or your hardware, the tag-based re ## About tags _LMS_ primarily relies on tags to organize your music collection but also supports browsing by directory using the [Subsonic/OpenSubsonic API](SUBSONIC.md). +## Artist information folder +_LMS_ supports an Artist information folder to manage metadata and images for artists. This folder can be placed anywhere within the scanned libraries but is best located in a dedicated `ArtistInfo` directory in the root of a media library for maximum compatibility with other softwares. + +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__: `artist.nfo` files must include both `name` and `musicBrainzArtistID` fields to be recognized. + ### Filtering It is possible to apply global filters on your collection using `genre`, `mood`, `grouping`, `language`, and by music library. More tags, including custom ones, can be added in the database administration settings. @@ -77,8 +84,8 @@ For an album to be considered a match, the following conditions must be met: ## Artist image lookup The recommended method is to name the artist image file using the artist's MusicBrainz ArtistID. This file can be placed anywhere within one of the scanned libraries. -If no file with the MusicBrainz ArtistID is found, _LMS_ will look for a file named `artist` (or another name configured in `lms.conf`) in the artist's directories: - +If no file with the MusicBrainz ArtistID is found, _LMS_ will first look for files named `folder` and then `thumb` in the artist information directory, where the corresponding `artist.nfo` file is located. +If neither exists, it will then search for a file named `artist` (or another name configured in `lms.conf`) in the artist's directories, using this logic: 1. Identify the artist's directory: _LMS_ selects all albums by the artist using the "AlbumArtist" link and determines the longest common path among them. 2. Scan for the image: the directory is scanned starting from this common path, moving upwards if needed, until the artist image file is found. 3. Fallback search: if no image is found, _LMS_ will then search within each individual album folder. diff --git a/SUBSONIC.md b/SUBSONIC.md index 0ef54e21..1781a5f9 100644 --- a/SUBSONIC.md +++ b/SUBSONIC.md @@ -36,6 +36,7 @@ The following extra fields are implemented: * `recordLabels` * `releaseTypes` * `userRating` + * `version` * `Child` response: * `albumArtists` * `artists` diff --git a/approot/artist.xml b/approot/artist.xml index 6119ca39..99cc5733 100644 --- a/approot/artist.xml +++ b/approot/artist.xml @@ -3,22 +3,30 @@ -
-

${name}

- ${clusters class="mb-2"} -
- ${play-btn class="btn btn-primary"} -
${release-containers} diff --git a/approot/explore.xml b/approot/explore.xml index d3dc2f81..eba82ec2 100644 --- a/approot/explore.xml +++ b/approot/explore.xml @@ -69,4 +69,16 @@
+ + + + diff --git a/approot/images/unknown-artist.svg b/approot/images/unknown-artist.svg index 107866e9..b4a7afc9 100644 --- a/approot/images/unknown-artist.svg +++ b/approot/images/unknown-artist.svg @@ -1,4 +1,4 @@ - + diff --git a/approot/messages.xml b/approot/messages.xml index c82129b1..fe3315a8 100644 --- a/approot/messages.xml +++ b/approot/messages.xml @@ -97,6 +97,7 @@ Cannot get track duration +Cannot parse artist info file Cannot parse audio file Cannot read file Cannot parse image file @@ -208,6 +209,7 @@ Appears on +Biography Similar artists @@ -309,8 +311,10 @@ Default transcoding output bitrate Default transcoding output format Cannot save using a demo account! +Display artist relationships inline within albums Enable transcoding by default Feedback +Types of artist relationships to display Settings Album Name Original Release Date (Ascending) diff --git a/approot/messages_fr.xml b/approot/messages_fr.xml index 8083fc56..998ed0b1 100644 --- a/approot/messages_fr.xml +++ b/approot/messages_fr.xml @@ -97,6 +97,7 @@ Impossible de récupérer la durée de la piste +Impossible d'analyser le fichier d'informations sur l'artiste Impossible d'analyser le fichier audio Impossible de lire le fichier Impossible d'analyser le fichier image @@ -208,6 +209,7 @@ Apparaît dans +Biographie Artistes similaires @@ -309,8 +311,10 @@ Bitrate par défaut du transcodage Format par défaut du transcodage Impossible de sauvegarder en utilisant un compte de démo ! +Afficher les relations d'artiste en ligne dans les albums Activer par défaut le transcodage Feedback +Types de relations d'artiste à afficher Paramètres Nom de l'album Date de sortie originale (Croissant) diff --git a/approot/messages_it.xml b/approot/messages_it.xml index 567097ab..a11c121f 100644 --- a/approot/messages_it.xml +++ b/approot/messages_it.xml @@ -97,6 +97,7 @@ Non sono stato in grado di determinare la durata della traccia +Impossibile analizzare il file delle informazioni sull'artista Impossibile analizzare il file audio Non in grado di leggere il file Impossibile analizzare il file immagine @@ -208,6 +209,7 @@ Appare su +Biografia Artisti simili @@ -309,8 +311,10 @@ Bitrate di default per la transcodifica Formato di default per la transcodifica Non posso salvare le impostazioni utilizzando l'account demo! +Mostra le relazioni degli artisti in linea negli album Abilita transcodifica di default Feedback +Tipi di relazioni artistiche da visualizzare Impostazioni Nome dell'album Data di uscita originale (Crescente) diff --git a/approot/messages_pl.xml b/approot/messages_pl.xml index ac97014a..6784aed7 100644 --- a/approot/messages_pl.xml +++ b/approot/messages_pl.xml @@ -98,6 +98,7 @@ Nie udało się ustalić długości ścieżki +Nie można przetworzyć pliku z informacjami o artyście" Nie można przeanalizować pliku audio Nie udało się odczytać pliku Nie można przeanalizować pliku obrazu @@ -225,6 +226,7 @@ Pojawia się na +Biografia Podobni artyści @@ -335,8 +337,10 @@ Domyślna przepływność transkodowania Domyślny format wyjściowy transkodowania Nie można zapisywać na koncie demonstracyjnym! +Wyświetlaj powiązania artystów w albumach Aktywuj domyślnie transkodowanie Feedback +Typy powiązań artystów do wyświetlenia Ustawienia Nazwa albumu Oryginalna data wydania (Rosnąco) diff --git a/approot/messages_zh.xml b/approot/messages_zh.xml index 21e240fa..f0640e56 100644 --- a/approot/messages_zh.xml +++ b/approot/messages_zh.xml @@ -97,6 +97,7 @@ 无法获得音轨时间 + 无法解析文件 无法读取文件 @@ -208,6 +209,7 @@ 出现于 + 相似歌手 @@ -311,6 +313,8 @@ 使用演示账号时不能保存! + + 设置 diff --git a/approot/release.xml b/approot/release.xml index 46b190f8..0dbbc8ed 100644 --- a/approot/release.xml +++ b/approot/release.xml @@ -9,7 +9,7 @@
- ${cover class="Lms-cursor-pointer rounded"} + ${cover class="Lms-cursor-pointer rounded d-block mx-auto"}

${name}${}[${comment}]${}

@@ -49,18 +49,6 @@ ${} - - - - ${artist class="text-decoration-none link-success"} @@ -94,13 +82,14 @@ ${}${track-number}${}
-
+
${name} ${}${artists class="d-block d-md-none"}${} + ${}${artist-links}${}
-
+
${}${artists-md class="d-none d-md-block"}${}
@@ -125,6 +114,12 @@
+ +
+ ${role} — ${anchors class="ms-1"} +
+
+ +
+
+ ${enable-inline-artist-relationships class="form-check-input"} + +
+ ${enable-inline-artist-relationships} +
+
+
+
+ + ${inline-artist-relationships class="form-control"} +
+ ${inline-artist-relationships-info} +
+
${tr:Lms.Settings.audio}