Skip to content

Commit

Permalink
kde-frameworks/kio: Fix huge 'file has changed' annoyance
Browse files Browse the repository at this point in the history
Package-Manager: Portage-2.3.10, Repoman-2.3.3
  • Loading branch information
a17r committed Sep 30, 2017
1 parent 21558fb commit abf5278
Show file tree
Hide file tree
Showing 2 changed files with 167 additions and 0 deletions.
87 changes: 87 additions & 0 deletions kde-frameworks/kio/files/kio-5.38.0-kioexec.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
From c76c1486ec79e8a16329207e9b293eed1244adfb Mon Sep 17 00:00:00 2001
From: Jonathan Marten <[email protected]>
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

80 changes: 80 additions & 0 deletions kde-frameworks/kio/kio-5.38.0-r1.ebuild
Original file line number Diff line number Diff line change
@@ -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
}

0 comments on commit abf5278

Please sign in to comment.