void CollectionScanner::doJob() //SLOT { std::cout << "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"; std::cout << "<scanner>"; QStringList entries; if( m_restart ) { QFile logFile( m_logfile ); logFile.open( IO_ReadOnly ); QString lastFile = logFile.readAll(); QFile folderFile( amaroK::saveLocation( QString::null ) + "collection_scan.files" ); folderFile.open( IO_ReadOnly ); entries = QStringList::split( "\n", folderFile.readAll() ); for( int count = entries.findIndex( lastFile ) + 1; count; --count ) entries.pop_front(); // debug() << "Restarting at: " << entries.front() << endl; } else { foreachType( QStringList, m_folders ) { if( (*it).isEmpty() ) //apparently somewhere empty strings get into the mix //which results in a full-system scan! Which we can't allow continue; QString dir = *it; if( !dir.endsWith( "/" ) ) dir += '/'; readDir( dir, entries ); } QFile folderFile( amaroK::saveLocation( QString::null ) + "collection_scan.files" ); folderFile.open( IO_WriteOnly ); QTextStream stream( &folderFile ); stream << entries.join( "\n" ); folderFile.close(); } if( !entries.isEmpty() ) { if( !m_restart ) { AttributeMap attributes; attributes["count"] = QString::number( entries.count() ); writeElement( "itemcount", attributes ); } scanFiles( entries ); } std::cout << "</scanner>" << std::endl; quit(); }
//Populates m_folders with folders from that pointed to file, but only if the mtime of the folder //is greater than the mtime of the file itself bool CollectionScanner::readBatchIncrementalFile() { QString filePath = m_folders.first(); if( !QFile::exists( filePath ) ) return false; m_batchFolderTime = QFileInfo( filePath ).lastModified(); QFile folderFile( filePath ); if( !folderFile.open( QIODevice::ReadOnly ) ) return false; m_folders.clear(); QTextStream folderStream; folderStream.setDevice( &folderFile ); QString temp = folderStream.readLine(); while( !temp.isEmpty() ) { QFileInfo info( temp ); if( info.exists() && info.isDir() ) { QDateTime lastMod = info.lastModified(); if( lastMod > m_batchFolderTime ) m_folders << temp; } //TODO: rpath substitution? temp = folderStream.readLine(); } folderFile.close(); return true; }