kde-frameworks/kio: Fix huge 'file has changed' annoyance

Package-Manager: Portage-2.3.10, Repoman-2.3.3
This commit is contained in:
Andreas Sturmlechner
2017-09-25 11:45:37 +02:00
parent 21558fbd3a
commit abf5278fd0
2 changed files with 167 additions and 0 deletions

View File

@@ -0,0 +1,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

View File

@@ -0,0 +1,80 @@
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
EAPI=6
KDE_TEST="forceoptional"
VIRTUALX_REQUIRED="test"
inherit kde5
DESCRIPTION="Framework providing transparent file and data management"
LICENSE="LGPL-2+"
KEYWORDS="~amd64 ~arm ~arm64 ~x86"
IUSE="acl +handbook kerberos +kwallet X"
RDEPEND="
$(add_frameworks_dep karchive)
$(add_frameworks_dep kbookmarks)
$(add_frameworks_dep kcodecs)
$(add_frameworks_dep kcompletion)
$(add_frameworks_dep kconfig)
$(add_frameworks_dep kconfigwidgets)
$(add_frameworks_dep kcoreaddons)
$(add_frameworks_dep kdbusaddons)
$(add_frameworks_dep ki18n)
$(add_frameworks_dep kiconthemes)
$(add_frameworks_dep kitemviews)
$(add_frameworks_dep kjobwidgets)
$(add_frameworks_dep knotifications)
$(add_frameworks_dep kservice)
$(add_frameworks_dep ktextwidgets)
$(add_frameworks_dep kwidgetsaddons)
$(add_frameworks_dep kwindowsystem)
$(add_frameworks_dep kxmlgui)
$(add_frameworks_dep solid)
$(add_qt_dep qtdbus)
$(add_qt_dep qtgui)
$(add_qt_dep qtnetwork 'ssl')
$(add_qt_dep qtscript)
$(add_qt_dep qtwidgets)
$(add_qt_dep qtxml)
dev-libs/libxml2
dev-libs/libxslt
acl? (
sys-apps/attr
virtual/acl
)
kerberos? ( virtual/krb5 )
kwallet? ( $(add_frameworks_dep kwallet) )
X? ( $(add_qt_dep qtx11extras) )
"
DEPEND="${RDEPEND}
$(add_qt_dep qtconcurrent)
handbook? ( $(add_frameworks_dep kdoctools) )
test? ( sys-libs/zlib )
X? (
x11-libs/libX11
x11-libs/libXrender
x11-proto/xproto
)
"
PDEPEND="
$(add_frameworks_dep kded)
"
# tests hang
RESTRICT+=" test"
PATCHES=( "${FILESDIR}/${P}-kioexec.patch" )
src_configure() {
local mycmakeargs=(
$(cmake-utils_use_find_package acl ACL)
$(cmake-utils_use_find_package handbook KF5DocTools)
$(cmake-utils_use_find_package kerberos GSSAPI)
$(cmake-utils_use_find_package kwallet KF5Wallet)
$(cmake-utils_use_find_package X X11)
)
kde5_src_configure
}