mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-03-19 15:29:42 +01:00
* Don't let the MusicScanner emit finished before all our stuff actually ended up in the database.
This commit is contained in:
parent
360748dd0b
commit
1347736ead
@ -213,8 +213,6 @@ Source::setOnline()
|
||||
void
|
||||
Source::dbLoaded( unsigned int id, const QString& fname )
|
||||
{
|
||||
qDebug() << Q_FUNC_INFO << id << fname;
|
||||
|
||||
m_id = id;
|
||||
setFriendlyName( fname );
|
||||
|
||||
@ -252,6 +250,7 @@ void
|
||||
Source::onStateChanged( DBSyncConnection::State newstate, DBSyncConnection::State oldstate, const QString& info )
|
||||
{
|
||||
Q_UNUSED( oldstate );
|
||||
|
||||
QString msg;
|
||||
switch( newstate )
|
||||
{
|
||||
|
@ -141,7 +141,7 @@ MusicScanner::startScan()
|
||||
//to be removed that aren't in that root any longer -- might have to do the filtering in setMTimes based on strings
|
||||
DatabaseCommand_FileMtimes *cmd = new DatabaseCommand_FileMtimes();
|
||||
connect( cmd, SIGNAL( done( QMap< QString, QMap< unsigned int, unsigned int > > ) ),
|
||||
SLOT( setFileMtimes( QMap< QString, QMap< unsigned int, unsigned int > > ) ) );
|
||||
SLOT( setFileMtimes( QMap< QString, QMap< unsigned int, unsigned int > > ) ) );
|
||||
|
||||
Database::instance()->enqueue( QSharedPointer< DatabaseCommand >( cmd ) );
|
||||
return;
|
||||
@ -195,13 +195,16 @@ MusicScanner::listerFinished()
|
||||
m_scannedfiles.clear();
|
||||
m_filesToDelete.clear();
|
||||
|
||||
tDebug( LOGINFO ) << "Scanning complete, saving to database. "
|
||||
"( scanned" << m_scanned << "skipped" << m_skipped << ")";
|
||||
|
||||
tDebug( LOGINFO ) << "Scanning complete, saving to database. ( scanned" << m_scanned << "skipped" << m_skipped << ")";
|
||||
tDebug( LOGEXTRA ) << "Skipped the following files (no tags / no valid audio):";
|
||||
foreach ( const QString& s, m_skippedFiles )
|
||||
tDebug( LOGEXTRA ) << s;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MusicScanner::cleanup()
|
||||
{
|
||||
if ( !m_dirLister.isNull() )
|
||||
{
|
||||
m_dirListerThreadController->quit();;
|
||||
@ -223,25 +226,42 @@ MusicScanner::commitBatch( const QVariantList& tracks, const QVariantList& delet
|
||||
{
|
||||
tDebug( LOGINFO ) << Q_FUNC_INFO << "deleting" << deletethese.length() << "tracks";
|
||||
source_ptr localsrc = SourceList::instance()->getLocal();
|
||||
Database::instance()->enqueue(
|
||||
QSharedPointer<DatabaseCommand>( new DatabaseCommand_DeleteFiles( deletethese, SourceList::instance()->getLocal() ) )
|
||||
);
|
||||
executeCommand( QSharedPointer<DatabaseCommand>( new DatabaseCommand_DeleteFiles( deletethese, SourceList::instance()->getLocal() ) ) );
|
||||
}
|
||||
|
||||
if ( tracks.length() )
|
||||
{
|
||||
tDebug( LOGINFO ) << Q_FUNC_INFO << "adding" << tracks.length() << "tracks";
|
||||
source_ptr localsrc = SourceList::instance()->getLocal();
|
||||
Database::instance()->enqueue(
|
||||
QSharedPointer<DatabaseCommand>( new DatabaseCommand_AddFiles( tracks, localsrc ) )
|
||||
);
|
||||
executeCommand( QSharedPointer<DatabaseCommand>( new DatabaseCommand_AddFiles( tracks, localsrc ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MusicScanner::executeCommand( QSharedPointer< DatabaseCommand > cmd )
|
||||
{
|
||||
m_cmdQueue << cmd.data();
|
||||
connect( cmd.data(), SIGNAL( finished() ), SLOT( commandFinished() ) );
|
||||
Database::instance()->enqueue( cmd );
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MusicScanner::commandFinished()
|
||||
{
|
||||
DatabaseCommand* cmd = qobject_cast< DatabaseCommand* >( sender() );
|
||||
m_cmdQueue.removeAll( cmd );
|
||||
|
||||
if ( m_cmdQueue.isEmpty() )
|
||||
cleanup();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MusicScanner::scanFile( const QFileInfo& fi )
|
||||
{
|
||||
tDebug() << Q_FUNC_INFO << " scanning file: " << fi.canonicalFilePath();
|
||||
tDebug() << Q_FUNC_INFO << "scanning file:" << fi.canonicalFilePath();
|
||||
if ( m_filemtimes.contains( "file://" + fi.canonicalFilePath() ) )
|
||||
{
|
||||
if ( fi.lastModified().toUTC().toTime_t() == m_filemtimes.value( "file://" + fi.canonicalFilePath() ).values().first() )
|
||||
|
@ -19,7 +19,8 @@
|
||||
#ifndef MUSICSCANNER_H
|
||||
#define MUSICSCANNER_H
|
||||
|
||||
#include <tomahawksettings.h>
|
||||
#include "tomahawksettings.h"
|
||||
#include "database/databasecommand.h"
|
||||
|
||||
/* taglib */
|
||||
#include <taglib/fileref.h>
|
||||
@ -34,6 +35,7 @@
|
||||
#include <QMutex>
|
||||
#include <QMutexLocker>
|
||||
#include <QWeakPointer>
|
||||
#include <database/database.h>
|
||||
|
||||
// descend dir tree comparing dir mtimes to last known mtime
|
||||
// emit signal for any dir with new content, so we can scan it.
|
||||
@ -90,6 +92,7 @@ signals:
|
||||
|
||||
private:
|
||||
QVariant readFile( const QFileInfo& fi );
|
||||
void executeCommand( QSharedPointer< DatabaseCommand > cmd );
|
||||
|
||||
private slots:
|
||||
void listerFinished();
|
||||
@ -97,7 +100,9 @@ private slots:
|
||||
void setFileMtimes( const QMap< QString, QMap< unsigned int, unsigned int > >& m );
|
||||
void startScan();
|
||||
void scan();
|
||||
void cleanup();
|
||||
void commitBatch( const QVariantList& tracks, const QVariantList& deletethese );
|
||||
void commandFinished();
|
||||
|
||||
private:
|
||||
QStringList m_dirs;
|
||||
@ -106,9 +111,10 @@ private:
|
||||
unsigned int m_skipped;
|
||||
|
||||
QList<QString> m_skippedFiles;
|
||||
|
||||
QMap<QString, QMap< unsigned int, unsigned int > > m_filemtimes;
|
||||
|
||||
QList<DatabaseCommand*> m_cmdQueue;
|
||||
|
||||
QVariantList m_scannedfiles;
|
||||
QVariantList m_filesToDelete;
|
||||
quint32 m_batchsize;
|
||||
|
@ -80,7 +80,7 @@ ScanManager::~ScanManager()
|
||||
delete m_musicScannerThreadController;
|
||||
m_musicScannerThreadController = 0;
|
||||
}
|
||||
qDebug() << Q_FUNC_INFO << " scanner thread controller finished, exiting ScanManager";
|
||||
qDebug() << Q_FUNC_INFO << "scanner thread controller finished, exiting ScanManager";
|
||||
}
|
||||
|
||||
|
||||
@ -141,7 +141,7 @@ ScanManager::runScan( bool manualFull )
|
||||
{
|
||||
DatabaseCommand_DeleteFiles *cmd = new DatabaseCommand_DeleteFiles( SourceList::instance()->getLocal() );
|
||||
connect( cmd, SIGNAL( done( const QStringList&, const Tomahawk::collection_ptr& ) ),
|
||||
SLOT( filesDeleted( const QStringList&, const Tomahawk::collection_ptr& ) ) );
|
||||
SLOT( filesDeleted( const QStringList&, const Tomahawk::collection_ptr& ) ) );
|
||||
|
||||
Database::instance()->enqueue( QSharedPointer< DatabaseCommand >( cmd ) );
|
||||
return;
|
||||
@ -149,7 +149,7 @@ ScanManager::runScan( 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 > >& ) ) );
|
||||
SLOT( fileMtimesCheck( const QMap< QString, QMap< unsigned int, unsigned int > >& ) ) );
|
||||
|
||||
Database::instance()->enqueue( QSharedPointer< DatabaseCommand >( cmd ) );
|
||||
}
|
||||
@ -168,7 +168,7 @@ ScanManager::fileMtimesCheck( const QMap< QString, QMap< unsigned int, unsigned
|
||||
{
|
||||
DatabaseCommand_DeleteFiles *cmd = new DatabaseCommand_DeleteFiles( SourceList::instance()->getLocal() );
|
||||
connect( cmd, SIGNAL( done( const QStringList&, const Tomahawk::collection_ptr& ) ),
|
||||
SLOT( filesDeleted( const QStringList&, const Tomahawk::collection_ptr& ) ) );
|
||||
SLOT( filesDeleted( const QStringList&, const Tomahawk::collection_ptr& ) ) );
|
||||
|
||||
Database::instance()->enqueue( QSharedPointer< DatabaseCommand >( cmd ) );
|
||||
return;
|
||||
@ -202,7 +202,7 @@ ScanManager::runDirScan()
|
||||
{
|
||||
m_scanTimer->stop();
|
||||
m_musicScannerThreadController = new QThread( this );
|
||||
m_scanner = QWeakPointer< MusicScanner>( new MusicScanner( paths ) );
|
||||
m_scanner = QWeakPointer< MusicScanner >( new MusicScanner( paths ) );
|
||||
m_scanner.data()->moveToThread( m_musicScannerThreadController );
|
||||
connect( m_scanner.data(), SIGNAL( finished() ), SLOT( scannerFinished() ) );
|
||||
m_musicScannerThreadController->start( QThread::IdlePriority );
|
||||
@ -228,6 +228,7 @@ ScanManager::scannerFinished()
|
||||
delete m_musicScannerThreadController;
|
||||
m_musicScannerThreadController = 0;
|
||||
}
|
||||
|
||||
m_scanTimer->start();
|
||||
SourceList::instance()->getLocal()->scanningFinished( 0 );
|
||||
emit finished();
|
||||
|
Loading…
x
Reference in New Issue
Block a user