diff --git a/Dockerfile-release b/Dockerfile-release index a4702988..4dc15e78 100644 --- a/Dockerfile-release +++ b/Dockerfile-release @@ -30,7 +30,7 @@ ARG BUILD_PACKAGES=" \ boost-dev \ libarchive-dev \ libconfig-dev \ - taglib-dev \ + utfcpp \ sqlite-dev \ gtest-dev" @@ -67,9 +67,9 @@ RUN \ --enable-libopus \ --enable-libvorbis \ --disable-everything \ - --enable-decoder=aac*,ac3*,alac,als,flac,mp3*,libopus,pcm*,libvorbis,wavpack,wma*,libopenjpg,png \ + --enable-decoder=aac*,ac3*,alac,als,dsd*,flac,mp3*,libopus,pcm*,libvorbis,wavpack,wma*,libopenjpg,png \ --enable-encoder=libmp3lame,libopus,libvorbis \ - --enable-demuxer=aac,aiff,asf,flac,ipod,ogg,matroska,mov,mp3,mp4,wav,wv,webm \ + --enable-demuxer=aac,aiff,asf,dsf,flac,ipod,ogg,matroska,mov,mp3,mp4,wav,wv,webm \ --enable-muxer=ogg,matroska,mp3,webm \ --enable-protocol=file,pipe \ --enable-filter=aresample \ @@ -100,6 +100,19 @@ RUN \ mkdir -p ${PREFIX}/include/stb && \ cp ./*.h ${PREFIX}/include/stb +# TAGLIB +ARG TAGLIB_VERSION=v2.0.1 +RUN \ + DIR=/tmp/taglib && mkdir -p ${DIR} && cd ${DIR} && \ + curl -sLO https://github.com/taglib/taglib/archive/${TAGLIB_VERSION}.tar.gz && \ + tar -x --strip-components=1 -f ${TAGLIB_VERSION}.tar.gz + +RUN \ + DIR=/tmp/taglib && mkdir -p ${DIR} && cd ${DIR} && \ + CXXFLAGS="-I/usr/include/utf8cpp" cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${PREFIX} -DBUILD_SHARED_LIBS=ON -DBUILD_EXAMPLES=OFF -DBUILD_BINDINGS=OFF -DBUILD_TESTING=OFF -DTRACE_IN_RELEASE=OFF -DWITH_ZLIB=ON && \ + make -j$(nproc) && \ + make install + # LMS COPY . /tmp/lms/ RUN \ @@ -154,8 +167,7 @@ ARG RUNTIME_PACKAGES=" \ boost-thread \ libarchive \ libconfig++ \ - sqlite-libs \ - taglib" + sqlite-libs" ARG LMS_USER=lms ARG LMS_GROUP=lms diff --git a/src/libs/database/impl/Migration.cpp b/src/libs/database/impl/Migration.cpp index 5db01f67..017ca20e 100644 --- a/src/libs/database/impl/Migration.cpp +++ b/src/libs/database/impl/Migration.cpp @@ -34,7 +34,7 @@ namespace lms::db { namespace { - static constexpr Version LMS_DATABASE_VERSION{ 58 }; + static constexpr Version LMS_DATABASE_VERSION{ 59 }; } VersionInfo::VersionInfo() @@ -466,6 +466,12 @@ SELECT session.getDboSession()->execute("DROP INDEX cluster_name_idx"); } + void migrateFromV58(Session& session) + { + // DSF support + session.getDboSession()->execute("UPDATE scan_settings SET audio_file_extensions = audio_file_extensions || ' .dsf'"); + } + bool doDbMigration(Session& session) { static const std::string outdatedMsg{ "Outdated database, please rebuild it (delete the .db file and restart)" }; @@ -501,6 +507,7 @@ SELECT {55, migrateFromV55}, {56, migrateFromV56}, {57, migrateFromV57}, + {58, migrateFromV58}, }; bool migrationPerformed{}; diff --git a/src/libs/database/include/database/ScanSettings.hpp b/src/libs/database/include/database/ScanSettings.hpp index 1de5fa40..3275f2ad 100644 --- a/src/libs/database/include/database/ScanSettings.hpp +++ b/src/libs/database/include/database/ScanSettings.hpp @@ -99,7 +99,7 @@ namespace lms::db Wt::WTime _startTime = Wt::WTime{ 0,0,0 }; UpdatePeriod _updatePeriod{ UpdatePeriod::Never }; SimilarityEngineType _similarityEngineType{ SimilarityEngineType::Clusters }; - std::string _audioFileExtensions{ ".alac .mp3 .ogg .oga .aac .m4a .m4b .flac .wav .wma .aif .aiff .ape .mpc .shn .opus .wv" }; + std::string _audioFileExtensions{ ".alac .mp3 .ogg .oga .aac .m4a .m4b .flac .wav .wma .aif .aiff .ape .mpc .shn .opus .wv .dsf" }; std::string _extraTagsToScan; std::string _artistTagDelimiters; std::string _defaultTagDelimiters; diff --git a/src/libs/metadata/impl/TagLibTagReader.cpp b/src/libs/metadata/impl/TagLibTagReader.cpp index 8799a353..fe3735b7 100644 --- a/src/libs/metadata/impl/TagLibTagReader.cpp +++ b/src/libs/metadata/impl/TagLibTagReader.cpp @@ -24,6 +24,9 @@ #include #include #include +#if TAGLIB_MAJOR_VERSION >= 2 +#include +#endif #include #include #include @@ -328,6 +331,10 @@ namespace lms::metadata _audioProperties.bitsPerSample = mp4Properties->bitsPerSample(); else if (const auto * wavePackProperties{ dynamic_cast(properties) }) _audioProperties.bitsPerSample = wavePackProperties->bitsPerSample(); +#if TAGLIB_MAJOR_VERSION >= 2 + else if (const auto * dsfProperties{ dynamic_cast(properties) }) + _audioProperties.bitsPerSample = dsfProperties->bitsPerSample(); +#endif } void TagLibTagReader::visitTagValues(TagType tag, TagValueVisitor visitor) const