void SqlScanResultProcessor::commitDirectory( QSharedPointer<CollectionScanner::Directory> directory ) { QString path = directory->path(); // a bit of paranoia: if( m_foundDirectories.contains( path ) ) warning() << "commitDirectory(): duplicate directory path" << path << "in" << "collectionscanner output. This shouldn't happen."; // getDirectory() updates the directory entry mtime: int dirId = m_collection->registry()->getDirectory( path, directory->mtime() ); // we never dereference key of m_directoryIds, it is safe to add it as a plain pointer m_directoryIds.insert( directory.data(), dirId ); m_foundDirectories.insert( path, dirId ); AbstractScanResultProcessor::commitDirectory( directory ); // --- unblock every 5 second. Maybe not really needed, but still nice if( m_blockedTime.secsTo( QDateTime::currentDateTime() ) >= 5 ) { unblockUpdates(); m_blockedTime = QDateTime::currentDateTime(); blockUpdates(); } }
void SurfaceAnd::transform(const Transform& transform) { blockUpdates(); for(auto& surf : _surfs) applyTransformation(surf, transform); unblockUpdates(); }
void SurfaceAnd::setOuterMaterial(const std::shared_ptr<Material>& mat) { blockUpdates(); for(auto& surf : _surfs) surf->setOuterMaterial(mat); unblockUpdates(); }
void SurfaceAnd::setCoating(const std::shared_ptr<Coating>& coating) { blockUpdates(); for(auto& surf : _surfs) surf->setCoating(coating); unblockUpdates(); }
void ConfigDocument::syncFromText() { if(block) return; blockUpdates(); QStringList lines = editor->toPlainText().split("\n"); QList<QPair<QString, QString> > splits; for(int i = 0; i < lines.count(); i++) { QString line = lines[i]; QStringList split = line.split(":"); if(split.count() != 2) continue; splits.append(QPair<QString, QString>(split[0].trimmed(), split[1].trimmed())); } while(deleteButtons.count() > splits.count()) { deleteButtons[0]->deleteLater(); keys[0]->deleteLater(); values[0]->deleteLater(); containers[0]->deleteLater(); labels[0]->deleteLater(); deleteButtons.removeAt(0); keys.removeAt(0); values.removeAt(0); containers.removeAt(0); labels.removeAt(0); } int initialCount = deleteButtons.count(); for(int i = 0; i < splits.count(); i++) { if(i >= initialCount) { addRow(splits[i].first, splits[i].second); } else { int index = keys[i]->findText(splits[i].first); if(index != -1) keys[i]->setCurrentIndex(index); else keys[i]->setEditText(splits[i].first); values[i]->setText(splits[i].second); } } }
foreach( const QString &key, keys ) { // --- commit the albums as compilation or normal album QList<CollectionScanner::Album*> albums = m_albumNames.values( key ); // debug() << "commit got" <<albums.count() << "x" << key; // if we have multiple albums with the same name, check if it // might be a compilation for( int i = albums.count() - 1; i >= 0; --i ) { CollectionScanner::Album *album = albums.at( i ); // commit all albums with a track with the noCompilation flag if( album->isNoCompilation() || nonCompilationAlbumNames.contains( album->name(), Qt::CaseInsensitive ) ) commitAlbum( albums.takeAt( i ) ); } // only one album left. It's no compilation. if( albums.count() == 1 ) { commitAlbum( albums.takeFirst() ); } // compilation else if( albums.count() > 1 ) { CollectionScanner::Album compilation( key, QString() ); for( int i = albums.count() - 1; i >= 0; --i ) { CollectionScanner::Album *album = albums.takeAt( i ); foreach( CollectionScanner::Track *track, album->tracks() ) compilation.addTrack( track ); compilation.setCovers( album->covers() + compilation.covers() ); } commitAlbum( &compilation ); } // --- unblock every 5 second. Maybe not really needed, but still nice if( blockedTime.secsTo( QDateTime::currentDateTime() ) >= 5 ) { unblockUpdates(); blockedTime = QDateTime::currentDateTime(); blockUpdates(); } }
void ConfigDocument::syncFromBoxes() { if(block) return; blockUpdates(); QString buffer = ""; for(int i = 0; i < keys.count(); i++) { buffer += keys[i]->currentText(); buffer += ":"; buffer += values[i]->text(); buffer += "\n"; } editor->setPlainText(buffer); }
void SqlScanResultProcessor::scanSucceeded() { DEBUG_BLOCK; // we are blocking the updated signal for maximum of one second. m_blockedTime = QDateTime::currentDateTime(); blockUpdates(); urlsCacheInit(); // -- call the base implementation AbstractScanResultProcessor::scanSucceeded(); // -- error reporting m_messages.append( m_collection->sqlStorage()->getLastErrors() ); if( !m_messages.isEmpty() && QApplication::type() != QApplication::Tty ) QTimer::singleShot(0, this, SLOT(displayMessages())); // do in the UI thread unblockUpdates(); }
void ScanResultProcessor::commit() { // the default for albums with several artists is that it's a compilation // however, some album names are unlikely to be a compilation static QStringList nonCompilationAlbumNames; if( nonCompilationAlbumNames.isEmpty() ) { nonCompilationAlbumNames << "" // don't throw together albums without name. At least not here << "Best Of" << "Anthology" << "Hit collection" << "Greatest Hits" << "All Time Greatest Hits" << "Live"; } // we are blocking the updated signal for maximum of one second. QDateTime blockedTime = QDateTime::currentDateTime(); blockUpdates(); // -- commit the directories foreach( CollectionScanner::Directory* dir, m_directories ) { commitDirectory( dir ); // -- sort the tracks into albums QSet<CollectionScanner::Album*> dirAlbums; QSet<QString> dirAlbumNames; QList<CollectionScanner::Track*> tracks = dir->tracks(); for( int i = tracks.count() - 1; i >= 0; --i ) { CollectionScanner::Album *album = sortTrack( tracks.at( i ) ); if( album ) { dirAlbums.insert( album ); dirAlbumNames.insert( album->name() ); tracks.removeAt( i ); } } // -- sort the remainder if( dirAlbums.count() == 0 ) { // -- use the directory name as album name QString dirAlbumName = QDir( dir->path() ).dirName(); for( int i = tracks.count() - 1; i >= 0; --i ) { CollectionScanner::Album *album = sortTrack( tracks.at( i ), dirAlbumName, QString() ); if( album ) { dirAlbums.insert( album ); dirAlbumNames.insert( album->name() ); tracks.removeAt( i ); } } } else { // -- put into the empty album for( int i = tracks.count() - 1; i >= 0; --i ) { CollectionScanner::Album *album = sortTrack( tracks.at( i ), QString(), QString() ); if( album ) { dirAlbums.insert( album ); dirAlbumNames.insert( album->name() ); tracks.removeAt( i ); } } } // if all the tracks from this directory end up in one album // (or they have at least the same name) then it's likely that an image // from this directory could be a cover if( dirAlbumNames.count() == 1 ) (*dirAlbums.begin())->setCovers( dir->covers() ); }