#include <KLocale>
#include <KService>
+#include <KDebug>
#include <KServiceTypeTrader>
#include <kitemviews/kfileitemmodel.h>
#include <kversioncontrolplugin2.h>
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();
}
}
return;
}
- if (!thread->retrievedItems()) {
- // Ignore m_silentUpdate for an error message
- emit errorMessage(i18nc("@info:status", "Update of version information failed."));
- return;
- }
+ const QMap<QString, QVector<ItemState> >& itemStates = thread->itemStates();
+ QMap<QString, QVector<ItemState> >::const_iterator it = itemStates.constBegin();
+ for (; it != itemStates.constEnd(); ++it) {
+ const QVector<ItemState>& items = it.value();
- const QList<ItemState> itemStates = thread->itemStates();
- foreach (const ItemState& itemState, itemStates) {
- QHash<QByteArray, QVariant> values;
- values.insert("version", QVariant(itemState.version));
- m_model->setData(itemState.index, values);
+ foreach (const ItemState& item, items) {
+ QHash<QByteArray, QVariant> values;
+ values.insert("version", QVariant(item.version));
+ m_model->setData(m_model->index(item.item), values);
+ }
}
if (!m_silentUpdate) {
m_pendingItemStatesUpdate = true;
return;
}
- QList<ItemState> 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<QString, QVector<ItemState> > itemStates;
+ createItemStatesList(itemStates);
if (!itemStates.isEmpty()) {
if (!m_silentUpdate) {
}
}
+int VersionControlObserver::createItemStatesList(QMap<QString, QVector<ItemState> >& itemStates,
+ const int firstIndex)
+{
+ const int itemCount = m_model->count();
+ const int currentExpansionLevel = m_model->expandedParentsCount(firstIndex);
+
+ QVector<ItemState> 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;