[SCM] kdeconnect packaging branch, master, updated. debian/0.9g-1-1183-g9d69498
Maximiliano Curia
maxy at moszumanska.debian.org
Fri Oct 14 14:27:29 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/kde-extras/kdeconnect.git;a=commitdiff;h=a75bfe5
The following commit has been merged in the master branch:
commit a75bfe5f0d8b54409cf04a1a5b2603c813bcee72
Author: Àlex Fiestas <afiestas at kde.org>
Date: Mon Mar 3 22:33:22 2014 +0100
Use KIO::RenameDialgo if the file exists
If we are receiving a file that we already have on the
system, use KIO::RenameDialog instead of just overwriting
the destination file.
---
kded/filetransferjob.cpp | 90 ++++++++++++++++++++++++++++++++++++++++++------
kded/filetransferjob.h | 9 +++--
kded/kdeconnectd.cpp | 1 +
3 files changed, 87 insertions(+), 13 deletions(-)
diff --git a/kded/filetransferjob.cpp b/kded/filetransferjob.cpp
index 4cb2bd1..7eb702a 100644
--- a/kded/filetransferjob.cpp
+++ b/kded/filetransferjob.cpp
@@ -21,7 +21,9 @@
#include "filetransferjob.h"
#include <qalgorithms.h>
+#include <QFileInfo>
+#include <KIO/RenameDialog>
#include <KLocalizedString>
#include "kdebugnamespace.h"
@@ -30,16 +32,13 @@ FileTransferJob::FileTransferJob(const QSharedPointer<QIODevice>& origin, int si
{
Q_ASSERT(destination.isLocalFile());
//TODO: Make a precondition before calling this function that destination file exists
- QFile(destination.path()).open(QIODevice::WriteOnly | QIODevice::Truncate); //HACK: KIO is so dumb it can't create the file if it doesn't exist
- mDestination = KIO::open(destination, QIODevice::WriteOnly);
- connect(mDestination, SIGNAL(open(KIO::Job*)), this, SLOT(open(KIO::Job*)));
- connect(mDestination, SIGNAL(result(KJob*)), this, SLOT(openFinished(KJob*)));
mOrigin = origin;
mSize = size;
mWritten = 0;
m_speedBytes = 0;
+ mDestination = destination;
+ mDestinationJob = 0;
mDeviceName = i18nc("Device name that will appear on the jobs", "KDE-Connect");
- qDebug() << "SIZE: " << mSize;
kDebug(kdeconnect_kded()) << "FileTransferJob Downloading payload to" << destination;
}
@@ -50,16 +49,85 @@ void FileTransferJob::openFinished(KJob* job)
void FileTransferJob::start()
{
+ QMetaObject::invokeMethod(this, "doStart", Qt::QueuedConnection);
//kDebug(kdeconnect_kded()) << "FileTransferJob start";
+}
+
+void FileTransferJob::doStart()
+{
+ description(this, i18n("Receiving file over KDE-Connect"),
+ QPair<QString, QString>(i18nc("File transfer origin", "From"),
+ QString(mDeviceName))
+ );
+ KUrl destCheck = mDestination;
+ if (QFile::exists(destCheck.path())) {
+ QFileInfo destInfo(destCheck.path());
+ KIO::RenameDialog *dialog = new KIO::RenameDialog(0,
+ i18n("Incoming file exists"),
+ KUrl(mDeviceName + ":/" + destCheck.fileName()),
+ destCheck,
+ KIO::M_OVERWRITE,
+ mSize,
+ destInfo.size(),
+ -1,
+ destInfo.created().toTime_t(),
+ -1,
+ destInfo.lastModified().toTime_t()
+ );
+ connect(this, SIGNAL(finished(KJob*)), dialog, SLOT(deleteLater()));
+ connect(dialog, SIGNAL(finished(int)), SLOT(renameDone(int)));
+ dialog->show();
+ return;
+ }
+
+ startTransfer();
+}
+
+void FileTransferJob::renameDone(int result)
+{
+ KIO::RenameDialog *renameDialog = qobject_cast<KIO::RenameDialog*>(sender());
+ switch (result) {
+ case KIO::R_CANCEL:
+ //The user cancelled, killing the job
+ emitResult();
+ case KIO::R_RENAME:
+ mDestination = renameDialog->newDestUrl();
+ break;
+ case KIO::R_OVERWRITE:
+ {
+ // Delete the old file if exists
+ QFile oldFile(mDestination.path());
+ if (oldFile.exists()) {
+ oldFile.remove();
+ }
+ break;
+ }
+ default:
+ kWarning() << "Unknown Error";
+ emitResult();
+ }
+
+ renameDialog->deleteLater();
+ startTransfer();
+}
+
+void FileTransferJob::startTransfer()
+{
setTotalAmount(Bytes, mSize);
setProcessedAmount(Bytes, 0);
m_time = QTime::currentTime();
description(this, i18n("Receiving file over KDE-Connect"),
QPair<QString, QString>(i18nc("File transfer origin", "From"),
QString(mDeviceName)),
- QPair<QString, QString>(i18nc("File transfer destination", "To"), mDestination->url().path()));
+ QPair<QString, QString>(i18nc("File transfer destination", "To"), mDestination.path()));
+
+ QFile(mDestination.path()).open(QIODevice::WriteOnly | QIODevice::Truncate); //HACK: KIO is so dumb it can't create the file if it doesn't exist
+ mDestinationJob = KIO::open(mDestination, QIODevice::WriteOnly);
+ connect(mDestinationJob, SIGNAL(open(KIO::Job*)), this, SLOT(open(KIO::Job*)));
+ connect(mDestinationJob, SIGNAL(result(KJob*)), this, SLOT(openFinished(KJob*)));
+
//Open destination file
- mDestination->start();
+ mDestinationJob->start();
}
void FileTransferJob::open(KIO::Job* job)
@@ -87,7 +155,7 @@ void FileTransferJob::readyRead()
{
int bytes = qMin(qint64(4096), mOrigin->bytesAvailable());
QByteArray data = mOrigin->read(bytes);
- mDestination->write(data);
+ mDestinationJob->write(data);
mWritten += data.size();
setProcessedAmount(Bytes, mWritten);
@@ -126,10 +194,10 @@ void FileTransferJob::sourceFinished()
setError(1);
setErrorText(i18n("Received incomplete file"));
} else {
- kDebug(kdeconnect_kded()) << "Finished transfer" << mDestination->url();
+ kDebug(kdeconnect_kded()) << "Finished transfer" << mDestinationJob->url();
}
- mDestination->close();
- mDestination->deleteLater();
+ mDestinationJob->close();
+ mDestinationJob->deleteLater();
emitResult();
}
diff --git a/kded/filetransferjob.h b/kded/filetransferjob.h
index 3c3db49..b710422 100644
--- a/kded/filetransferjob.h
+++ b/kded/filetransferjob.h
@@ -39,18 +39,23 @@ class FileTransferJob
public:
FileTransferJob(const QSharedPointer<QIODevice>& origin, int size, const KUrl& destination);
virtual void start();
- KUrl destination() const { return mDestination->url(); }
+ KUrl destination() const { return mDestination; }
void setDeviceName(const QString &deviceName) {mDeviceName = deviceName;};
+
public Q_SLOTS:
+ void doStart();
+ void renameDone(int result);
void readyRead();
void open(KIO::Job*);
void sourceFinished();
void openFinished(KJob*);
private:
+ void startTransfer();
QSharedPointer<QIODevice> mOrigin;
- KIO::FileJob* mDestination;
+ KIO::FileJob* mDestinationJob;
QString mDeviceName;
+ KUrl mDestination;
QTime m_time;
qulonglong m_speedBytes;
int mSize;
diff --git a/kded/kdeconnectd.cpp b/kded/kdeconnectd.cpp
index 77788cb..365b9ca 100644
--- a/kded/kdeconnectd.cpp
+++ b/kded/kdeconnectd.cpp
@@ -72,6 +72,7 @@ int main(int argc, char* argv[])
KApplication app(true); // WARNING GUI required for QClipboard access
app.disableSessionManagement();
+ app.setQuitOnLastWindowClosed(false);
//Force daemon to destroy when KApplications in alive
--
kdeconnect packaging
More information about the pkg-kde-commits
mailing list