From d8b47d579b6bec79ab0f8ff47e1578536f1691ff Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 1 Feb 2023 20:56:56 +0100 Subject: [PATCH] Use TrackMBID to check for duplicated music files. fixes #306 --- approot/messages.xml | 2 +- approot/messages_fr.xml | 2 +- approot/messages_it.xml | 2 +- src/libs/services/database/impl/Track.cpp | 6 +++--- .../services/database/include/services/database/Track.hpp | 2 +- src/libs/services/scanner/impl/ScannerService.cpp | 8 ++++---- .../scanner/include/services/scanner/ScannerStats.hpp | 2 +- src/lms/ui/admin/ScannerController.cpp | 4 ++-- 8 files changed, 14 insertions(+), 14 deletions(-) diff --git a/approot/messages.xml b/approot/messages.xml index 1bbe9621..1f6add56 100644 --- a/approot/messages.xml +++ b/approot/messages.xml @@ -76,7 +76,7 @@ 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 diff --git a/approot/messages_fr.xml b/approot/messages_fr.xml index 48d8c295..95afa35c 100644 --- a/approot/messages_fr.xml +++ b/approot/messages_fr.xml @@ -76,7 +76,7 @@ {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 diff --git a/approot/messages_it.xml b/approot/messages_it.xml index 3ed491c8..5c21c420 100644 --- a/approot/messages_it.xml +++ b/approot/messages_it.xml @@ -76,7 +76,7 @@ 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 diff --git a/src/libs/services/database/impl/Track.cpp b/src/libs/services/database/impl/Track.cpp index cb2fad61..6977edef 100644 --- a/src/libs/services/database/impl/Track.cpp +++ b/src/libs/services/database/impl/Track.cpp @@ -247,12 +247,12 @@ Track::findPaths(Session& session, Range range) } RangeResults -Track::findRecordingMBIDDuplicates(Session& session, Range range) +Track::findTrackMBIDDuplicates(Session& session, Range range) { session.checkSharedLocked(); - auto query {session.getDboSession().query( "SELECT track.id FROM track WHERE recording_mbid in (SELECT recording_mbid FROM track WHERE recording_mbid <> '' GROUP BY recording_mbid HAVING COUNT (*) > 1)") - .orderBy("track.release_id,track.disc_number,track.track_number,track.recording_mbid")}; + auto query {session.getDboSession().query( "SELECT track.id FROM track WHERE mbid in (SELECT mbid FROM track WHERE mbid <> '' GROUP BY mbid HAVING COUNT (*) > 1)") + .orderBy("track.release_id,track.disc_number,track.track_number,track.mbid")}; return Utils::execQuery(query, range); } diff --git a/src/libs/services/database/include/services/database/Track.hpp b/src/libs/services/database/include/services/database/Track.hpp index 60edfc95..d97bfc5e 100644 --- a/src/libs/services/database/include/services/database/Track.hpp +++ b/src/libs/services/database/include/services/database/Track.hpp @@ -114,7 +114,7 @@ class Track : public Object static RangeResults find(Session& session, const FindParameters& parameters); static RangeResults findPaths(Session& session, Range range); - static RangeResults findRecordingMBIDDuplicates(Session& session, Range range); + static RangeResults findTrackMBIDDuplicates(Session& session, Range range); static RangeResults findWithRecordingMBIDAndMissingFeatures(Session& session, Range range); // Accessors diff --git a/src/libs/services/scanner/impl/ScannerService.cpp b/src/libs/services/scanner/impl/ScannerService.cpp index d63c2826..ce06b546 100644 --- a/src/libs/services/scanner/impl/ScannerService.cpp +++ b/src/libs/services/scanner/impl/ScannerService.cpp @@ -987,14 +987,14 @@ ScannerService::checkDuplicatedAudioFiles(ScanStats& stats) auto transaction {_dbSession.createSharedTransaction()}; - const RangeResults tracks = Track::findRecordingMBIDDuplicates(_dbSession, Range {}); + const RangeResults tracks = Track::findTrackMBIDDuplicates(_dbSession, Range {}); for (const TrackId trackId : tracks.results) { const Track::pointer track {Track::find(_dbSession, trackId)}; - if (auto recordingMBID {track->getRecordingMBID()}) + if (auto trackMBID {track->getTrackMBID()}) { - LMS_LOG(DBUPDATER, INFO) << "Found duplicated recording MBID [" << recordingMBID->getAsString() << "], file: " << track->getPath().string() << " - " << track->getName(); - stats.duplicates.emplace_back(ScanDuplicate {track->getId(), DuplicateReason::SameRecordingMBID}); + LMS_LOG(DBUPDATER, INFO) << "Found duplicated track MBID [" << trackMBID->getAsString() << "], file: " << track->getPath().string() << " - " << track->getName(); + stats.duplicates.emplace_back(ScanDuplicate {track->getId(), DuplicateReason::SameTrackMBID}); } } diff --git a/src/libs/services/scanner/include/services/scanner/ScannerStats.hpp b/src/libs/services/scanner/include/services/scanner/ScannerStats.hpp index 53f79d52..b6b0a436 100644 --- a/src/libs/services/scanner/include/services/scanner/ScannerStats.hpp +++ b/src/libs/services/scanner/include/services/scanner/ScannerStats.hpp @@ -39,7 +39,7 @@ namespace Scanner enum class DuplicateReason { SameHash, - SameRecordingMBID, + SameTrackMBID, }; struct ScanError diff --git a/src/lms/ui/admin/ScannerController.cpp b/src/lms/ui/admin/ScannerController.cpp index e1754b8f..c8bd0a39 100644 --- a/src/lms/ui/admin/ScannerController.cpp +++ b/src/lms/ui/admin/ScannerController.cpp @@ -103,7 +103,7 @@ class ReportResource : public Wt::WResource response.out() << track->getPath().string(); if (auto mbid {track->getTrackMBID()}) - response.out() << " (Recording MBID " << mbid->getAsString() << ")"; + response.out() << " (Track MBID " << mbid->getAsString() << ")"; response.out() << " - " << duplicateReasonToWString(duplicate.reason).toUTF8() << '\n'; } @@ -129,7 +129,7 @@ class ReportResource : public Wt::WResource switch (reason) { case Scanner::DuplicateReason::SameHash: return Wt::WString::tr("Lms.Admin.ScannerController.same-hash"); - case Scanner::DuplicateReason::SameRecordingMBID: return Wt::WString::tr("Lms.Admin.ScannerController.same-mbid"); + case Scanner::DuplicateReason::SameTrackMBID: return Wt::WString::tr("Lms.Admin.ScannerController.same-mbid"); } return "?"; }