KIO
kcoredirlister.cpp
53 connect(&pendingUpdateTimer, &QTimer::timeout, this, &KCoreDirListerCache::processPendingUpdates);
61 kdirnotify = new org::kde::KDirNotify(QString(), QString(), QDBusConnection::sessionBus(), this);
62 connect(kdirnotify, &org::kde::KDirNotify::FileRenamedWithLocalPath, this, &KCoreDirListerCache::slotFileRenamed);
63 connect(kdirnotify, &org::kde::KDirNotify::FilesAdded, this, &KCoreDirListerCache::slotFilesAdded);
64 connect(kdirnotify, &org::kde::KDirNotify::FilesChanged, this, &KCoreDirListerCache::slotFilesChanged);
65 connect(kdirnotify, &org::kde::KDirNotify::FilesRemoved, this, qOverload<const QStringList &>(&KCoreDirListerCache::slotFilesRemoved));
87 bool KCoreDirListerCache::listDir(KCoreDirLister *lister, const QUrl &dirUrl, bool _keep, bool _reload)
109 qCDebug(KIO_CORE_DIRLISTER) << lister << "url=" << _url << "keep=" << _keep << "reload=" << _reload;
199 job->addMetaData(QStringLiteral("statDetails"), QString::number(KIO::StatDefaultDetails | KIO::StatMimeType));
215 qCDebug(KIO_CORE_DIRLISTER) << "Entry currently being listed:" << _url << "by" << dirData.listersCurrentlyListing;
240 // ### If it finishes before the CachedItemsJob, then we'll emit cached items after completed(), not sure how bad this is.
252 KCoreDirListerPrivate::CachedItemsJob *KCoreDirListerPrivate::cachedItemsJobForUrl(const QUrl &url) const
262 KCoreDirListerPrivate::CachedItemsJob::CachedItemsJob(KCoreDirLister *lister, const QUrl &url, bool reload)
269 qCDebug(KIO_CORE_DIRLISTER) << "Creating CachedItemsJob" << this << "for lister" << lister << url;
304 void KCoreDirListerCache::emitItemsFromCache(KCoreDirListerPrivate::CachedItemsJob *cachedItemsJob,
351 void KCoreDirListerCache::forgetCachedItemsJob(KCoreDirListerPrivate::CachedItemsJob *cachedItemsJob, KCoreDirLister *lister, const QUrl &_url)
364 qCDebug(KIO_CORE_DIRLISTER) << "Moving from listing to holding, because no more job" << lister << _url;
368 qCDebug(KIO_CORE_DIRLISTER) << "Still having a listjob" << listJob << ", so not moving to currently-holding.";
433 // So, change of plan, let's kill it after all, in a way that triggers slotResult/slotUpdateResult.
487 // noauto -> manually mounted. Otherwise, mounted at boot time, won't be unmounted any time soon hopefully.
547 // 2) [**] becomes: if (Drive is hotpluggable or Volume is removable) "set to dirty" else "keep watch"
548 const KMountPoint::List possibleMountPoints = KMountPoint::possibleMountPoints(KMountPoint::NeedMountOptions);
647 qCDebug(KIO_CORE_DIRLISTER) << "lister" << kdl << "m_cachedItemsJobs=" << kdl->d->m_cachedItemsJobs;
658 const bool requestFromListers = std::any_of(listers.cbegin(), listers.cend(), [](KCoreDirLister *lister) {
661 const bool requestFromholders = std::any_of(holders.cbegin(), holders.cend(), [](KCoreDirLister *lister) {
666 job->addMetaData(QStringLiteral("statDetails"), QString::number(KIO::StatDefaultDetails | KIO::StatMimeType));
731 KFileItem KCoreDirListerCache::findByName(const KCoreDirLister *lister, const QString &_name) const
799 void KCoreDirListerCache::slotFilesRemoved(const QStringList &fileList) // from KDirNotify signals
834 auto dirItemIt = std::find_if(dirItem->lstItems.begin(), dirItem->lstItems.end(), [&url](const KFileItem &fitem) {
840 // If we found a fileitem, we can test if it's a dir. If not, we'll go to deleteDir just in case.
849 for (auto rit = removedItemsByDir.constBegin(), cend = removedItemsByDir.constEnd(); rit != cend; ++rit) {
865 void KCoreDirListerCache::slotFilesChanged(const QStringList &fileList) // from KDirNotify signals
898 void KCoreDirListerCache::slotFileRenamed(const QString &_src, const QString &_dst, const QString &dstPath) // from KDirNotify signals
931 nameOnly = nameOnly && src.adjusted(QUrl::RemoveFilename) == dst.adjusted(QUrl::RemoveFilename);
935 // #172945 - if the fileitem was the root item of a DirItem that was just removed from the cache,
945 && dstPath.isEmpty()) { // it uses UDS_LOCAL_PATH and we don't know the new path? needs an update then
974 std::set<KCoreDirLister *> KCoreDirListerCache::emitRefreshItem(const KFileItem &oldItem, const KFileItem &fileitem)
976 qCDebug(KIO_CORE_DIRLISTER) << "old:" << oldItem.name() << oldItem.url() << "new:" << fileitem.name() << fileitem.url();
1060 const QList<QUrl> urls = directoriesForCanonicalPath(url.adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash));
1080 if (updPath.startsWith(dirPath) && updPath.indexOf(QLatin1Char('/'), dirPath.length()) == -1) { // direct child item
1132 const QList<QUrl> urls = directoriesForCanonicalPath(dirUrl.adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash));
1150 qCWarning(KIO_CORE) << "Internal error: job is listing" << url << "but itemsInUse only knows about" << itemsInUse.keys();
1157 qCWarning(KIO_CORE) << "Internal error: job is listing" << url << "but directoryData doesn't know about that url, only about:" << directoryData.keys();
1164 qCWarning(KIO_CORE) << "Internal error: job is listing" << url << "but directoryData says no listers are currently listing " << url;
1221 if (cachedHidden && cachedHidden->listedFiles.find(name) != cachedHidden->listedFiles.cend()) {
1256 jobUrl = jobUrl.adjusted(QUrl::StripTrailingSlash); // need remove trailing slashes again, in case of redirections
1271 qCWarning(KIO_CORE) << "OOOOPS, nothing in directoryData.listersCurrentlyListing for" << jobUrl;
1414 // only in this case there can newUrl already be in listersCurrentlyListing or listersCurrentlyHolding
1468 // emit old items: listers, holders. NOT: newUrlListers/newUrlHolders, they already have them listed
1559 newDirUrl.setPath(Utils::concatPaths(newDirUrl.path(), relPath)); // add unchanged relative path
1566 itemsToChange.emplace_back(oldDirUrl.adjusted(QUrl::StripTrailingSlash), newDirUrl.adjusted(QUrl::StripTrailingSlash), dir);
1667 const QList<QUrl> cachedDirs = itemsCached.keys(); // seems slow, but there's no qcache iterator...
1686 jobUrl = jobUrl.adjusted(QUrl::StripTrailingSlash); // need remove trailing slashes again, in case of redirections
1694 const QList<KCoreDirLister *> listers = dirData.listersCurrentlyHolding + dirData.listersCurrentlyListing;
1763 Q_ASSERT(!name.isEmpty()); // A KIO worker setting an empty UDS_NAME is utterly broken, fix the KIO worker!
1797 if (cachedHidden && cachedHidden->listedFiles.find(name) != cachedHidden->listedFiles.cend()) {
1913 auto it = std::remove_if(lstItems.begin(), lstItems.end(), [&itemsToDelete](const KFileItem &item) {
1921 void KCoreDirListerCache::itemsDeleted(const QList<KCoreDirLister *> &listers, const KFileItemList &deletedItems)
2059 qCDebug(KIO_CORE_DIRLISTER) << " Lister" << listit << "has CachedItemsJobs" << listit->d->m_cachedItemsJobs;
2078 qCDebug(KIO_CORE_DIRLISTER) << " " << jit.key() << "listing" << joburl(jit.key()) << ":" << (*jit).count() << "entries.";
2086 << "rootItem:" << (!dirItem->rootItem.isNull() ? dirItem->rootItem.url().toString() : QStringLiteral("NULL")) << "with"
2092 qCWarning(KIO_CORE) << "Fatal Error: HUH? Lister" << listit << "is supposed to be listing, but has no job!";
2360 d->settings.lstFilters.append(QRegularExpression(unanchoredPattern(filter), QRegularExpression::CaseInsensitiveOption));
2376 if (mimeFilter.contains(QLatin1String("application/octet-stream")) || mimeFilter.contains(QLatin1String("all/allfiles"))) { // all files
2416 return std::any_of(settings.lstFilters.cbegin(), settings.lstFilters.cend(), [&name](const QRegularExpression &filter) {
2430 return q->doMimeFilter(mime, settings.mimeFilter) && doMimeExcludeFilter(mime, settings.mimeExcludeFilter);
2491 bool KCoreDirListerPrivate::doMimeExcludeFilter(const QString &mime, const QStringList &filters) const
2531 void KCoreDirListerPrivate::addNewItems(const QUrl &directoryUrl, const QList<KFileItem> &items)
2535 // Of course if there is no filter and we can do a range-insertion instead of a loop, that might be good.
2541 void KCoreDirListerPrivate::addRefreshItem(const QUrl &directoryUrl, const KFileItem &oldItem, const KFileItem &item)
2607 std::copy_if(itemsList.cbegin(), itemsList.cend(), std::back_inserter(items), [this](const KFileItem &item) {
2753 std::copy_if(allItems->cbegin(), allItems->cend(), std::back_inserter(result), [this](const KFileItem &item) {
2784 qCWarning(KIO_CORE) << "Unexpected redirection from" << oldUrl << "to" << newUrl << "but this dirlister is currently listing/holding" << lstDirs;
2829 qCDebug(KIO_CORE_DIRLISTER) << "Not moving" << kdl << "to listersCurrentlyHolding because it still has job" << kdl->d->m_cachedItemsJobs;
2853 KCoreDirListerCache::CacheHiddenFile *KCoreDirListerCache::cachedDotHiddenForDir(const QString &dir)
static KFileItem cachedItemForUrl(const QUrl &url)
Return the KFileItem for the given URL, if it was listed recently and it's still in the cache,...
Definition: kcoredirlister.cpp:2834
bool isFinished() const
Returns true if no I/O operation is currently in progress.
Definition: kcoredirlister.cpp:2309
void listingDirCanceled(const QUrl &dirUrl)
Tell the view that the listing of the directory dirUrl was canceled.
void append(const T &value)
QMap::const_iterator constBegin() const const
void setLocalPath(const QString &path)
Sets the item's local path (UDS_LOCAL_PATH).
Definition: kfileitem.cpp:665
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const const
bool isNull() const const
bool isParentOf(const QUrl &childUrl) const const
QString wildcardToRegularExpression(const QString &pattern)
void clearDir(const QUrl &dirUrl)
Signals to the view to clear all items from directory dirUrl.
void refresh()
Throw away and re-read (for local files) all information about the file.
Definition: kfileitem.cpp:610
void started(const QUrl &dirUrl)
Tell the view that this KCoreDirLister has started to list dirUrl.
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
QString number(int n, int base)
virtual void stop()
Stop listing all directories currently being listed.
Definition: kcoredirlister.cpp:2135
ReadOnly
static bool exists()
QString pattern(Mode mode=Reading)
void stop(Ekos::AlignState mode)
void result(KJob *job)
void speed(KJob *job, unsigned long speed)
void percentChanged(KJob *job, unsigned long percent)
@ NeedMountOptions
Also fetch the options used when mounting, see KMountPoint::mountOptions().
Definition: kmountpoint.h:73
QStringList split(const QString &sep, QString::SplitBehavior behavior, Qt::CaseSensitivity cs) const const
int count(const T &value) const const
const QList< QKeySequence > & reload()
void forgetDirs(const QUrl &dirUrl)
Stop listening for further changes in the given directory.
Definition: kcoredirlister.cpp:2145
QMap::iterator begin()
bool contains(const QString &str, Qt::CaseSensitivity cs) const const
virtual void updateDirectory(const QUrl &dirUrl)
Update the directory dirUrl.
Definition: kcoredirlister.cpp:2304
void clear()
Definition: kfileitem.h:657
Q_SCRIPTABLE Q_NOREPLY void start()
void addMetaData(const QString &key, const QString &value)
Add key/value pair to the meta data that is sent to the worker.
Definition: job.cpp:228
void chop(int n)
virtual bool doMimeFilter(const QString &mimeType, const QStringList &filters) const
Called by the public matchesMimeFilter() to do the actual filtering.
Definition: kcoredirlister.cpp:2473
void entries(KIO::Job *job, const KIO::UDSEntryList &list)
This signal emits the entry found by the job while listing.
virtual bool doNameFilter(const QString &name, const QList< QRegExp > &filters) const
Called by the public matchesFilter() to do the actual filtering.
Definition: kcoredirlister.cpp:2465
QList::const_iterator constBegin() const const
void infoMessage(KJob *job, const QString &plain, const QString &rich=QString())
virtual void showErrorMessage()
KIOFILEWIDGETS_EXPORT QStringList list(const QString &fileClass)
Returns a list of directories associated with this file-class.
Definition: krecentdirs.cpp:39
bool kill(KillVerbosity verbosity=Quietly)
bool contains(const T &value) const const
virtual void jobStarted(KIO::ListJob *)
Reimplemented by KDirLister to associate windows with jobs.
Definition: kcoredirlister.cpp:2704
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QHash::const_iterator cend() const const
bool matches(const QUrl &url, QUrl::FormattingOptions options) const const
KJobUiDelegate * uiDelegate() const
QList< QUrl > fromStringList(const QStringList &urls, QUrl::ParsingMode mode)
QHash::iterator insert(const Key &key, const T &value)
void setMimeExcludeFilter(const QStringList &mimeList)
Filtering should be done with KFileFilter.
Definition: kcoredirlister.cpp:2384
QString::const_iterator cend() const const
Q_GLOBAL_STATIC(Internal::StaticControl, s_instance) class ControlPrivate
KCoreDirLister(QObject *parent=nullptr)
Create a directory lister.
Definition: kcoredirlister.cpp:2098
void reserve(int alloc)
virtual void setShowingDotFiles(bool showDotFiles)
Toggles whether hidden files (files whose name start with '.
Definition: kcoredirlister.cpp:2188
bool isValid() const const
void setName(const QString &name)
Sets the item's name (i.e. the filename).
Definition: kfileitem.cpp:675
const QUrl & redirectionUrl() const
Returns the ListJob's redirection URL.
Definition: listjob.cpp:287
int size() const const
QMap::iterator end()
void prepend(const T &value)
void clear()
Signals to the view to remove all items (when e.g. going from dirA to dirB).
int size() const const
QDBusConnection sessionBus()
KFileItemList items(WhichItems which=FilteredItems) const
Returns the items listed for the current url().
Definition: kcoredirlister.cpp:2737
virtual KFileItem findByUrl(const QUrl &url) const
Find an item by its URL.
Definition: kcoredirlister.cpp:2319
StripTrailingSlash
QMimeType mimeTypeForName(const QString &nameOrAlias) const const
bool matchesMimeFilter(const QString &mimeType) const
Checks whether mimeType matches a filter in the list of MIME types.
Definition: kcoredirlister.cpp:2422
QMap::const_iterator constEnd() const const
Helper class for the kiojob used to list and update a directory.
Definition: kcoredirlister.h:54
void setRequestMimeTypeWhileListing(bool request)
Toggles whether to request MIME types from the worker or in-process.
Definition: kcoredirlister.cpp:2214
SkipEmptyParts
void timeout()
bool isEmpty() const const
virtual bool openUrl(const QUrl &dirUrl, OpenUrlFlags flags=NoFlags)
Run the directory lister on the given url.
Definition: kcoredirlister.cpp:2123
QUrl fromLocalFile(const QString &localFile)
QString fileName(QUrl::ComponentFormattingOptions options) const const
virtual void setDirOnlyMode(bool dirsOnly)
Call this to list only directories (by default all items (directories and files) are listed).
Definition: kcoredirlister.cpp:2199
int length() const const
WhichItems
Used by items() and itemsForDir() to specify whether you want all items for a directory or just the f...
Definition: kcoredirlister.h:474
void setShowHiddenFiles(bool showHiddenFiles)
Toggles whether hidden files (e.g.
Definition: kcoredirlister.cpp:2177
Definition: job_base.h:44
virtual void setMimeFilter(const QStringList &mimeList)
Set MIME type based filter to only list items matching the given MIME types.
Definition: kcoredirlister.cpp:2369
QList< QUrl > directories() const
Returns all URLs that are listed by this KCoreDirLister.
Definition: kcoredirlister.cpp:2234
bool isEmpty() const const
name
QString toLocalFile() const const
QList::const_iterator cend() const const
QStringList mimeFilters() const
Returns the list of MIME type based filters, as set via setMimeFilter().
Definition: kcoredirlister.cpp:2402
bool isValid() const const
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
static List possibleMountPoints(DetailsNeededFlags infoNeeded=BasicInfoNeeded)
This function gives a list of all possible mountpoints.
Definition: kmountpoint.cpp:169
static KDirWatch * self()
QString fileName() const const
CaseInsensitiveOption
const Key key(const T &value, const Key &defaultKey) const const
void insert(int i, const T &value)
bool toBool() const const
QString & remove(int position, int n)
QString absolutePath() const const
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const const
QString cleanPath(const QString &path)
bool setProperty(const char *name, const QVariant &value)
QString errorString() const override
Converts an error code and a non-i18n error message into an error message in the current language.
Definition: job_error.cpp:22
KIOFILEWIDGETS_EXPORT QString dir(const QString &fileClass)
Returns the most recently used directory associated with this file-class.
Definition: krecentdirs.cpp:47
QString path(QUrl::ComponentFormattingOptions options) const const
QUrl url() const
Returns the top level URL that is listed by this KCoreDirLister.
Definition: kcoredirlister.cpp:2229
QList::iterator erase(QList::iterator pos)
void totalSize(KJob *job, qulonglong size)
void setAutoErrorHandlingEnabled(bool enable)
Enable or disable auto error handling.
Definition: kcoredirlister.cpp:2848
QString & insert(int position, QChar ch)
@ Reload
Indicates whether to use the cache or to reread the directory from the disk.
Definition: kcoredirlister.h:84
QString name(StandardShortcut id)
KStandardDirs * dirs()
void dirty(const QString &path)
virtual void setNameFilter(const QString &filter)
Set a name filter to only list items matching this name, e.g. "*.cpp".
Definition: kcoredirlister.cpp:2347
bool isLocalFile() const const
QList::const_iterator cbegin() const const
QUrl adjusted(QUrl::FormattingOptions options) const const
virtual void setAutoUpdate(bool enable)
Toggle automatic directory updating, when a directory changes (using KDirWatch).
Definition: kcoredirlister.cpp:2155
KFileItemList itemsForDir(const QUrl &dirUrl, WhichItems which=FilteredItems) const
Returns the items listed for the given dirUrl.
Definition: kcoredirlister.cpp:2742
bool cmp(const KFileItem &item) const
Somewhat like a comparison operator, but more explicit, and it can detect that two fileitems differ i...
Definition: kfileitem.cpp:1376
void deleted(const QString &path)
bool matchesFilter(const QString &name) const
Checks whether name matches a filter in the list of name filters.
Definition: kcoredirlister.cpp:2408
void clear()
Q_SCRIPTABLE Q_NOREPLY void abort()
QList::iterator begin()
Definition: listjob.h:27
@ HideProgressInfo
Hide progress information dialog, i.e. don't show a GUI.
Definition: job_base.h:274
virtual void handleErrorMessage(const QString &message)
Reimplement to customize error handling.
Definition: kcoredirlister.cpp:2506
void processedSize(KJob *job, qulonglong size)
void created(const QString &path)
QHash::const_iterator cbegin() const const
Ptr findByPath(const QString &path) const
Find the mountpoint on which resides path For instance if /home is a separate partition,...
Definition: kmountpoint.cpp:424
virtual void emitChanges()
Actually emit the changes made with setShowHiddenFiles, setDirOnlyMode, setNameFilter and setMimeFilt...
Definition: kcoredirlister.cpp:2239
int error() const
KIOCORE_EXPORT ListJob * listDir(const QUrl &url, JobFlags flags=DefaultFlags, bool includeHidden=true)
List the contents of url, which is assumed to be a directory.
Definition: listjob.cpp:243
QDateTime lastModified() const const
QList::iterator end()
virtual KFileItem findByName(const QString &name) const
Find an item by its name.
Definition: kcoredirlister.cpp:2324
virtual void handleError(KIO::Job *)
Reimplement to customize error handling.
Definition: kcoredirlister.cpp:2499
void clear()
QString mid(int position, int n) const const
void setDelayedMimeTypes(bool delayedMimeTypes)
Delayed MIME types feature: If enabled, MIME types will be fetched on demand, which leads to a faster...
Definition: kcoredirlister.cpp:2765
Definition: kfileitem.h:35
QString message
T value(int i) const const
QString & append(QChar ch)
QString canonicalFilePath() const const
QVariant property(const char *name) const const
void listingDirCompleted(const QUrl &dirUrl)
Tell the view that the listing of the directory dirUrl is finished.
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Tue Feb 7 2023 04:00:35 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006
Documentation copyright © 1996-2023 The KDE developers.
Generated on Tue Feb 7 2023 04:00:35 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.