From 0b81b4baf9c7eebbdcf45745077d5a009635b9c8 Mon Sep 17 00:00:00 2001 From: Ahmad Samir Date: Fri, 16 Jul 2021 00:29:07 +0200 Subject: [PATCH 1/1] Use KDirLister directly now that it emits a jobError() signal Since KIO 5.82, KCoreDirLister (the base class of KDirLister) emits a jobError() signal when the ListJob used internally emits an error. Drop KFileItemModelDirLister class, now redundant. This also bump the KF version to 5.82. --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 1 - src/dolphinpart.cpp | 2 +- src/kitemviews/kfileitemmodel.cpp | 39 ++++++++++------- src/kitemviews/kfileitemmodel.h | 10 ++++- .../private/kfileitemmodeldirlister.cpp | 40 ----------------- .../private/kfileitemmodeldirlister.h | 43 ------------------- src/tests/kfileitemlistviewtest.cpp | 3 +- src/tests/kfileitemmodeltest.cpp | 2 +- 9 files changed, 36 insertions(+), 106 deletions(-) delete mode 100644 src/kitemviews/private/kfileitemmodeldirlister.cpp delete mode 100644 src/kitemviews/private/kfileitemmodeldirlister.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c8957cd6d..7d50205bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE project(Dolphin VERSION ${RELEASE_SERVICE_VERSION}) set(QT_MIN_VERSION "5.15.0") -set(KF5_MIN_VERSION "5.81.0") +set(KF5_MIN_VERSION "5.82.0") set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 46dbaa152..147f18c00 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -82,7 +82,6 @@ target_sources(dolphinprivate PRIVATE kitemviews/private/kdirectorycontentscounter.cpp kitemviews/private/kdirectorycontentscounterworker.cpp kitemviews/private/kfileitemclipboard.cpp - kitemviews/private/kfileitemmodeldirlister.cpp kitemviews/private/kfileitemmodelfilter.cpp kitemviews/private/kitemlistheaderwidget.cpp kitemviews/private/kitemlistkeyboardsearchmanager.cpp diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index e2e5393da..9c551d67a 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -11,7 +11,6 @@ #include "dolphinpart_ext.h" #include "dolphinremoveaction.h" #include "kitemviews/kfileitemmodel.h" -#include "kitemviews/private/kfileitemmodeldirlister.h" #include "views/dolphinnewfilemenuobserver.h" #include "views/dolphinremoteencoding.h" #include "views/dolphinview.h" @@ -22,6 +21,7 @@ #include #include #include +#include #include #include #include diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index e03ec7c0e..b3080d933 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -11,10 +11,10 @@ #include "dolphin_generalsettings.h" #include "dolphin_detailsmodesettings.h" #include "dolphindebug.h" -#include "private/kfileitemmodeldirlister.h" #include "private/kfileitemmodelsortalgorithm.h" -#include +#include +#include #include #include @@ -53,7 +53,8 @@ KFileItemModel::KFileItemModel(QObject* parent) : loadSortingSettings(); - m_dirLister = new KFileItemModelDirLister(this); + m_dirLister = new KDirLister(this); + m_dirLister->setAutoErrorHandlingEnabled(false); m_dirLister->setDelayedMimeTypes(true); const QWidget* parentWidget = qobject_cast(parent); @@ -61,23 +62,17 @@ KFileItemModel::KFileItemModel(QObject* parent) : m_dirLister->setMainWindow(parentWidget->window()); } - connect(m_dirLister, &KFileItemModelDirLister::started, this, &KFileItemModel::directoryLoadingStarted); + connect(m_dirLister, &KCoreDirLister::started, this, &KFileItemModel::directoryLoadingStarted); connect(m_dirLister, QOverload<>::of(&KCoreDirLister::canceled), this, &KFileItemModel::slotCanceled); - connect(m_dirLister, &KFileItemModelDirLister::itemsAdded, this, &KFileItemModel::slotItemsAdded); - connect(m_dirLister, &KFileItemModelDirLister::itemsDeleted, this, &KFileItemModel::slotItemsDeleted); - connect(m_dirLister, &KFileItemModelDirLister::refreshItems, this, &KFileItemModel::slotRefreshItems); + connect(m_dirLister, &KCoreDirLister::itemsAdded, this, &KFileItemModel::slotItemsAdded); + connect(m_dirLister, &KCoreDirLister::itemsDeleted, this, &KFileItemModel::slotItemsDeleted); + connect(m_dirLister, &KCoreDirLister::refreshItems, this, &KFileItemModel::slotRefreshItems); connect(m_dirLister, QOverload<>::of(&KCoreDirLister::clear), this, &KFileItemModel::slotClear); - connect(m_dirLister, &KFileItemModelDirLister::infoMessage, this, &KFileItemModel::infoMessage); - connect(m_dirLister, &KFileItemModelDirLister::errorMessage, this, &KFileItemModel::errorMessage); - connect(m_dirLister, &KFileItemModelDirLister::percent, this, &KFileItemModel::directoryLoadingProgress); + connect(m_dirLister, &KCoreDirLister::infoMessage, this, &KFileItemModel::infoMessage); + connect(m_dirLister, &KCoreDirLister::jobError, this, &KFileItemModel::slotListerError); + connect(m_dirLister, &KCoreDirLister::percent, this, &KFileItemModel::directoryLoadingProgress); connect(m_dirLister, QOverload::of(&KCoreDirLister::redirection), this, &KFileItemModel::directoryRedirection); - connect(m_dirLister, &KFileItemModelDirLister::urlIsFileError, this, &KFileItemModel::urlIsFileError); - -#if KIO_VERSION < QT_VERSION_CHECK(5, 79, 0) - connect(m_dirLister, QOverload::of(&KCoreDirLister::completed), this, &KFileItemModel::slotCompleted); -#else connect(m_dirLister, &KCoreDirLister::listingDirCompleted, this, &KFileItemModel::slotCompleted); -#endif // Apply default roles that should be determined resetRoles(); @@ -2501,3 +2496,15 @@ bool KFileItemModel::isConsistent() const return true; } + +void KFileItemModel::slotListerError(KIO::Job *job) +{ + if (job->error() == KIO::ERR_IS_FILE) { + if (auto *listJob = qobject_cast(job)) { + Q_EMIT urlIsFileError(listJob->url()); + } + } else { + const QString errorString = job->errorString(); + Q_EMIT errorMessage(!errorString.isEmpty() ? errorString : i18nc("@info:status", "Unknown error.")); + } +} diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h index acf4b761c..3602c16c1 100644 --- a/src/kitemviews/kfileitemmodel.h +++ b/src/kitemviews/kfileitemmodel.h @@ -20,9 +20,14 @@ #include -class KFileItemModelDirLister; +class KDirLister; + class QTimer; +namespace KIO { + class Job; +} + /** * @brief KItemModelBase implementation for KFileItems. * @@ -270,6 +275,7 @@ private Q_SLOTS: void slotRefreshItems(const QList >& items); void slotClear(); void slotSortingChoiceChanged(); + void slotListerError(KIO::Job *job); void dispatchPendingItemsToInsert(); @@ -458,7 +464,7 @@ private: bool isConsistent() const; private: - KFileItemModelDirLister* m_dirLister; + KDirLister *m_dirLister = nullptr; QCollator m_collator; bool m_naturalSorting; diff --git a/src/kitemviews/private/kfileitemmodeldirlister.cpp b/src/kitemviews/private/kfileitemmodeldirlister.cpp deleted file mode 100644 index eb860a2b9..000000000 --- a/src/kitemviews/private/kfileitemmodeldirlister.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2006-2012 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#include "kfileitemmodeldirlister.h" - -#include -#include -#include - -KFileItemModelDirLister::KFileItemModelDirLister(QObject* parent) : - KDirLister(parent) -{ -#if KIO_VERSION < QT_VERSION_CHECK(5, 82, 0) - setAutoErrorHandlingEnabled(false, nullptr); -#else - setAutoErrorHandlingEnabled(false); -#endif -} - -KFileItemModelDirLister::~KFileItemModelDirLister() -{ -} - -void KFileItemModelDirLister::handleError(KIO::Job* job) -{ - if (job->error() == KIO::ERR_IS_FILE) { - Q_EMIT urlIsFileError(url()); - } else { - const QString errorString = job->errorString(); - if (errorString.isEmpty()) { - Q_EMIT errorMessage(i18nc("@info:status", "Unknown error.")); - } else { - Q_EMIT errorMessage(errorString); - } - } -} - diff --git a/src/kitemviews/private/kfileitemmodeldirlister.h b/src/kitemviews/private/kfileitemmodeldirlister.h deleted file mode 100644 index 563695975..000000000 --- a/src/kitemviews/private/kfileitemmodeldirlister.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2006-2012 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#ifndef KFILEITEMMODELDIRLISTER_H -#define KFILEITEMMODELDIRLISTER_H - -#include "dolphin_export.h" - -#include - -#include - -/** - * @brief Extends the class KDirLister by emitting a signal when an - * error occurred instead of showing an error dialog. - * KDirLister::autoErrorHandlingEnabled() is set to false. - */ -class DOLPHIN_EXPORT KFileItemModelDirLister : public KDirLister -{ - Q_OBJECT - -public: - explicit KFileItemModelDirLister(QObject* parent = nullptr); - ~KFileItemModelDirLister() override; - -Q_SIGNALS: - /** Is emitted whenever an error has occurred. */ - void errorMessage(const QString& msg); - - /** - * Is emitted when the URL of the directory lister represents a file. - * In this case no signal errorMessage() will be emitted. - */ - void urlIsFileError(const QUrl& url); - -protected: - void handleError(KIO::Job* job) override; -}; - -#endif diff --git a/src/tests/kfileitemlistviewtest.cpp b/src/tests/kfileitemlistviewtest.cpp index 4a5cd0630..22d5d3a01 100644 --- a/src/tests/kfileitemlistviewtest.cpp +++ b/src/tests/kfileitemlistviewtest.cpp @@ -6,9 +6,10 @@ #include "kitemviews/kfileitemlistview.h" #include "kitemviews/kfileitemmodel.h" -#include "kitemviews/private/kfileitemmodeldirlister.h" #include "testdir.h" +#include + #include #include #include diff --git a/src/tests/kfileitemmodeltest.cpp b/src/tests/kfileitemmodeltest.cpp index f527fbc61..8dccc2c6f 100644 --- a/src/tests/kfileitemmodeltest.cpp +++ b/src/tests/kfileitemmodeltest.cpp @@ -12,10 +12,10 @@ #include #include +#include #include #include "kitemviews/kfileitemmodel.h" -#include "kitemviews/private/kfileitemmodeldirlister.h" #include "testdir.h" void myMessageOutput(QtMsgType type, const QMessageLogContext& context, const QString& msg) -- 2.47.3