Пример #1
0
QList<Concert*> Database::concerts(QString path)
{
    QList<Concert*> concerts;
    QSqlQuery query(db());
    QSqlQuery queryFiles(db());
    query.prepare("SELECT idConcert, content, inSeparateFolder FROM concerts WHERE path=:path");
    query.bindValue(":path", path.toUtf8());
    query.exec();
    while (query.next()) {
        QStringList files;
        queryFiles.prepare("SELECT file FROM concertFiles WHERE idConcert=:idConcert");
        queryFiles.bindValue(":idConcert", query.value(query.record().indexOf("idConcert")).toInt());
        queryFiles.exec();
        while (queryFiles.next())
            files << QString::fromUtf8(queryFiles.value(queryFiles.record().indexOf("file")).toByteArray());

        Concert *concert = new Concert(files, Manager::instance()->concertFileSearcher());
        concert->setDatabaseId(query.value(query.record().indexOf("idConcert")).toInt());
        concert->setInSeparateFolder(query.value(query.record().indexOf("inSeparateFolder")).toInt() == 1);
        concert->setNfoContent(QString::fromUtf8(query.value(query.record().indexOf("content")).toByteArray()));
        concerts.append(concert);
    }
    return concerts;
}
Пример #2
0
/**
 * @brief Starts the scanning process
 */
void ConcertFileSearcher::reload(bool force)
{
    m_aborted = false;

    if (force)
        Manager::instance()->database()->clearConcerts();

    Manager::instance()->concertModel()->clear();
    emit searchStarted(tr("Searching for Concerts..."), m_progressMessageId);

    QList<Concert*> concerts;
    QList<Concert*> dbConcerts;
    QList<QStringList> contents;
    foreach (SettingsDir dir, m_directories) {
        if (m_aborted)
            return;

        QList<Concert*> concertsFromDb = Manager::instance()->database()->concerts(dir.path);
        if (dir.autoReload || force || concertsFromDb.count() == 0) {
            Manager::instance()->database()->clearConcerts(dir.path);
            scanDir(dir.path, dir.path, contents, dir.separateFolders, true);
        } else {
            dbConcerts.append(concertsFromDb);
        }
    }
    emit currentDir("");

    emit searchStarted(tr("Loading Concerts..."), m_progressMessageId);
    int concertCounter=0;
    int concertSum=contents.size()+dbConcerts.size();

    // Setup concerts
    Manager::instance()->database()->transaction();
    foreach (const QStringList &files, contents) {
        if (m_aborted)
            return;

        bool inSeparateFolder = false;
        QString path;
        // get directory
        if (!files.isEmpty()) {
            int index = -1;
            for (int i=0, n=m_directories.count() ; i<n ; ++i) {
                if (files.at(0).startsWith(m_directories[i].path)) {
                    if (index == -1)
                        index = i;
                    else if (m_directories[index].path.length() < m_directories[i].path.length())
                        index = i;
                }
            }
            if (index != -1) {
                inSeparateFolder = m_directories[index].separateFolders;
                path = m_directories[index].path;
            }
        }
        Concert *concert = new Concert(files, this);
        concert->setInSeparateFolder(inSeparateFolder);
        concert->controller()->loadData(Manager::instance()->mediaCenterInterface());
        emit currentDir(concert->name());
        Manager::instance()->database()->add(concert, path);
        concerts.append(concert);
        emit progress(++concertCounter, concertSum, m_progressMessageId);
    }
    Manager::instance()->database()->commit();

    // Setup concerts loaded from database
    foreach (Concert *concert, dbConcerts) {
        if (m_aborted)
            return;

        concert->controller()->loadData(Manager::instance()->mediaCenterInterface(), false, false);
        emit currentDir(concert->name());
        concerts.append(concert);
        emit progress(++concertCounter, concertSum, m_progressMessageId);
    }

    foreach (Concert *concert, concerts)
        Manager::instance()->concertModel()->addConcert(concert);

    qDebug() << "Searching for concerts done";
    if (!m_aborted)
        emit concertsLoaded(m_progressMessageId);
}