summaryrefslogtreecommitdiff
blob: 1cf2a1bfb83410a9f07a0b69c6cb4bf2ce80f14e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
From c76c1486ec79e8a16329207e9b293eed1244adfb Mon Sep 17 00:00:00 2001
From: Jonathan Marten <jjm@keelhaul.me.uk>
Date: Mon, 25 Sep 2017 08:56:04 +0100
Subject: kioexec: Watch the file when it has finished copying

To eliminate a spurious "The file has changed, do you want to upload
it?" dialogue.

BUG:384500

Differential Revision: https://phabricator.kde.org/D7841
---
 src/kioexec/main.cpp | 49 +++++++++++++++++++++++++++----------------------
 1 file changed, 27 insertions(+), 22 deletions(-)

diff --git a/src/kioexec/main.cpp b/src/kioexec/main.cpp
index 6b0ec1d..615dfbf 100644
--- a/src/kioexec/main.cpp
+++ b/src/kioexec/main.cpp
@@ -118,11 +118,6 @@ KIOExec::KIOExec(const QStringList &args, bool tempFiles, const QString &suggest
                 KIO::Job *job = KIO::file_copy(url, dest);
                 jobList.append(job);
 
-                // Tell kioexecd to watch the file for changes.
-                OrgKdeKIOExecdInterface kioexecd(QStringLiteral("org.kde.kioexecd"), QStringLiteral("/modules/kioexecd"), QDBusConnection::sessionBus());
-                kioexecd.watch(file.path, file.url.toString());
-                mUseDaemon = !kioexecd.lastError().isValid();
-
                 connect(job, &KJob::result, this, &KIOExec::slotResult);
             }
         }
@@ -141,25 +136,35 @@ KIOExec::KIOExec(const QStringList &args, bool tempFiles, const QString &suggest
 
 void KIOExec::slotResult(KJob *job)
 {
-    if (job && job->error()) {
-        // That error dialog would be queued, i.e. not immediate...
-        //job->showErrorDialog();
-        if ((job->error() != KIO::ERR_USER_CANCELED))
-            KMessageBox::error(nullptr, job->errorString());
-
-        QString path = static_cast<KIO::FileCopyJob*>(job)->destUrl().path();
-
-        QList<FileInfo>::Iterator it = fileList.begin();
-        for (; it != fileList.end(); ++it) {
-            if (it->path == path) {
-                break;
+    if (job) {
+        KIO::FileCopyJob *copyJob = static_cast<KIO::FileCopyJob *>(job);
+        const QString path = copyJob->destUrl().path();
+
+        if (job->error()) {
+            // That error dialog would be queued, i.e. not immediate...
+            //job->showErrorDialog();
+            if ((job->error() != KIO::ERR_USER_CANCELED))
+                KMessageBox::error(nullptr, job->errorString());
+
+            auto it = std::find_if(fileList.begin(), fileList.end(),
+                                   [&path](const FileInfo &i) { return (i.path == path); });
+            if (it != fileList.end()) {
+                fileList.erase(it);
+            } else {
+                qDebug() <<  path << " not found in list";
             }
         }
-
-        if (it != fileList.end()) {
-            fileList.erase(it);
-        } else {
-            qDebug() <<  path << " not found in list";
+        else
+        {
+            // Tell kioexecd to watch the file for changes.
+            const QString dest = copyJob->srcUrl().toString();
+            qDebug() << "Telling kioexecd to watch path" << path << "dest" << dest;
+            OrgKdeKIOExecdInterface kioexecd(QStringLiteral("org.kde.kioexecd"), QStringLiteral("/modules/kioexecd"), QDBusConnection::sessionBus());
+            kioexecd.watch(path, dest);
+            mUseDaemon = !kioexecd.lastError().isValid();
+            if (!mUseDaemon) {
+                qDebug() << "Not using kioexecd";
+            }
         }
     }
 
-- 
cgit v0.11.2