void QGalleryTrackerResultSetPrivate::_q_parseFinished()
{
    processSyncEvents();

    if (parseWatcher.result()) {
        Q_ASSERT(rCache.offset == rCache.count);
        Q_ASSERT(iCache.cutoff == iCache.count);

        rCache.values.clear();
        rCache.count = 0;

        flags &= ~Active;

        if (flags & Refresh)
            update();
        else
            emit q_func()->progressChanged(progressMaximum, progressMaximum);

        q_func()->finish(flags & Live);
    } else if (flags & Canceled) {
        iCache.count = 0;

        flags &= ~Active;

        q_func()->QGalleryAbstractResponse::cancel();
    } else {
        const int offset = queryOffset + iCache.count;
        const int limit = queryLimit < 1 || queryLimit - iCache.count > 1024
                ? 1024
                : queryLimit - iCache.count;

        QDBusPendingCall call = queryInterface->asyncCallWithArgumentList(
                queryMethod, QVariantList(queryArguments) << offset << limit);

        if (call.isFinished()) {
            queryFinished(call);
        } else {
            queryWatcher.reset(new QDBusPendingCallWatcher(call));

            QObject::connect(
                    queryWatcher.data(), SIGNAL(finished(QDBusPendingCallWatcher*)),
                    q_func(), SLOT(_q_queryFinished(QDBusPendingCallWatcher*)));

            progressMaximum += 2;

            emit q_func()->progressChanged(progressMaximum - 2, progressMaximum);
        }
    }
}
bool QGalleryTrackerResultSetPrivate::waitForSyncFinish(int msecs)
{
    QTime timer;
    timer.start();

    do {
        processSyncEvents();

        if (flags & SyncFinished) {
            return true;
        }

        if (!syncEvents.waitForEvent(msecs))
            return false;
    } while ((msecs -= timer.restart()) > 0);

    return false;
}
void QGalleryTrackerResultSetPrivate::_q_parseFinished()
{
    processSyncEvents();

    Q_ASSERT(rCache.offset == rCache.count);
    Q_ASSERT(iCache.cutoff == iCache.count);

    rCache.values.clear();
    rCache.count = 0;

    flags &= ~Active;

    if (flags & Refresh)
        update();
    else
        emit q_func()->progressChanged(progressMaximum, progressMaximum);

    if (queryError != QDocumentGallery::NoError) {
        q_func()->finish(flags & Live);
    } else  {
        q_func()->error(queryError, queryErrorString);
        queryError = QDocumentGallery::NoError;
    }
}