X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/e8c3df5f60aae3c34545c4112b9ec1c323ee66fd..2f045c60109e0a5811f68bcce617236e3478e402:/src/views/versioncontrol/versioncontrolobserver.cpp diff --git a/src/views/versioncontrol/versioncontrolobserver.cpp b/src/views/versioncontrol/versioncontrolobserver.cpp index 402a2de54..51502398c 100644 --- a/src/views/versioncontrol/versioncontrolobserver.cpp +++ b/src/views/versioncontrol/versioncontrolobserver.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -116,7 +117,7 @@ QList VersionControlObserver::actions(const KFileItemList& items) cons if (items.count() == 1) { const KFileItem rootItem = m_model->rootItem(); if (!rootItem.isNull() && items.first().url() == rootItem.url()) { - directory = rootItem.url().path(KUrl::AddTrailingSlash); + directory = rootItem.url().path(); } } @@ -198,17 +199,16 @@ void VersionControlObserver::slotThreadFinished() return; } - if (!thread->retrievedItems()) { - // Ignore m_silentUpdate for an error message - emit errorMessage(i18nc("@info:status", "Update of version information failed.")); - return; - } + const QMap >& itemStates = thread->itemStates(); + QMap >::const_iterator it = itemStates.constBegin(); + for (; it != itemStates.constEnd(); ++it) { + const QVector& items = it.value(); - const QList itemStates = thread->itemStates(); - foreach (const ItemState& itemState, itemStates) { - QHash values; - values.insert("version", QVariant(itemState.version)); - m_model->setData(itemState.index, values); + foreach (const ItemState& item, items) { + QHash values; + values.insert("version", QVariant(item.version)); + m_model->setData(m_model->index(item.item), values); + } } if (!m_silentUpdate) { @@ -233,18 +233,9 @@ void VersionControlObserver::updateItemStates() m_pendingItemStatesUpdate = true; return; } - QList itemStates; - const int itemCount = m_model->count(); - itemStates.reserve(itemCount); - - for (int i = 0; i < itemCount; ++i) { - ItemState itemState; - itemState.index = i; - itemState.item = m_model->fileItem(i); - itemState.version = KVersionControlPlugin2::UnversionedVersion; - itemStates.append(itemState); - } + QMap > itemStates; + createItemStatesList(itemStates); if (!itemStates.isEmpty()) { if (!m_silentUpdate) { @@ -260,6 +251,41 @@ void VersionControlObserver::updateItemStates() } } +int VersionControlObserver::createItemStatesList(QMap >& itemStates, + const int firstIndex) +{ + const int itemCount = m_model->count(); + const int currentExpansionLevel = m_model->expandedParentsCount(firstIndex); + + QVector items; + items.reserve(itemCount - firstIndex); + + int index; + for (index = firstIndex; index < itemCount; ++index) { + const int expansionLevel = m_model->expandedParentsCount(index); + + if (expansionLevel == currentExpansionLevel) { + ItemState itemState; + itemState.item = m_model->fileItem(index); + itemState.version = KVersionControlPlugin2::UnversionedVersion; + + items.append(itemState); + } else if (expansionLevel > currentExpansionLevel) { + // Sub folder + index += createItemStatesList(itemStates, index) - 1; + } else { + break; + } + } + + if (items.count() > 0) { + const KUrl& url = items.first().item.url(); + itemStates.insert(url.directory(KUrl::AppendTrailingSlash), items); + } + + return index - firstIndex; // number of processed items +} + KVersionControlPlugin* VersionControlObserver::searchPlugin(const KUrl& directory) const { static bool pluginsAvailable = true;