From c55b482da9c8c69342ad99bd42074f2e07a608ac Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Tue, 4 Jul 2023 22:27:23 +0300 Subject: [PATCH] gwenview: use the new recursive listing feature of KDirLister requires the following commit from kdelibs: 5d60973ab442fb6c3ccad7027d96da18f4fdeaea Signed-off-by: Ivailo Monev --- gwenview/lib/recursivedirmodel.cpp | 75 +++++++++++++------------------------- gwenview/lib/recursivedirmodel.h | 2 +- 2 files changed, 26 insertions(+), 51 deletions(-) diff --git a/gwenview/lib/recursivedirmodel.cpp b/gwenview/lib/recursivedirmodel.cpp index e275e802..bd5117df 100644 --- a/gwenview/lib/recursivedirmodel.cpp +++ b/gwenview/lib/recursivedirmodel.cpp @@ -36,8 +36,7 @@ namespace Gwenview struct RecursiveDirModelPrivate { - KUrl mUrl; - QList mDirListers; + KDirLister* mDirLister; int rowForUrl(const KUrl &url) const { @@ -77,36 +76,32 @@ struct RecursiveDirModelPrivate return mList; } - void listDir(RecursiveDirModel* parent, const KUrl &url); - private: KFileItemList mList; QHash mRowForUrl; }; -void RecursiveDirModelPrivate::listDir(RecursiveDirModel* parent, const KUrl &url) -{ - KDirLister* dirLister = new KDirLister(parent); - parent->connect( - dirLister, SIGNAL(itemsAdded(KFileItemList)), - parent, SLOT(slotItemsAdded(KFileItemList)) - ); - parent->connect( - dirLister, SIGNAL(itemsDeleted(KFileItemList)), - parent, SLOT(slotItemsDeleted(KFileItemList)) - ); - parent->connect( - dirLister, SIGNAL(completed()), - parent, SLOT(slotCompleted()) - ); - mDirListers.append(dirLister); - dirLister->openUrl(url); -} - RecursiveDirModel::RecursiveDirModel(QObject* parent) : QAbstractListModel(parent) , d(new RecursiveDirModelPrivate) { + d->mDirLister = new KDirLister(this); + connect( + d->mDirLister, SIGNAL(itemsAdded(KFileItemList)), + this, SLOT(slotItemsAdded(KFileItemList)) + ); + connect( + d->mDirLister, SIGNAL(itemsDeleted(KFileItemList)), + this, SLOT(slotItemsDeleted(KFileItemList)) + ); + connect( + d->mDirLister, SIGNAL(clear()), + this, SLOT(slotClear()) + ); + connect( + d->mDirLister, SIGNAL(completed()), + this, SIGNAL(completed()) + ); } RecursiveDirModel::~RecursiveDirModel() @@ -116,30 +111,20 @@ RecursiveDirModel::~RecursiveDirModel() KUrl RecursiveDirModel::url() const { - return d->mUrl; + return d->mDirLister->url(); } void RecursiveDirModel::setUrl(const KUrl& url) { - foreach (KDirLister* lister, d->mDirListers) { - lister->stop(); - } - qDeleteAll(d->mDirListers); - d->mDirListers.clear(); - beginResetModel(); - d->clear(); - endResetModel(); - d->mUrl = url; - d->listDir(this, url); + d->mDirLister->openUrl(url, true); } int RecursiveDirModel::rowCount(const QModelIndex& parent) const { if (parent.isValid()) { return 0; - } else { - return d->list().count(); } + return d->list().count(); } QVariant RecursiveDirModel::data(const QModelIndex& index, int role) const @@ -168,15 +153,12 @@ QVariant RecursiveDirModel::data(const QModelIndex& index, int role) const void RecursiveDirModel::slotItemsAdded(const KFileItemList& newList) { - QList dirUrls; KFileItemList fileList; Q_FOREACH(const KFileItem& item, newList) { if (item.isFile()) { if (d->rowForUrl(item.url()) == -1) { fileList << item; } - } else if (item.isReadable()) { - dirUrls << item.url(); } } @@ -187,10 +169,6 @@ void RecursiveDirModel::slotItemsAdded(const KFileItemList& newList) } endInsertRows(); } - - Q_FOREACH(const KUrl& url, dirUrls) { - d->listDir(this, url); - } } void RecursiveDirModel::slotItemsDeleted(const KFileItemList& list) @@ -211,14 +189,11 @@ void RecursiveDirModel::slotItemsDeleted(const KFileItemList& list) } } -void RecursiveDirModel::slotCompleted() +void RecursiveDirModel::slotClear() { - foreach (const KDirLister* lister, d->mDirListers) { - if (!lister->isFinished()) { - return; - } - } - emit completed(); + beginResetModel(); + d->clear(); + endResetModel(); } } // namespace diff --git a/gwenview/lib/recursivedirmodel.h b/gwenview/lib/recursivedirmodel.h index 0049be07..d859c86a 100644 --- a/gwenview/lib/recursivedirmodel.h +++ b/gwenview/lib/recursivedirmodel.h @@ -58,7 +58,7 @@ Q_SIGNALS: private Q_SLOTS: void slotItemsAdded(const KFileItemList&); void slotItemsDeleted(const KFileItemList&); - void slotCompleted(); + void slotClear(); private: RecursiveDirModelPrivate* const d; }; -- 2.11.0