1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-15 02:24:50 +02:00

Mork work on trying to get scan threading working right

This commit is contained in:
Jeff Mitchell
2011-02-15 14:54:59 -05:00
parent 9bc6194d2b
commit a28c6998a3
3 changed files with 21 additions and 20 deletions

View File

@@ -31,6 +31,10 @@ MusicScanner::MusicScanner( const QString& dir, quint32 bs )
// m_ext2mime.insert( "mp4", "audio/mp4" ); // m_ext2mime.insert( "mp4", "audio/mp4" );
} }
MusicScanner::~MusicScanner()
{
qDebug() << Q_FUNC_INFO;
}
void void
MusicScanner::startScan() MusicScanner::startScan()
@@ -77,8 +81,6 @@ MusicScanner::scan()
connect( m_dirLister, SIGNAL( finished( const QMap<QString, unsigned int>& ) ), connect( m_dirLister, SIGNAL( finished( const QMap<QString, unsigned int>& ) ),
SLOT( listerFinished( const QMap<QString, unsigned int>& ) ), Qt::QueuedConnection ); SLOT( listerFinished( const QMap<QString, unsigned int>& ) ), Qt::QueuedConnection );
connect( m_dirLister, SIGNAL( destroyed( QObject* ) ), SLOT( listerDestroyed( QObject* ) ) );
m_dirListerThreadController->start(); m_dirListerThreadController->start();
QMetaObject::invokeMethod( m_dirLister, "go" ); QMetaObject::invokeMethod( m_dirLister, "go" );
} }
@@ -97,7 +99,7 @@ MusicScanner::listerFinished( const QMap<QString, unsigned int>& newmtimes )
// save mtimes, then quit thread // save mtimes, then quit thread
DatabaseCommand_DirMtimes* cmd = new DatabaseCommand_DirMtimes( newmtimes ); DatabaseCommand_DirMtimes* cmd = new DatabaseCommand_DirMtimes( newmtimes );
connect( cmd, SIGNAL( finished() ), SLOT( deleteLater() ) ); connect( cmd, SIGNAL( finished() ), SLOT( deleteLister() ) );
Database::instance()->enqueue( QSharedPointer<DatabaseCommand>(cmd) ); Database::instance()->enqueue( QSharedPointer<DatabaseCommand>(cmd) );
qDebug() << "Scanning complete, saving to database. " qDebug() << "Scanning complete, saving to database. "
@@ -106,27 +108,24 @@ MusicScanner::listerFinished( const QMap<QString, unsigned int>& newmtimes )
qDebug() << "Skipped the following files (no tags / no valid audio):"; qDebug() << "Skipped the following files (no tags / no valid audio):";
foreach( const QString& s, m_skippedFiles ) foreach( const QString& s, m_skippedFiles )
qDebug() << s; qDebug() << s;
QMetaObject::invokeMethod( this, "quitLister" );
} }
void void
MusicScanner::quitLister() MusicScanner::deleteLister()
{ {
qDebug() << Q_FUNC_INFO; qDebug() << Q_FUNC_INFO;
if( m_dirListerThreadController->isRunning() ) connect( m_dirListerThreadController, SIGNAL( finished() ), SLOT( listerQuit() ) );
{
qDebug() << "Scan thread still running, not deleting yet";
m_dirListerThreadController->quit(); m_dirListerThreadController->quit();
QMetaObject::invokeMethod( this, "quitLister" );
} }
else
void
MusicScanner::listerQuit()
{ {
qDebug() << "deleting dir lister"; qDebug() << Q_FUNC_INFO;
connect( m_dirLister, SIGNAL( destroyed( QObject* ) ), SLOT( listerDestroyed( QObject* ) ) );
m_dirLister->deleteLater(); m_dirLister->deleteLater();
m_dirLister = 0; m_dirLister = 0;
} }
}
void void
MusicScanner::listerDestroyed( QObject* dirLister ) MusicScanner::listerDestroyed( QObject* dirLister )

View File

@@ -86,6 +86,7 @@ Q_OBJECT
public: public:
MusicScanner( const QString& dir, quint32 bs = 0 ); MusicScanner( const QString& dir, quint32 bs = 0 );
~MusicScanner();
signals: signals:
//void fileScanned( QVariantMap ); //void fileScanned( QVariantMap );
@@ -97,7 +98,8 @@ private:
private slots: private slots:
void listerFinished( const QMap<QString, unsigned int>& newmtimes ); void listerFinished( const QMap<QString, unsigned int>& newmtimes );
void quitLister(); void deleteLister();
void listerQuit();
void listerDestroyed( QObject* dirLister ); void listerDestroyed( QObject* dirLister );
void scanFile( const QFileInfo& fi ); void scanFile( const QFileInfo& fi );
void startScan(); void startScan();

View File

@@ -79,7 +79,7 @@ ScanManager::scannerFinished()
} }
else else
{ {
delete m_scanner; m_scanner->deleteLater();
m_scanner = 0; m_scanner = 0;
} }
} }