From c2884e696ff674f83354e55531b1d4f804365237 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Fri, 20 May 2011 14:24:59 -0400 Subject: [PATCH] More updates for file-mtime scanning --- .../database/databasecommand_filemtimes.cpp | 21 +++++++++++----- .../database/databasecommand_filemtimes.h | 7 ++---- src/musicscanner.cpp | 24 ++++++++++++++++--- src/musicscanner.h | 6 ++--- src/scanmanager.cpp | 3 ++- src/tomahawkapp.cpp | 1 + 6 files changed, 44 insertions(+), 18 deletions(-) diff --git a/src/libtomahawk/database/databasecommand_filemtimes.cpp b/src/libtomahawk/database/databasecommand_filemtimes.cpp index 838aa181f..be371bce9 100644 --- a/src/libtomahawk/database/databasecommand_filemtimes.cpp +++ b/src/libtomahawk/database/databasecommand_filemtimes.cpp @@ -33,14 +33,19 @@ DatabaseCommand_FileMtimes::exec( DatabaseImpl* dbi ) void DatabaseCommand_FileMtimes::execSelect( DatabaseImpl* dbi ) { + qDebug() << Q_FUNC_INFO; //FIXME: If ever needed for a non-local source this will have to be fixed/updated - QMap mtimes; + QMap< QString, QMap< unsigned int, unsigned int > > mtimes; TomahawkSqlQuery query = dbi->newquery(); if( m_prefix.isEmpty() && m_prefixes.isEmpty() ) { - query.exec( "SELECT id, mtime FROM file WHERE souce IS NULL" ); + query.exec( "SELECT url, id, mtime FROM file WHERE source IS NULL" ); while( query.next() ) - mtimes.insert( query.value( 0 ).toString(), query.value( 1 ).toUInt() ); + { + QMap< unsigned int, unsigned int > map; + map.insert( query.value( 1 ).toUInt(), query.value( 2 ).toUInt() ); + mtimes.insert( query.value( 0 ).toString(), map ); + } } else if( m_prefixes.isEmpty() ) execSelectPath( dbi, m_prefix, mtimes ); @@ -55,10 +60,10 @@ DatabaseCommand_FileMtimes::execSelect( DatabaseImpl* dbi ) } void -DatabaseCommand_FileMtimes::execSelectPath( DatabaseImpl *dbi, const QDir& path, QMap &mtimes ) +DatabaseCommand_FileMtimes::execSelectPath( DatabaseImpl *dbi, const QDir& path, QMap > &mtimes ) { TomahawkSqlQuery query = dbi->newquery(); - query.prepare( QString( "SELECT id, mtime " + query.prepare( QString( "SELECT url, id, mtime " "FROM file " "WHERE source IS NULL " "AND url LIKE :prefix" ) ); @@ -67,5 +72,9 @@ DatabaseCommand_FileMtimes::execSelectPath( DatabaseImpl *dbi, const QDir& path, query.exec(); while( query.next() ) - mtimes.insert( query.value( 0 ).toString(), query.value( 1 ).toUInt() ); + { + QMap< unsigned int, unsigned int > map; + map.insert( query.value( 1 ).toUInt(), query.value( 2 ).toUInt() ); + mtimes.insert( query.value( 0 ).toString(), map ); + } } diff --git a/src/libtomahawk/database/databasecommand_filemtimes.h b/src/libtomahawk/database/databasecommand_filemtimes.h index e9470605f..dd9b71020 100644 --- a/src/libtomahawk/database/databasecommand_filemtimes.h +++ b/src/libtomahawk/database/databasecommand_filemtimes.h @@ -47,18 +47,15 @@ public: virtual QString commandname() const { return "filemtimes"; } signals: - void done( const QMap& ); + void done( const QMap< QString, QMap< unsigned int, unsigned int > >& ); public slots: private: - void execSelectPath( DatabaseImpl *dbi, const QDir& path, QMap &mtimes ); - + void execSelectPath( DatabaseImpl *dbi, const QDir& path, QMap< QString, QMap< unsigned int, unsigned int > > &mtimes ); void execSelect( DatabaseImpl* dbi ); - void execUpdate( DatabaseImpl* dbi ); QString m_prefix; QStringList m_prefixes; - QMap m_tosave; }; #endif // DATABASECOMMAND_FILEMTIMES_H diff --git a/src/musicscanner.cpp b/src/musicscanner.cpp index 52ccef7cc..6a4be8898 100644 --- a/src/musicscanner.cpp +++ b/src/musicscanner.cpp @@ -192,8 +192,8 @@ MusicScanner::setDirMtimes( const QMap& m ) if ( m_mode == TomahawkSettings::Files ) { DatabaseCommand_FileMtimes *cmd = new DatabaseCommand_FileMtimes(); - connect( cmd, SIGNAL( done( QMap ) ), - SLOT( setFileMtimes( QMap ) ) ); + connect( cmd, SIGNAL( done( QMap > ) ), + SLOT( setFileMtimes( QMap > ) ) ); Database::instance()->enqueue( QSharedPointer(cmd) ); return; @@ -203,7 +203,7 @@ MusicScanner::setDirMtimes( const QMap& m ) void -MusicScanner::setFileMtimes( const QMap& m ) +MusicScanner::setFileMtimes( const QMap >& m ) { qDebug() << Q_FUNC_INFO << m.count(); m_filemtimes = m; @@ -324,6 +324,24 @@ MusicScanner::commitBatch( const QVariantList& tracks ) void MusicScanner::scanFile( const QFileInfo& fi ) { + //qDebug() << "Scanning file with canonical file path " << fi.canonicalFilePath(); + //qDebug() << "is directory ? " << ( fi.isDir() ? " yes" : " no"); + if ( m_mode == TomahawkSettings::Files && m_filemtimes.contains( "file://" + fi.canonicalFilePath() ) ) + { + //qDebug() << "All keys: " << m_filemtimes.keys(); + //qDebug() << "Checking " << fi.canonicalFilePath() << " with last modified time " << fi.lastModified().toUTC().toTime_t() << " << against value in m_filemtimes " << m_filemtimes.value( "file://" + fi.canonicalFilePath() ).values().first(); + if ( fi.lastModified().toUTC().toTime_t() == m_filemtimes.value( "file://" + fi.canonicalFilePath() ).values().first() ) + { + qDebug() << "Same mtime"; + return; + } + else + { + qDebug() << "Different mtime"; + return; + } + } + QVariant m = readFile( fi ); if ( m.toMap().isEmpty() ) return; diff --git a/src/musicscanner.h b/src/musicscanner.h index 37f5d14f6..dfc168cb3 100644 --- a/src/musicscanner.h +++ b/src/musicscanner.h @@ -100,8 +100,8 @@ private slots: void scanFile( const QFileInfo& fi ); void startScan(); void scan(); - void setDirMtimes( const QMap& m ); - void setFileMtimes( const QMap& m ); + void setDirMtimes( const QMap< QString, unsigned int >& m ); + void setFileMtimes( const QMap< QString, QMap< unsigned int, unsigned int > >& m ); void commitBatch( const QVariantList& ); private: @@ -114,7 +114,7 @@ private: QList m_skippedFiles; QMap m_dirmtimes; - QMap m_filemtimes; + QMap > m_filemtimes; QMap m_newdirmtimes; QList m_scannedfiles; diff --git a/src/scanmanager.cpp b/src/scanmanager.cpp index ea150af71..1d276d731 100644 --- a/src/scanmanager.cpp +++ b/src/scanmanager.cpp @@ -56,7 +56,8 @@ ScanManager::ScanManager( QObject* parent ) connect( m_scanTimer, SIGNAL( timeout() ), SLOT( scanTimerTimeout() ) ); // FIXME: Disable this until we find something nondeprecated and working (e.g. not QFileSystemWatcher) - //TomahawkSettings::instance()->setWatchForChanges( true ); + TomahawkSettings::instance()->setWatchForChanges( true ); + TomahawkSettings::instance()->setScannerMode( TomahawkSettings::Files ); if ( TomahawkSettings::instance()->hasScannerPaths() ) { diff --git a/src/tomahawkapp.cpp b/src/tomahawkapp.cpp index f0b54967c..263634975 100644 --- a/src/tomahawkapp.cpp +++ b/src/tomahawkapp.cpp @@ -368,6 +368,7 @@ TomahawkApp::registerMetaTypes() qRegisterMetaType< QMap >("QMap"); qRegisterMetaType< QMap< QString, plentry_ptr > >("QMap< QString, plentry_ptr >"); qRegisterMetaType< QHash< QString, QMap > >("QHash< QString, QMap >"); + qRegisterMetaType< QMap< QString, QMap< unsigned int, unsigned int > > >("QMap< QString, QMap< unsigned int, unsigned int > >"); qRegisterMetaType< GeneratorMode>("GeneratorMode"); qRegisterMetaType("Tomahawk::GeneratorMode");