From 5ad53e0af5c3b43e7b01f298f0c7fdec54178e61 Mon Sep 17 00:00:00 2001 From: Christopher Reichert Date: Sat, 30 Jun 2012 15:34:00 -0500 Subject: [PATCH] Manage queued scan type in ScanManager. --- src/libtomahawk/filemetadata/ScanManager.cpp | 20 +++++++++++++++++++- src/libtomahawk/filemetadata/ScanManager.h | 4 +++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/libtomahawk/filemetadata/ScanManager.cpp b/src/libtomahawk/filemetadata/ScanManager.cpp index a57060007..b67a3e224 100644 --- a/src/libtomahawk/filemetadata/ScanManager.cpp +++ b/src/libtomahawk/filemetadata/ScanManager.cpp @@ -50,6 +50,7 @@ ScanManager::ScanManager( QObject* parent ) , m_musicScannerThreadController( 0 ) , m_currScannerPaths() , m_cachedScannerDirs() + , m_queuedScanType( None ) { s_instance = this; @@ -157,6 +158,8 @@ ScanManager::runNormalScan( bool manualFull ) if ( m_musicScannerThreadController || !m_scanner.isNull() ) //still running if these are not zero { + if ( m_queuedScanType != Full ) + m_queuedScanType = manualFull ? Full : Normal; tDebug( LOGVERBOSE ) << "Could not run dir scan, old scan still running"; return; } @@ -176,7 +179,6 @@ ScanManager::runNormalScan( bool manualFull ) DatabaseCommand_FileMtimes *cmd = new DatabaseCommand_FileMtimes( true ); connect( cmd, SIGNAL( done( const QMap< QString, QMap< unsigned int, unsigned int > >& ) ), SLOT( fileMtimesCheck( const QMap< QString, QMap< unsigned int, unsigned int > >& ) ) ); - Database::instance()->enqueue( QSharedPointer< DatabaseCommand >( cmd ) ); } @@ -203,6 +205,8 @@ ScanManager::runFileScan( const QStringList &paths ) if ( m_musicScannerThreadController || !m_scanner.isNull() ) //still running if these are not zero { + if ( m_queuedScanType == None ) + m_queuedScanType = File; tDebug( LOGVERBOSE ) << "Could not run file scan, old scan still running"; return; } @@ -273,6 +277,20 @@ ScanManager::scannerFinished() m_musicScannerThreadController = 0; } + switch ( m_queuedScanType ) { + + case Full: + case Normal: + runNormalScan( m_queuedScanType == Full ); + break; + case File: + runFileScan(); + break; + default: + break; + } + + m_queuedScanType = None; m_scanTimer->start(); m_currScannerPaths.clear(); SourceList::instance()->getLocal()->scanningFinished( 0 ); diff --git a/src/libtomahawk/filemetadata/ScanManager.h b/src/libtomahawk/filemetadata/ScanManager.h index ec29e63ee..4bd549121 100644 --- a/src/libtomahawk/filemetadata/ScanManager.h +++ b/src/libtomahawk/filemetadata/ScanManager.h @@ -41,6 +41,7 @@ Q_OBJECT public: enum ScanMode { DirScan, FileScan }; + enum ScanType { None, Full, Normal, File }; static ScanManager* instance(); @@ -51,7 +52,7 @@ signals: void finished(); public slots: - void runFileScan( const QStringList &paths ); + void runFileScan( const QStringList &paths = QStringList() ); void runFullRescan(); void runNormalScan( bool manualFull = false ); @@ -77,6 +78,7 @@ private: QStringList m_cachedScannerDirs; QTimer* m_scanTimer; + ScanType m_queuedScanType; }; #endif