From kde-commits Wed May 31 19:23:13 2017 From: Alexander Bikadorov Date: Wed, 31 May 2017 19:23:13 +0000 To: kde-commits Subject: [krusader] krusader/FileSystem: FileSystem: Fix refresh after copy/move/{create dir} on non-local fi Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=149625860625426 Git commit 55e6d04f5184f414a64a3353e907927414578e44 by Alexander Bikadorov. Committed on 31/05/2017 at 19:16. Pushed by abikadorov into branch 'master'. FileSystem: Fix refresh after copy/move/{create dir} on non-local filesystem A proper fix instead of cf495c53. M +8 -4 krusader/FileSystem/defaultfilesystem.cpp M +1 -1 krusader/FileSystem/defaultfilesystem.h M +2 -5 krusader/FileSystem/filesystem.cpp M +1 -1 krusader/FileSystem/filesystem.h M +2 -1 krusader/FileSystem/virtualfilesystem.cpp M +1 -1 krusader/FileSystem/virtualfilesystem.h https://commits.kde.org/krusader/55e6d04f5184f414a64a3353e907927414578e44 diff --git a/krusader/FileSystem/defaultfilesystem.cpp b/krusader/FileSyste= m/defaultfilesystem.cpp index ea0bf7a0..e19808e3 100644 --- a/krusader/FileSystem/defaultfilesystem.cpp +++ b/krusader/FileSystem/defaultfilesystem.cpp @@ -66,8 +66,10 @@ void DefaultFileSystem::copyFiles(const QList &url= s, const QUrl &destinati = KIO::JobFlags flags =3D showProgressInfo ? KIO::DefaultFlags : KIO::Hi= deProgressInfo; = - KrJob *krJob =3D KrJob::createCopyJob(mode, urls, destination, flags); - connect(krJob, &KrJob::started, this, [=3D](KIO::Job *job) { connectJo= b(job, dest); }); + KrJob *krJob =3D KrJob::createCopyJob(mode, urls, dest, flags); + // destination can be a full path with filename when copying/moving a = single file + const QUrl destDir =3D dest.adjusted(QUrl::RemoveFilename); + connect(krJob, &KrJob::started, this, [=3D](KIO::Job *job) { connectJo= b(job, destDir); }); if (mode =3D=3D KIO::CopyJob::Move) { // notify source about removed f= iles connect(krJob, &KrJob::started, this, [=3D](KIO::Job *job) { conne= ctSourceFileSystem(job, urls); }); } @@ -100,19 +102,21 @@ void DefaultFileSystem::connectSourceFileSystem(KJob = *job, const QList url } } = -void DefaultFileSystem::addFiles(const QList &fileUrls, KIO::CopyJob= ::CopyMode mode, QString dir) +void DefaultFileSystem::addFiles(const QList &fileUrls, KIO::CopyJob= ::CopyMode mode, + const QString &dir) { QUrl destination(_currentDirectory); if (!dir.isEmpty()) { destination.setPath(QDir::cleanPath(destination.path() + '/' + dir= )); const QString scheme =3D destination.scheme(); if (scheme =3D=3D "tar" || scheme =3D=3D "zip" || scheme =3D=3D "k= rarc") { - if (QDir(cleanUrl(destination).path()).exists()) + if (QDir(destination.path()).exists()) // if we get out from the archive change the protocol destination.setScheme("file"); } } = + destination =3D ensureTrailingSlash(destination); // destination is al= ways a directory copyFiles(fileUrls, destination, mode); } = diff --git a/krusader/FileSystem/defaultfilesystem.h b/krusader/FileSystem/= defaultfilesystem.h index fcbb59d6..b2d21a74 100644 --- a/krusader/FileSystem/defaultfilesystem.h +++ b/krusader/FileSystem/defaultfilesystem.h @@ -63,7 +63,7 @@ public: void dropFiles(const QUrl &destination, QDropEvent *event) Q_DECL_OVER= RIDE; = void addFiles(const QList &fileUrls, KIO::CopyJob::CopyMode mode, - QString dir =3D "") Q_DECL_OVERRIDE; + const QString &dir =3D "") Q_DECL_OVERRIDE; void mkDir(const QString &name) Q_DECL_OVERRIDE; void rename(const QString &fileName, const QString &newName) Q_DECL_OV= ERRIDE; /// Return URL for file name - even if file does not exist. diff --git a/krusader/FileSystem/filesystem.cpp b/krusader/FileSystem/files= ystem.cpp index 2e9cce1e..614792b7 100644 --- a/krusader/FileSystem/filesystem.cpp +++ b/krusader/FileSystem/filesystem.cpp @@ -176,12 +176,9 @@ void FileSystem::deleteFiles(const QStringList &fileNa= mes, bool moveToTrash) = void FileSystem::connectJob(KJob *job, const QUrl &destination) { - // destination can be a full path with filename when copying/moving a = single file - const QUrl destDir =3D destination.adjusted(QUrl::RemoveFilename); - - connect(job, &KIO::Job::result, this, [=3D]() { emit fileSystemChanged= (destDir); }); + connect(job, &KIO::Job::result, this, [=3D]() { emit fileSystemChanged= (destination); }); // (additional) direct refresh if on local fs because watcher is too s= low - const bool refresh =3D cleanUrl(destDir) =3D=3D _currentDirectory && i= sLocal(); + const bool refresh =3D cleanUrl(destination) =3D=3D _currentDirectory = && isLocal(); connect(job, &KIO::Job::result, this, [=3D](KJob* job) { slotJobResult= (job, refresh); }); } = diff --git a/krusader/FileSystem/filesystem.h b/krusader/FileSystem/filesys= tem.h index 3ecfff06..05265ae1 100644 --- a/krusader/FileSystem/filesystem.h +++ b/krusader/FileSystem/filesystem.h @@ -94,7 +94,7 @@ public: /// Copy (copy, move or link) files to the current filesystem director= y or to "dir", the /// directory name relative to the current dir. May implemented async. virtual void addFiles(const QList &fileUrls, KIO::CopyJob::CopyM= ode mode, - QString dir =3D "") =3D 0; + const QString &dir =3D "") =3D 0; /// Create a new directory in the current directory. May implemented a= sync. virtual void mkDir(const QString &name) =3D 0; /// Rename file/directory in the current directory. May implemented as= ync. diff --git a/krusader/FileSystem/virtualfilesystem.cpp b/krusader/FileSyste= m/virtualfilesystem.cpp index e0e0eb5f..4b44cf00 100644 --- a/krusader/FileSystem/virtualfilesystem.cpp +++ b/krusader/FileSystem/virtualfilesystem.cpp @@ -87,7 +87,8 @@ void VirtualFileSystem::dropFiles(const QUrl &destination= , QDropEvent *event) copyFiles(urls, destination); } = -void VirtualFileSystem::addFiles(const QList &fileUrls, KIO::CopyJob= ::CopyMode /*mode*/, QString dir) +void VirtualFileSystem::addFiles(const QList &fileUrls, KIO::CopyJob= ::CopyMode /*mode*/, + const QString &dir) { QUrl destination(_currentDirectory); if (!dir.isEmpty()) { diff --git a/krusader/FileSystem/virtualfilesystem.h b/krusader/FileSystem/= virtualfilesystem.h index c6b1bc0e..1d43b273 100644 --- a/krusader/FileSystem/virtualfilesystem.h +++ b/krusader/FileSystem/virtualfilesystem.h @@ -55,7 +55,7 @@ public: = /// Add virtual files to the current directory. void addFiles(const QList &fileUrls, KIO::CopyJob::CopyMode mode= =3D KIO::CopyJob::Copy, - QString dir =3D "") Q_DECL_OVERRIDE; + const QString &dir =3D "") Q_DECL_OVERRIDE; /// Create a virtual directory. Only possible in the root directory. void mkDir(const QString &name) Q_DECL_OVERRIDE; /// Rename a (real) file in the current directory.