void DatabaseCommand_DeleteFiles::exec( DatabaseImpl* dbi ) { qDebug() << Q_FUNC_INFO; Q_ASSERT( !source().isNull() ); int deleted = 0; QVariant srcid = source()->isLocal() ? QVariant( QVariant::Int ) : source()->id(); TomahawkSqlQuery delquery = dbi->newquery(); QString lastPath; if ( !m_dir.path().isEmpty() && source()->isLocal() ) { qDebug() << "Deleting" << m_dir.path() << "from db for localsource" << srcid; TomahawkSqlQuery dirquery = dbi->newquery(); dirquery.prepare( QString( "SELECT id, url FROM file WHERE source %1 AND url LIKE ?" ) .arg( source()->isLocal() ? "IS NULL" : QString( "= %1" ).arg( source()->id() ) ) ); delquery.prepare( QString( "DELETE FROM file WHERE source %1 AND id = ?" ) .arg( source()->isLocal() ? "IS NULL" : QString( "= %1" ).arg( source()->id() ) ) ); dirquery.bindValue( 0, "file://" + m_dir.canonicalPath() + "/%" ); dirquery.exec(); while ( dirquery.next() ) { QFileInfo fi( dirquery.value( 1 ).toString().mid( 7 ) ); // remove file:// if ( fi.canonicalPath() != m_dir.canonicalPath() ) { if ( lastPath != fi.canonicalPath() ) qDebug() << "Skipping subdir:" << fi.canonicalPath(); lastPath = fi.canonicalPath(); continue; } m_ids << dirquery.value( 0 ).toUInt(); m_files << dirquery.value( 1 ).toString(); } foreach ( const QVariant& id, m_ids ) { delquery.bindValue( 0, id.toUInt() ); if( !delquery.exec() ) { qDebug() << "Failed to delete file:" << delquery.lastError().databaseText() << delquery.lastError().driverText() << delquery.boundValues(); continue; } deleted++; }