mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-05 13:47:26 +02:00
More thread-safe
This commit is contained in:
@@ -107,21 +107,36 @@ MusicScanner::listerFinished( const QMap<QString, unsigned int>& newmtimes )
|
|||||||
foreach( const QString& s, m_skippedFiles )
|
foreach( const QString& s, m_skippedFiles )
|
||||||
qDebug() << s;
|
qDebug() << s;
|
||||||
|
|
||||||
m_dirListerThreadController->quit();
|
QMetaObject::invokeMethod( this, "quitLister" );
|
||||||
m_dirLister->deleteLater();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MusicScanner::quitLister()
|
||||||
|
{
|
||||||
|
qDebug() << Q_FUNC_INFO;
|
||||||
|
if( m_dirListerThreadController->isRunning() )
|
||||||
|
{
|
||||||
|
qDebug() << "Scan thread still running, not deleting yet";
|
||||||
|
m_dirListerThreadController->quit();
|
||||||
|
QMetaObject::invokeMethod( this, "quitLister" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug() << "deleting dir lister";
|
||||||
|
m_dirLister->deleteLater();
|
||||||
|
m_dirLister = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MusicScanner::listerDestroyed( QObject* dirLister )
|
MusicScanner::listerDestroyed( QObject* dirLister )
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
m_dirLister = 0;
|
|
||||||
m_dirListerThreadController->deleteLater();
|
m_dirListerThreadController->deleteLater();
|
||||||
m_dirListerThreadController = 0;
|
m_dirListerThreadController = 0;
|
||||||
|
emit finished();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
MusicScanner::commitBatch( const QVariantList& tracks )
|
MusicScanner::commitBatch( const QVariantList& tracks )
|
||||||
{
|
{
|
||||||
|
@@ -89,7 +89,7 @@ public:
|
|||||||
|
|
||||||
signals:
|
signals:
|
||||||
//void fileScanned( QVariantMap );
|
//void fileScanned( QVariantMap );
|
||||||
void finished( int, int );
|
void finished();
|
||||||
void batchReady( const QVariantList& );
|
void batchReady( const QVariantList& );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -97,6 +97,7 @@ private:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void listerFinished( const QMap<QString, unsigned int>& newmtimes );
|
void listerFinished( const QMap<QString, unsigned int>& newmtimes );
|
||||||
|
void quitLister();
|
||||||
void listerDestroyed( QObject* dirLister );
|
void listerDestroyed( QObject* dirLister );
|
||||||
void scanFile( const QFileInfo& fi );
|
void scanFile( const QFileInfo& fi );
|
||||||
void startScan();
|
void startScan();
|
||||||
|
@@ -29,9 +29,13 @@ ScanManager::ScanManager( QObject* parent )
|
|||||||
|
|
||||||
ScanManager::~ScanManager()
|
ScanManager::~ScanManager()
|
||||||
{
|
{
|
||||||
|
qDebug() << Q_FUNC_INFO;
|
||||||
s_instance = 0;
|
s_instance = 0;
|
||||||
|
if( m_musicScannerThreadController )
|
||||||
|
{
|
||||||
m_musicScannerThreadController->quit();
|
m_musicScannerThreadController->quit();
|
||||||
m_musicScannerThreadController->deleteLater();
|
m_musicScannerThreadController->deleteLater();
|
||||||
|
}
|
||||||
m_musicScannerThreadController = 0;
|
m_musicScannerThreadController = 0;
|
||||||
m_scanner = 0;
|
m_scanner = 0;
|
||||||
}
|
}
|
||||||
@@ -52,22 +56,39 @@ ScanManager::runManualScan( const QString& path )
|
|||||||
if ( !m_musicScannerThreadController && !m_scanner ) //still running if these are not zero
|
if ( !m_musicScannerThreadController && !m_scanner ) //still running if these are not zero
|
||||||
{
|
{
|
||||||
m_musicScannerThreadController = new QThread( this );
|
m_musicScannerThreadController = new QThread( this );
|
||||||
MusicScanner* m_scanner = new MusicScanner( path );
|
m_scanner = new MusicScanner( path );
|
||||||
m_scanner->moveToThread( m_musicScannerThreadController );
|
m_scanner->moveToThread( m_musicScannerThreadController );
|
||||||
connect( m_scanner, SIGNAL( destroyed( QObject* ) ), this, SLOT( scannerDestroyed( QObject* ) ) );
|
connect( m_scanner, SIGNAL( finished() ), SLOT( scannerFinished() ) );
|
||||||
|
connect( m_scanner, SIGNAL( destroyed( QObject* ) ), SLOT( scannerDestroyed( QObject* ) ) );
|
||||||
m_musicScannerThreadController->start( QThread::IdlePriority );
|
m_musicScannerThreadController->start( QThread::IdlePriority );
|
||||||
QMetaObject::invokeMethod( m_scanner, "startScan" );
|
QMetaObject::invokeMethod( m_scanner, "startScan" );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
qDebug() << "Could not run manual scan, old scan still running";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ScanManager::scannerFinished()
|
||||||
|
{
|
||||||
|
qDebug() << Q_FUNC_INFO;
|
||||||
|
if( m_musicScannerThreadController->isRunning() )
|
||||||
|
{
|
||||||
|
qDebug() << "Scan thread still running, not deleting yet";
|
||||||
|
m_musicScannerThreadController->quit();
|
||||||
|
QMetaObject::invokeMethod( this, "scannerFinished" );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete m_scanner;
|
||||||
|
m_scanner = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ScanManager::scannerDestroyed( QObject* scanner )
|
ScanManager::scannerDestroyed( QObject* scanner )
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
m_musicScannerThreadController->quit();
|
|
||||||
m_musicScannerThreadController->deleteLater();
|
m_musicScannerThreadController->deleteLater();
|
||||||
m_musicScannerThreadController = 0;
|
m_musicScannerThreadController = 0;
|
||||||
m_scanner = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -21,6 +21,7 @@ public:
|
|||||||
void runManualScan( const QString& path );
|
void runManualScan( const QString& path );
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void scannerFinished();
|
||||||
void scannerDestroyed( QObject* scanner );
|
void scannerDestroyed( QObject* scanner );
|
||||||
|
|
||||||
void onSettingsChanged();
|
void onSettingsChanged();
|
||||||
|
Reference in New Issue
Block a user