diff --git a/Dockerfile-build-alpine b/Dockerfile-build-alpine
index 4be54d95..80734408 100644
--- a/Dockerfile-build-alpine
+++ b/Dockerfile-build-alpine
@@ -1,5 +1,5 @@
FROM --platform=$BUILDPLATFORM tonistiigi/xx AS xx
-FROM --platform=$BUILDPLATFORM alpine:3.16
+FROM --platform=$BUILDPLATFORM alpine:3.17
ARG BUILD_PACKAGES="\
clang \
@@ -19,6 +19,7 @@ ARG LMS_BUILD_PACKAGES=" \
ffmpeg-dev \
libconfig-dev \
taglib-dev \
+ stb \
wt-dev \
gtest-dev"
@@ -27,17 +28,6 @@ COPY --from=xx / /
ARG TARGETPLATFORM
RUN xx-apk add --no-scripts --no-cache ${LMS_BUILD_PACKAGES}
-ARG PREFIX="/tmp/install"
-
-# STB
-ARG STB_VERSION=af1a5bc352164740c1cc1354942b1c6b72eacb8a
-RUN \
- DIR=/tmp/stb && mkdir -p ${DIR} && cd ${DIR} && \
- curl -sLO https://github.com/nothings/stb/archive/${STB_VERSION}.tar.gz && \
- tar -x --strip-components=1 -f ${STB_VERSION}.tar.gz && \
- mkdir -p ${PREFIX}/include/stb && \
- cp ./*.h ${PREFIX}/include/stb
-
# LMS
COPY . /tmp/lms/
ARG LMS_BUILD_TYPE="Release"
diff --git a/approot/messages.xml b/approot/messages.xml
index 1bbe9621..3b338585 100644
--- a/approot/messages.xml
+++ b/approot/messages.xml
@@ -76,13 +76,14 @@
Scanned {1} files in {2} on {3} ({4} errors, {5} duplicates)
No audio track
Duplicated file hash
-Duplicated recording MBID
+Duplicated track MBID
Scan now
Scanner
Status
Not scheduled
Scheduled on {1}
Scanning: step {1}/{2}
+Checking for duplicate files... {1} files
Checking files... {1}%
Discovering files: {1} files
Fetching track features from AcousticBrainz: {1}/{2} tracks ({3}%)...
@@ -210,7 +211,6 @@
Clear
Create new playlist
Play Queue
-Play Queue full!
Radio mode
Repeat
Replace existing playlist
diff --git a/approot/messages_fr.xml b/approot/messages_fr.xml
index 48d8c295..850d261e 100644
--- a/approot/messages_fr.xml
+++ b/approot/messages_fr.xml
@@ -76,13 +76,14 @@
{1} fichiers scannés en {2} le {3} ({4} erreurs, {5} duplicatas)
Pas de piste audio
Hash dupliqué
-Recording MBID dupliqué
+Track MBID dupliqué
Lancer un scan
Scanner
Statut
Non planifié
Planifié le {1}
En cours de scan : étape {1}/{2}
+Vérification des fichiers dupliqués... {1} fichiers
Vérification des fichiers... {1}%
Découverte des fichiers : {1} fichiers
Récupération des métadonnées AcousticBrainz : {1}/{2} fichiers ({3}%)...
@@ -210,7 +211,6 @@
Effacer
Créer une nouvelle liste de lecture
Liste de lecture
-Liste de lecture pleine!
Mode radio
Repéter
Remplacer une liste de lecture existante
diff --git a/approot/messages_it.xml b/approot/messages_it.xml
index 3ed491c8..77712086 100644
--- a/approot/messages_it.xml
+++ b/approot/messages_it.xml
@@ -76,13 +76,14 @@
Scansionati {1} files in {2} su {3} ({4} errori, {5} duplicati)
Nessuna traccia audio
Hash doppio
-Recording MBID doppio
+Track MBID doppio
Scansiona ora
Scanner
Stato
Non pianificato
Pianificato il {1}
Scansione: passo {1}/{2}
+
Controllo file... {1}%
File trovati: {1} files
Recupero metadati da AcousticBrainz: {1}/{2} tracce ({3}%)...
@@ -210,7 +211,6 @@
Cancella
Coda di riproduzione
-Coda di riproduzione piena!
Modalità radio
Ripeti
diff --git a/approot/messages_zh.xml b/approot/messages_zh.xml
index e685897f..99542a29 100644
--- a/approot/messages_zh.xml
+++ b/approot/messages_zh.xml
@@ -83,6 +83,7 @@
无计划
计划于 {1}
扫描中: 阶段 {1}/{2}
+
检查文件中... {1}%
检索文件中: {1} 文件
从 AcousticBrainz 获取音轨特征: {1}/{2} 音轨 ({3}%)...
@@ -214,7 +215,6 @@
播放队列
-播放队列已满!
广播模式
循环播放
替换现有播放列表
diff --git a/cmake/modules/FindSTB.cmake b/cmake/modules/FindSTB.cmake
index 10e8afdc..9da76b57 100644
--- a/cmake/modules/FindSTB.cmake
+++ b/cmake/modules/FindSTB.cmake
@@ -1,4 +1,4 @@
-find_path(STB_INCLUDE_DIR stb/stb_image.h)
+find_path(STB_INCLUDE_DIR stb_image.h PATH_SUFFIXES stb)
include(FindPackageHandleStandardArgs)
diff --git a/conf/lms.conf b/conf/lms.conf
index 5729eaa9..4454eff4 100644
--- a/conf/lms.conf
+++ b/conf/lms.conf
@@ -78,8 +78,11 @@ cover-jpeg-quality = 75;
# Preferred file names for covers (order is important)
cover-preferred-file-names = ("cover", "front" );
+# Playqueue max entry count
+playqueue-max-entry-count = 1000;
+
# Set to true if you want to hide duplicate tracks
-scanner-skip-duplicate-recording-mbid = false;
+scanner-skip-duplicate-mbid = false;
# Scanner read style for metadata, maybe be 'fast', 'average' or 'accurate'
scanner-parser-read-style = "accurate";
diff --git a/src/libs/av/impl/TranscodeResourceHandler.cpp b/src/libs/av/impl/TranscodeResourceHandler.cpp
index 5e85b72e..6535f806 100644
--- a/src/libs/av/impl/TranscodeResourceHandler.cpp
+++ b/src/libs/av/impl/TranscodeResourceHandler.cpp
@@ -56,6 +56,7 @@ namespace Av
if (_estimatedContentLength)
response.setContentLength(*_estimatedContentLength);
response.setMimeType(_transcoder.getOutputMimeType());
+ LMS_LOG(TRANSCODE, DEBUG) << "Set mime type to " << _transcoder.getOutputMimeType();
if (_bytesReadyCount > 0)
{
diff --git a/src/libs/image/impl/stb/JPEGImage.cpp b/src/libs/image/impl/stb/JPEGImage.cpp
index 4bfcef4c..280fcd6e 100644
--- a/src/libs/image/impl/stb/JPEGImage.cpp
+++ b/src/libs/image/impl/stb/JPEGImage.cpp
@@ -20,7 +20,7 @@
#include "JPEGImage.hpp"
#define STB_IMAGE_WRITE_IMPLEMENTATION
-#include
+#include
#include "image/Exception.hpp"
#include "RawImage.hpp"
diff --git a/src/libs/image/impl/stb/RawImage.cpp b/src/libs/image/impl/stb/RawImage.cpp
index a68f36b9..ba7a80b9 100644
--- a/src/libs/image/impl/stb/RawImage.cpp
+++ b/src/libs/image/impl/stb/RawImage.cpp
@@ -25,8 +25,8 @@
#define STBIR_DEFAULT_FILTER_DOWNSAMPLE STBIR_FILTER_MITCHELL
#define STBIR_DEFAULT_FILTER_UPSAMPLE STBIR_FILTER_CATMULLROM
-#include
-#include
+#include
+#include
#include "JPEGImage.hpp"
diff --git a/src/libs/services/database/impl/Track.cpp b/src/libs/services/database/impl/Track.cpp
index cb2fad61..89af7b53 100644
--- a/src/libs/services/database/impl/Track.cpp
+++ b/src/libs/services/database/impl/Track.cpp
@@ -209,6 +209,18 @@ Track::exists(Session& session, TrackId id)
return session.getDboSession().query("SELECT 1 from track").where("id = ?").bind(id).resultValue() == 1;
}
+std::vector
+Track::findByMBID(Session& session, const UUID& mbid)
+{
+ session.checkSharedLocked();
+
+ auto res {session.getDboSession().find