Skip to content

Commit da19d4c

Browse files
committed
Use timer to not pick up changes in temporary tracks.
1 parent 573518f commit da19d4c

2 files changed

Lines changed: 25 additions & 11 deletions

File tree

src/library/trackcollectionmanager.cpp

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,17 @@ TrackCollectionManager::TrackCollectionManager(QObject* parent,
7575
} else {
7676
m_pScanner = std::make_unique<LibraryScanner>(pDbConnectionPool, pConfig);
7777

78+
connect(m_pScanner.get(),
79+
&LibraryScanner::scanFinished,
80+
this,
81+
&TrackCollectionManager::slotScanFinished);
82+
7883
// Forward signals
7984
connect(m_pScanner.get(),
8085
&LibraryScanner::scanStarted,
8186
this,
8287
&TrackCollectionManager::libraryScanStarted,
8388
/*signal-to-signal*/ Qt::DirectConnection);
84-
connect(m_pScanner.get(),
85-
&LibraryScanner::scanFinished,
86-
this,
87-
&TrackCollectionManager::libraryScanFinished,
88-
/*signal-to-signal*/ Qt::DirectConnection);
8989
connect(m_pScanner.get(),
9090
&LibraryScanner::scanSummary,
9191
this,
@@ -644,21 +644,26 @@ bool TrackCollectionManager::updateTrackMood(
644644
}
645645
#endif // __EXTRA_METADATA__
646646

647-
void TrackCollectionManager::slotIncomingDirectoryChanged(const QString& path) {
647+
void TrackCollectionManager::slotIncomingDirectoryChanged() {
648648
VERIFY_OR_DEBUG_ASSERT(m_pScanner) {
649649
return;
650650
}
651651

652-
if (path.isEmpty() || !m_pScanner->isIdle()) {
652+
QStringList dirs = m_incommingDirWatcher.directories();
653+
if (dirs.isEmpty()) {
654+
return;
655+
}
656+
if (!m_pScanner->isIdle()) {
657+
m_incommingDirChangePending = true;
653658
return;
654659
}
655660

656-
auto fi = QFileInfo(path);
661+
auto fi = QFileInfo(dirs.first());
657662
const QString absPath = fi.absoluteFilePath();
658663

659664
kLogger.info() << "Incoming directory changed, starting scan for:" << absPath;
660665

661-
m_pScanner->scanDir(path);
666+
m_pScanner->scanDir(absPath);
662667
}
663668

664669
void TrackCollectionManager::initIncommingDirWatcher(const QString& incommingTracksDir) {
@@ -680,10 +685,17 @@ void TrackCollectionManager::initIncommingDirWatcher(const QString& incommingTra
680685
<< incomingDirPath;
681686
} else {
682687
kLogger.info() << "Watching incoming tracks directory" << incomingDirPath;
688+
m_incommingDirTimer.setSingleShot(true);
689+
connect(&m_incommingDirTimer,
690+
&QTimer::timeout,
691+
this,
692+
&TrackCollectionManager::slotIncomingDirectoryChanged);
683693
connect(&m_incommingDirWatcher,
684694
&QFileSystemWatcher::directoryChanged,
685695
this,
686-
&TrackCollectionManager::slotIncomingDirectoryChanged);
696+
[this]() {
697+
m_incommingDirTimer.start(2000);
698+
});
687699
}
688700
}
689701

src/library/trackcollectionmanager.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <QFileSystemWatcher>
55
#include <QList>
66
#include <QSet>
7+
#include <QTimer>
78
#include <memory>
89

910
#include "library/dao/directorydao.h"
@@ -107,7 +108,7 @@ class TrackCollectionManager: public QObject,
107108
public slots:
108109
void startLibraryScan();
109110
void stopLibraryScan();
110-
void slotIncomingDirectoryChanged(const QString& path);
111+
void slotIncomingDirectoryChanged();
111112
void slotScanFinished();
112113

113114
private:
@@ -142,5 +143,6 @@ class TrackCollectionManager: public QObject,
142143
std::unique_ptr<LibraryScanner> m_pScanner;
143144

144145
QFileSystemWatcher m_incommingDirWatcher;
146+
QTimer m_incommingDirTimer;
145147
bool m_incommingDirChangePending;
146148
};

0 commit comments

Comments
 (0)