[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [krusader] krusader/FileSystem: FileSystem: Fix refresh after copy/move/{create dir} on non-local fi
From:       Alexander Bikadorov <null () kde ! org>
Date:       2017-05-31 19:23:13
Message-ID: E1dG9D7-00015r-50 () code ! kde ! org
[Download RAW message or body]

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/FileSystem/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<QUrl> &urls, const QUrl &destinati
 
     KIO::JobFlags flags = showProgressInfo ? KIO::DefaultFlags : KIO::HideProgressInfo;
 
-    KrJob *krJob = KrJob::createCopyJob(mode, urls, destination, flags);
-    connect(krJob, &KrJob::started, this, [=](KIO::Job *job) { connectJob(job, dest); });
+    KrJob *krJob = KrJob::createCopyJob(mode, urls, dest, flags);
+    // destination can be a full path with filename when copying/moving a single file
+    const QUrl destDir = dest.adjusted(QUrl::RemoveFilename);
+    connect(krJob, &KrJob::started, this, [=](KIO::Job *job) { connectJob(job, destDir); });
     if (mode == KIO::CopyJob::Move) { // notify source about removed files
         connect(krJob, &KrJob::started, this, [=](KIO::Job *job) { connectSourceFileSystem(job, urls); });
     }
@@ -100,19 +102,21 @@ void DefaultFileSystem::connectSourceFileSystem(KJob *job, const QList<QUrl> url
     }
 }
 
-void DefaultFileSystem::addFiles(const QList<QUrl> &fileUrls, KIO::CopyJob::CopyMode mode, QString dir)
+void DefaultFileSystem::addFiles(const QList<QUrl> &fileUrls, KIO::CopyJob::CopyMode mode,
+                                 const QString &dir)
 {
     QUrl destination(_currentDirectory);
     if (!dir.isEmpty()) {
         destination.setPath(QDir::cleanPath(destination.path() + '/' + dir));
         const QString scheme = destination.scheme();
         if (scheme == "tar" || scheme == "zip" || scheme == "krarc") {
-            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 = ensureTrailingSlash(destination); // destination is always 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_OVERRIDE;
 
     void addFiles(const QList<QUrl> &fileUrls, KIO::CopyJob::CopyMode mode,
-                              QString dir = "") Q_DECL_OVERRIDE;
+                  const QString &dir = "") Q_DECL_OVERRIDE;
     void mkDir(const QString &name) Q_DECL_OVERRIDE;
     void rename(const QString &fileName, const QString &newName) Q_DECL_OVERRIDE;
     /// Return URL for file name - even if file does not exist.
diff --git a/krusader/FileSystem/filesystem.cpp b/krusader/FileSystem/filesystem.cpp
index 2e9cce1e..614792b7 100644
--- a/krusader/FileSystem/filesystem.cpp
+++ b/krusader/FileSystem/filesystem.cpp
@@ -176,12 +176,9 @@ void FileSystem::deleteFiles(const QStringList &fileNames, 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 = destination.adjusted(QUrl::RemoveFilename);
-
-    connect(job, &KIO::Job::result, this, [=]() { emit fileSystemChanged(destDir); });
+    connect(job, &KIO::Job::result, this, [=]() { emit fileSystemChanged(destination); });
     // (additional) direct refresh if on local fs because watcher is too slow
-    const bool refresh = cleanUrl(destDir) == _currentDirectory && isLocal();
+    const bool refresh = cleanUrl(destination) == _currentDirectory && isLocal();
     connect(job, &KIO::Job::result, this, [=](KJob* job) { slotJobResult(job, refresh); });
 }
 
diff --git a/krusader/FileSystem/filesystem.h b/krusader/FileSystem/filesystem.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 directory or to "dir", the
     /// directory name relative to the current dir. May implemented async.
     virtual void addFiles(const QList<QUrl> &fileUrls, KIO::CopyJob::CopyMode mode,
-                          QString dir = "") = 0;
+                          const QString &dir = "") = 0;
     /// Create a new directory in the current directory. May implemented async.
     virtual void mkDir(const QString &name) = 0;
     /// Rename file/directory in the current directory. May implemented async.
diff --git a/krusader/FileSystem/virtualfilesystem.cpp b/krusader/FileSystem/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<QUrl> &fileUrls, KIO::CopyJob::CopyMode /*mode*/, QString dir)
+void VirtualFileSystem::addFiles(const QList<QUrl> &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<QUrl> &fileUrls, KIO::CopyJob::CopyMode mode = KIO::CopyJob::Copy,
-                  QString dir = "") Q_DECL_OVERRIDE;
+                  const QString &dir = "") 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.
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic