diff --git a/.clang-tidy b/.clang-tidy
new file mode 100644
index 00000000..9018ceaa
--- /dev/null
+++ b/.clang-tidy
@@ -0,0 +1,13 @@
+---
+Checks: '-*,bugprone-*,concurrency-*,cppcoreguidelines-*,misc-*,-misc-include-cleaner,-misc-no-recursion,performance*,portability-*,readability-*,-readability-braces-around-statements,-readability-identifier-length,-readability-implicit-bool-conversion'
+WarningsAsErrors: ''
+HeaderFilterRegex: ''
+AnalyzeTemporaryDtors: false
+FormatStyle: none
+User: ''
+CheckOptions:
+ - key: readability-identifier-naming.IgnoreClassesWithAllMemberVariablesBeingPublic
+ value: '1'
+ - key: cppcoreguidelines-avoid-do-while.IgnoreMacros
+ value: '1'
+...
diff --git a/.gitignore b/.gitignore
index 761aaa87..b8617e34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
CMakeCache.txt
CMakeFiles/
build/
+.vscode/
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 369ef896..0da122b0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,11 +10,16 @@ if (UNIX)
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined")
endif ()
-include(CTest)
+option(ENABLE_TESTS "Enable tests" ON)
+
+if(ENABLE_TESTS)
+ include(CTest)
+ find_package(GTest REQUIRED)
+endif()
+
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
find_package(Filesystem REQUIRED)
-find_package(GTest REQUIRED)
find_package(Boost REQUIRED COMPONENTS system program_options)
find_package(Wt REQUIRED COMPONENTS Wt Dbo DboSqlite3 HTTP)
pkg_check_modules(Taglib REQUIRED IMPORTED_TARGET taglib)
diff --git a/approot/admin-tracing.xml b/approot/admin-tracing.xml
new file mode 100644
index 00000000..eeb1ad43
--- /dev/null
+++ b/approot/admin-tracing.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
diff --git a/approot/main.xml b/approot/main.xml
index 3facacf1..aad114b9 100644
--- a/approot/main.xml
+++ b/approot/main.xml
@@ -49,6 +49,7 @@
${scan-settings class="dropdown-item"}
${scanner class="dropdown-item"}
${users class="dropdown-item"}
+ ${tracing class="dropdown-item"}
${}
diff --git a/approot/messages.xml b/approot/messages.xml
index d774dec0..e78a91e9 100644
--- a/approot/messages.xml
+++ b/approot/messages.xml
@@ -47,6 +47,7 @@
+
@@ -64,9 +65,9 @@
Root directory
-Delimiter to be used for splitting artist tags (only if the file does not contain any multi-valued tag)
+Delimiter to be used for splitting artist tags
Daily
-Delimiter to be used for splitting other tags (only if the file does not contain any multi-valued tag)
+Delimiter to be used for splitting other tags
Hourly
Scan now!
@@ -113,6 +114,10 @@
Scanning files: {1}/{2} files ({3}%)...
Step status
+
+Export traces
+Tracing
+
New user
Admin
diff --git a/approot/messages_fr.xml b/approot/messages_fr.xml
index c4af2527..b0627408 100644
--- a/approot/messages_fr.xml
+++ b/approot/messages_fr.xml
@@ -47,6 +47,7 @@
+
@@ -64,9 +65,9 @@
Répertoire racine
-Délimiteur à utiliser pour séparer les tags d'artistes (uniquement si le fichier ne contient pas de tag à valeurs multiples)
+Délimiteur à utiliser pour séparer les tags d'artistes
Tous les jours
-Délimiteur à utiliser pour séparer les autres tags (uniquement si le fichier ne contient pas de tag à valeurs multiples)
+Délimiteur à utiliser pour séparer les autres tags
Toutes les heures
Scanner maintenant !
@@ -113,6 +114,10 @@
Scan des fichiers : {1}/{2} fichiers ({3}%)...
Statut de l'étape
+
+Exporter les traces
+Traces
+
Ajouter
Admin
diff --git a/approot/messages_it.xml b/approot/messages_it.xml
index f7136b27..aa675ec5 100644
--- a/approot/messages_it.xml
+++ b/approot/messages_it.xml
@@ -47,6 +47,7 @@
+
@@ -64,9 +65,9 @@
Cartella principale
-Delimitatore da utilizzare per separare i tag degli artisti (solo se il file non contiene alcun tag con valori multipli)
+Delimitatore da utilizzare per separare i tag degli artisti
Giornaliera
-Delimitatore da utilizzare per separare gli altri tag (solo se il file non contiene alcun tag con valori multipli)
+Delimitatore da utilizzare per separare gli altri tag
Ogni ora
Scansiona ora!
@@ -113,6 +114,10 @@
Scansione files: {1}/{2} files ({3}%)...
Stato passo
+
+Esporta tracce
+Tracing
+
Nuovo utente
Amministratore
diff --git a/approot/messages_zh.xml b/approot/messages_zh.xml
index 2a06a2a1..3a89f689 100644
--- a/approot/messages_zh.xml
+++ b/approot/messages_zh.xml
@@ -49,6 +49,7 @@
+
@@ -83,6 +84,7 @@
更新开始时间
每周
+
无法获得音轨时间
无法解析文件
@@ -112,6 +114,10 @@
扫描文件中: {1}/{2} 个文件 ({3}%)...
当前步骤状态
+
+
+
+
新建用户
管理员
diff --git a/conf/lms.conf b/conf/lms.conf
index e65b63bd..58d89bbb 100644
--- a/conf/lms.conf
+++ b/conf/lms.conf
@@ -93,6 +93,13 @@ artist-image-file-names = ("artist");
# Playqueue max entry count
playqueue-max-entry-count = 1000;
+# Internal tracing for profiling purposes. Enable only if necessary, as it incurs some runtime overhead!
+# Possible values are "disabled", "overview" or "detailed".
+# If enabled, data has to be dumped in the tracing view located in the admin menu
+tracing-level = "disabled";
+# The tracing buffer size, in MBytes (min is 16)
+tracing-buffer-size = 16;
+
# Set to true if you want to hide duplicate tracks
scanner-skip-duplicate-mbid = false;
diff --git a/src/libs/CMakeLists.txt b/src/libs/CMakeLists.txt
index 72f9ecf1..72a280ca 100644
--- a/src/libs/CMakeLists.txt
+++ b/src/libs/CMakeLists.txt
@@ -1,8 +1,8 @@
add_subdirectory(av)
+add_subdirectory(core)
add_subdirectory(database)
add_subdirectory(image)
add_subdirectory(metadata)
add_subdirectory(services)
add_subdirectory(som)
add_subdirectory(subsonic)
-add_subdirectory(utils)
diff --git a/src/libs/av/CMakeLists.txt b/src/libs/av/CMakeLists.txt
index fee1201e..3db2d5e7 100644
--- a/src/libs/av/CMakeLists.txt
+++ b/src/libs/av/CMakeLists.txt
@@ -18,7 +18,7 @@ target_include_directories(lmsav PRIVATE
)
target_link_libraries(lmsav PUBLIC
- lmsutils
+ lmscore
std::filesystem
)
@@ -26,5 +26,5 @@ target_link_libraries(lmsav PRIVATE
PkgConfig::LIBAV
)
-install(TARGETS lmsav DESTINATION lib)
+install(TARGETS lmsav DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/src/libs/av/impl/AudioFile.cpp b/src/libs/av/impl/AudioFile.cpp
index e739c57b..9184e6b6 100644
--- a/src/libs/av/impl/AudioFile.cpp
+++ b/src/libs/av/impl/AudioFile.cpp
@@ -31,10 +31,10 @@ extern "C"
#include