Example #1
0
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();
    }
}
Example #2
0
    void SurfaceAnd::transform(const Transform& transform)
    {
        blockUpdates();

        for(auto& surf : _surfs)
            applyTransformation(surf, transform);

        unblockUpdates();
    }
Example #3
0
    void SurfaceAnd::setOuterMaterial(const std::shared_ptr<Material>& mat)
    {
        blockUpdates();

        for(auto& surf : _surfs)
            surf->setOuterMaterial(mat);

        unblockUpdates();
    }
Example #4
0
    void SurfaceAnd::setCoating(const std::shared_ptr<Coating>& coating)
    {
        blockUpdates();

        for(auto& surf : _surfs)
            surf->setCoating(coating);

        unblockUpdates();
    }
Example #5
0
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();
        }
    }
Example #7
0
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);
}
Example #8
0
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() );
    }