summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tdeio/tdeio/kdirlister.cpp51
-rw-r--r--tdeio/tdeio/kdirlister_p.h10
2 files changed, 34 insertions, 27 deletions
diff --git a/tdeio/tdeio/kdirlister.cpp b/tdeio/tdeio/kdirlister.cpp
index 31a705fa2..534ec6352 100644
--- a/tdeio/tdeio/kdirlister.cpp
+++ b/tdeio/tdeio/kdirlister.cpp
@@ -1946,44 +1946,47 @@ bool KDirLister::openURL( const KURL& _url, bool _keep, bool _reload )
d->changes = NONE;
+ // Some ioslaves like media:/ or home:/ can provide a local url istead of a remote one
// If a local path is available, monitor that instead of the given remote URL...
if (!_url.isLocalFile()) {
- TDEIO::LocalURLJob* localURLJob = TDEIO::localURL(_url);
- if (localURLJob) {
- d->openURL_url[localURLJob] = _url;
- d->openURL_keep[localURLJob] = _keep;
- d->openURL_reload[localURLJob] = _reload;
- connect(localURLJob, TQ_SIGNAL(localURL(TDEIO::LocalURLJob*, const KURL&, bool)), this, TQ_SLOT(slotOpenURLGotLocalURL(TDEIO::LocalURLJob*, const KURL&, bool)));
- connect(localURLJob, TQ_SIGNAL(destroyed()), this, TQ_SLOT(slotLocalURLKIODestroyed()));
- }
- return true;
+ TDEIO::LocalURLJob* localURLJob = TDEIO::localURL(_url);
+ if (localURLJob) {
+ d->openURLContext[localURLJob] = KDirListerPrivate::OpenURLContext{_url, _keep, _reload};
+ connect(localURLJob, TQ_SIGNAL(localURL(TDEIO::LocalURLJob*, const KURL&, bool)),
+ this, TQ_SLOT(slotOpenURLGotLocalURL(TDEIO::LocalURLJob*, const KURL&, bool)));
+ connect(localURLJob, TQ_SIGNAL(destroyed()), this, TQ_SLOT(slotLocalURLKIODestroyed()));
+ }
+ return true;
}
else {
- return s_pCache->listDir( this, _url, _keep, _reload );
+ return s_pCache->listDir( this, _url, _keep, _reload );
}
}
void KDirLister::slotOpenURLGotLocalURL(TDEIO::LocalURLJob *job, const KURL& url, bool isLocal) {
- KURL realURL = d->openURL_url[job];
+ auto jobIt = d->openURLContext.find(job);
+
+ Q_ASSERT( jobIt != d->openURLContext.end() );
+
+ auto ctx = jobIt.data();
+ KURL realURL = ctx.url;
if (isLocal) {
- realURL = url;
- realURL.setInternalReferenceURL(d->openURL_url[job].url());
- d->m_referenceURLMap[d->openURL_url[job].url()] = url.path();
+ realURL = url;
+ realURL.setInternalReferenceURL(ctx.url.url());
+ d->m_referenceURLMap[ctx.url.url()] = url.path();
}
- s_pCache->listDir( this, realURL, d->openURL_keep[job], d->openURL_reload[job] );
- d->openURL_url.remove(job);
- d->openURL_keep.remove(job);
- d->openURL_reload.remove(job);
+ d->openURLContext.remove(jobIt);
+ s_pCache->listDir( this, realURL, ctx.keep, ctx.reload );
}
void KDirLister::slotLocalURLKIODestroyed() {
- TDEIO::LocalURLJob* terminatedJob = const_cast<TDEIO::LocalURLJob*>(static_cast<const TDEIO::LocalURLJob*>(sender()));
+ TDEIO::Job* terminatedJob = const_cast<TDEIO::Job*>(static_cast<const TDEIO::Job*>(sender()));
+ auto jobIt = d->openURLContext.find(terminatedJob);
- if (d->openURL_url.contains(terminatedJob)) {
- s_pCache->listDir( this, d->openURL_url[terminatedJob], d->openURL_keep[terminatedJob], d->openURL_reload[terminatedJob] );
- d->openURL_url.remove(terminatedJob);
- d->openURL_keep.remove(terminatedJob);
- d->openURL_reload.remove(terminatedJob);
+ if (jobIt != d->openURLContext.end()) {
+ auto ctx = jobIt.data();
+ d->openURLContext.remove(jobIt);
+ s_pCache->listDir( this, ctx.url, ctx.keep, ctx.reload );
}
}
diff --git a/tdeio/tdeio/kdirlister_p.h b/tdeio/tdeio/kdirlister_p.h
index 3092e8e2e..7c3461c4b 100644
--- a/tdeio/tdeio/kdirlister_p.h
+++ b/tdeio/tdeio/kdirlister_p.h
@@ -111,9 +111,13 @@ public:
TQStringList mimeFilter, oldMimeFilter;
TQStringList mimeExcludeFilter, oldMimeExcludeFilter;
- TQMap<TDEIO::Job*, KURL> openURL_url;
- TQMap<TDEIO::Job*, bool> openURL_keep;
- TQMap<TDEIO::Job*, bool> openURL_reload;
+ struct OpenURLContext {
+ KURL url;
+ bool keep;
+ bool reload;
+ };
+
+ TQMap<TDEIO::Job*, OpenURLContext> openURLContext;
TQMap<TQString,TQString> m_referenceURLMap;
};