From 49f0d40515600560d9534bb91dea2f85da438cc4 Mon Sep 17 00:00:00 2001 From: emeric Date: Sat, 20 Aug 2022 14:27:54 +0200 Subject: [PATCH] Handle track duration with milliseconds precision. ref #244 --- src/libs/metadata/impl/TagLibParser.cpp | 2 +- src/libs/services/database/impl/Migration.cpp | 10 ++++++++++ src/libs/services/database/impl/Migration.hpp | 2 +- src/tools/metadata/LmsMetadata.cpp | 4 ++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/libs/metadata/impl/TagLibParser.cpp b/src/libs/metadata/impl/TagLibParser.cpp index 0e8d827c..cad5f258 100644 --- a/src/libs/metadata/impl/TagLibParser.cpp +++ b/src/libs/metadata/impl/TagLibParser.cpp @@ -286,7 +286,7 @@ TagLibParser::parse(const std::filesystem::path& p, bool debug) { const TagLib::AudioProperties *properties {f.audioProperties() }; - track.duration = std::chrono::milliseconds {properties->length() * 1000}; + track.duration = std::chrono::milliseconds {properties->lengthInMilliseconds()}; MetaData::AudioStream audioStream {static_cast(properties->bitrate() * 1000)}; track.audioStreams = {std::move(audioStream)}; diff --git a/src/libs/services/database/impl/Migration.cpp b/src/libs/services/database/impl/Migration.cpp index ef897499..b78a5138 100644 --- a/src/libs/services/database/impl/Migration.cpp +++ b/src/libs/services/database/impl/Migration.cpp @@ -591,6 +591,15 @@ CREATE TABLE IF NOT EXISTS "track_artist_link_backup" ( session.getDboSession().execute("ALTER TABLE tracklist ADD last_modified_date_time TEXT"); } + static + void + migrateFromV36(Session& session) + { + // Increased precision for track durations (now in milliseconds instead of secodns) + // Just increment the scan version of the settings to make the next scheduled scan rescan everything + ScanSettings::get(session).modify()->incScanVersion(); + } + void doDbMigration(Session& session) { @@ -633,6 +642,7 @@ CREATE TABLE IF NOT EXISTS "track_artist_link_backup" ( {33, migrateFromV33}, {34, migrateFromV34}, {35, migrateFromV35}, + {36, migrateFromV36}, }; while (1) diff --git a/src/libs/services/database/impl/Migration.hpp b/src/libs/services/database/impl/Migration.hpp index 2e7f2f04..9a84c0b4 100644 --- a/src/libs/services/database/impl/Migration.hpp +++ b/src/libs/services/database/impl/Migration.hpp @@ -26,7 +26,7 @@ namespace Database class Session; using Version = std::size_t; - static constexpr Version LMS_DATABASE_VERSION {36}; + static constexpr Version LMS_DATABASE_VERSION {37}; class VersionInfo { public: diff --git a/src/tools/metadata/LmsMetadata.cpp b/src/tools/metadata/LmsMetadata.cpp index a64bd501..3d674da9 100644 --- a/src/tools/metadata/LmsMetadata.cpp +++ b/src/tools/metadata/LmsMetadata.cpp @@ -69,7 +69,7 @@ void parse(MetaData::IParser& parser, const std::filesystem::path& file) } const auto end {std::chrono::steady_clock::now()}; - std::cout << "Parsing time: " << std::chrono::duration_cast(end - start).count() / 1000. << "ms" << std::endl; + std::cout << "Parsing time: " << std::fixed << std::setprecision(2) << std::chrono::duration_cast(end - start).count() / 1000. << "ms" << std::endl; std::cout << "Track metadata:" << std::endl; @@ -117,7 +117,7 @@ void parse(MetaData::IParser& parser, const std::filesystem::path& file) } } - std::cout << "Duration: " << track->duration.count() / 1000 << "s" << std::endl; + std::cout << "Duration: " << std::fixed << std::setprecision(2) << track->duration.count() / 1000. << "s" << std::endl; if (track->trackNumber) std::cout << "Track: " << *track->trackNumber << std::endl;