[SCM] ktp-filetransfer-handler packaging branch, master, updated. debian/15.12.1-2-226-g825cd93
Maximiliano Curia
maxy at moszumanska.debian.org
Sat May 28 00:12:00 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-filetransfer-handler.git;a=commitdiff;h=1a24899
The following commit has been merged in the master branch:
commit 1a24899fc6fb11080bb8e67696bd01603d826e99
Author: Daniele E. Domenichelli <daniele.domenichelli at gmail.com>
Date: Sun Dec 18 01:38:11 2011 +0100
Make rename dialog modeless and show a dialog to resume file transfer
---
src/handle-incoming-file-transfer-channel-job.cpp | 210 ++++++++++++++++------
src/handle-incoming-file-transfer-channel-job.h | 2 +
src/handle-outgoing-file-transfer-channel-job.cpp | 13 +-
3 files changed, 166 insertions(+), 59 deletions(-)
diff --git a/src/handle-incoming-file-transfer-channel-job.cpp b/src/handle-incoming-file-transfer-channel-job.cpp
index 1de3b6e..2fef344 100644
--- a/src/handle-incoming-file-transfer-channel-job.cpp
+++ b/src/handle-incoming-file-transfer-channel-job.cpp
@@ -46,15 +46,20 @@ class HandleIncomingFileTransferChannelJobPrivate : public KTp::TelepathyBaseJob
Tp::IncomingFileTransferChannelPtr channel;
QString downloadDirectory;
+ QFile* file;
KUrl url, partUrl;
qulonglong offset;
- QFile* file;
+ QWeakPointer<KIO::RenameDialog> renameDialog;
void init();
+ void checkPartFile();
+ void receiveFile();
void __k__start();
bool __k__kill();
+ void __k__onRenameDialogFinished(int result);
+ void __k__onResumeDialogFinished(int result);
void __k__onSetUriOperationFinished(Tp::PendingOperation* op);
void __k__onInitialOffsetDefined(qulonglong offset);
void __k__onFileTransferChannelStateChanged(Tp::FileTransferState state, Tp::FileTransferStateChangeReason reason);
@@ -100,7 +105,8 @@ bool HandleIncomingFileTransferChannelJob::doKill()
}
HandleIncomingFileTransferChannelJobPrivate::HandleIncomingFileTransferChannelJobPrivate()
- : file(0)
+ : file(0),
+ offset(0)
{
kDebug();
}
@@ -164,8 +170,6 @@ void HandleIncomingFileTransferChannelJobPrivate::__k__start()
return;
}
- offset = 0;
-
url = downloadDirectory;
url.addPath(channel->fileName());
url.setScheme(QLatin1String("file"));
@@ -181,64 +185,156 @@ void HandleIncomingFileTransferChannelJobPrivate::__k__start()
QFileInfo fileInfo(url.toLocalFile()); // TODO check if it is a dir?
if (fileInfo.exists()) {
- QWeakPointer<KIO::RenameDialog> renameDialog = new KIO::RenameDialog(0,
- i18n("Incoming file exists"),
- KUrl(), //TODO
- url,
- KIO::M_OVERWRITE,
- fileInfo.size(),
- channel->size(),
- fileInfo.created().toTime_t(),
- time_t(-1),
- fileInfo.lastModified().toTime_t(),
- channel->lastModificationTime().toTime_t());
-
- renameDialog.data()->exec();
-
- if (!renameDialog)
- {
- kWarning() << "Rename dialog was deleted during event loop.";
+ renameDialog = new KIO::RenameDialog(0,
+ i18n("Incoming file exists"),
+ KUrl(), //TODO
+ url,
+ KIO::M_OVERWRITE,
+ fileInfo.size(),
+ channel->size(),
+ fileInfo.created().toTime_t(),
+ time_t(-1),
+ fileInfo.lastModified().toTime_t(),
+ channel->lastModificationTime().toTime_t());
+ renameDialog.data()->setFixedSize(500, 420);
+
+ q->connect(q, SIGNAL(cancelled()),
+ renameDialog.data(), SLOT(reject()));
+
+ q->connect(renameDialog.data(),
+ SIGNAL(finished(int)),
+ SLOT(__k__onRenameDialogFinished(int)));
+
+ renameDialog.data()->show();
+ return;
+ }
+ checkPartFile();
+}
+
+void HandleIncomingFileTransferChannelJobPrivate::__k__onRenameDialogFinished(int result)
+{
+ kDebug();
+ Q_Q(HandleIncomingFileTransferChannelJob);
+
+ if (!renameDialog)
+ {
+ kWarning() << "Rename dialog was deleted during event loop.";
+ QTimer::singleShot(0, q, SLOT(__k__doEmitResult()));
+ return;
+ }
+
+ Q_ASSERT(renameDialog.data()->result() == result);
+
+ switch (result)
+ {
+ case KIO::R_CANCEL:
+ // TODO Cancel file transfer and close channel
+ channel->cancel();
QTimer::singleShot(0, q, SLOT(__k__doEmitResult()));
return;
- }
+ case KIO::R_RENAME:
+ url = renameDialog.data()->newDestUrl();
+ // url is changed, we update it here
+ Q_EMIT q->description(q, i18n("Incoming file transfer"),
+ qMakePair<QString, QString>(i18n("From"), channel->targetContact()->alias()),
+ qMakePair<QString, QString>(i18n("Filename"), url.toLocalFile()));
+ break;
+ case KIO::R_OVERWRITE:
+ break;
+ default:
+ kWarning() << "Unknown Error";
+ q->setError(KTp::KTelepathyError);
+ q->setErrorText(i18n("Unknown Error"));
+ renameDialog.data()->deleteLater();
+ QTimer::singleShot(0, q, SLOT(__k__doEmitResult()));
+ return;
+ }
+ renameDialog.data()->deleteLater();
+ renameDialog.clear();
+ checkPartFile();
+}
+
+void HandleIncomingFileTransferChannelJobPrivate::checkPartFile()
+{
+ kDebug();
+ Q_Q(HandleIncomingFileTransferChannelJob);
- switch (renameDialog.data()->result())
+ QFileInfo fileInfo(partUrl.toLocalFile());
+ if (fileInfo.exists()) {
+ renameDialog = new KIO::RenameDialog(0,
+ i18n("Would you like to resume partial download?"),
+ KUrl(), //TODO
+ partUrl,
+ KIO::RenameDialog_Mode(KIO::M_RESUME),
+ fileInfo.size(),
+ channel->size(),
+ fileInfo.created().toTime_t(),
+ time_t(-1),
+ fileInfo.lastModified().toTime_t(),
+ channel->lastModificationTime().toTime_t());
+ renameDialog.data()->setFixedSize(500, 420);
+
+ q->connect(q, SIGNAL(cancelled()),
+ renameDialog.data(), SLOT(reject()));
+
+ q->connect(renameDialog.data(),
+ SIGNAL(finished(int)),
+ SLOT(__k__onResumeDialogFinished(int)));
+
+ renameDialog.data()->show();
+ return;
+ }
+ receiveFile();
+}
+
+
+void HandleIncomingFileTransferChannelJobPrivate::__k__onResumeDialogFinished(int result)
+{
+ kDebug();
+ Q_Q(HandleIncomingFileTransferChannelJob);
+
+ if (!renameDialog)
+ {
+ kWarning() << "Rename dialog was deleted during event loop.";
+ QTimer::singleShot(0, q, SLOT(__k__doEmitResult()));
+ return;
+ }
+
+ Q_ASSERT(renameDialog.data()->result() == result);
+
+ switch (result)
+ {
+ case KIO::R_CANCEL:
+ // TODO Cancel file transfer and close channel
+ channel->cancel();
+ QTimer::singleShot(0, q, SLOT(__k__doEmitResult()));
+ return;
+ case KIO::R_RENAME:
+ partUrl = renameDialog.data()->newDestUrl();
+ break;
+ case KIO::R_RESUME:
{
- case KIO::R_CANCEL:
- // TODO Cancel file transfer and close channel
- channel->cancel();
- QTimer::singleShot(0, q, SLOT(__k__doEmitResult()));
- return;
- case KIO::R_RENAME:
- url = renameDialog.data()->newDestUrl();
- // url is changed, we update it here
- Q_EMIT q->description(q, i18n("Incoming file transfer"),
- qMakePair<QString, QString>(i18n("From"), channel->targetContact()->alias()),
- qMakePair<QString, QString>(i18n("Filename"), url.toLocalFile()));
- break;
- case KIO::R_OVERWRITE:
- break;
- default:
- kWarning() << "Unknown Error";
- q->setError(KTp::KTelepathyError);
- q->setErrorText(i18n("Unknown Error"));
- renameDialog.data()->deleteLater();
- QTimer::singleShot(0, q, SLOT(__k__doEmitResult()));
- return;
QFileInfo fileInfo(partUrl.toLocalFile());
offset = fileInfo.size();
break;
}
- renameDialog.data()->deleteLater();
+ case KIO::R_OVERWRITE:
+ default:
+ break;
+
}
- offset = 0;
+ receiveFile();
+}
+
+void HandleIncomingFileTransferChannelJobPrivate::receiveFile()
+{
+ kDebug();
+ Q_Q(HandleIncomingFileTransferChannelJob);
// Open the .part file in append mode
file = new QFile(partUrl.toLocalFile(), q->parent());
- file->open(QIODevice::WriteOnly);
- //TODO ask to resume partial file
- //file->open(QIODevice::Append);
+ file->open(QIODevice::Append);
// Create an empty file with the definitive file name
QFile realFile(url.toLocalFile(), 0);
@@ -255,10 +351,15 @@ bool HandleIncomingFileTransferChannelJobPrivate::__k__kill()
kDebug();
Q_Q(HandleIncomingFileTransferChannelJob);
- Tp::PendingOperation *cancelOperation = channel->cancel();
- q->connect(cancelOperation,
- SIGNAL(finished(Tp::PendingOperation*)),
- SLOT(__k__onCancelOperationFinished(Tp::PendingOperation*)));
+ if (channel->state() != Tp::FileTransferStateCancelled) {
+ Tp::PendingOperation *cancelOperation = channel->cancel();
+ q->connect(cancelOperation,
+ SIGNAL(finished(Tp::PendingOperation*)),
+ SLOT(__k__onCancelOperationFinished(Tp::PendingOperation*)));
+ } else {
+ QTimer::singleShot(0, q, SLOT(__k__doEmitResult()));
+ }
+
return true;
}
@@ -284,8 +385,7 @@ void HandleIncomingFileTransferChannelJobPrivate::__k__onInitialOffsetDefined(qu
kDebug();
Q_Q(HandleIncomingFileTransferChannelJob);
- for (int i=0; i<30; i++)
- kDebug() << "__k__onInitialOffsetDefined" << offset;
+ kDebug() << "__k__onInitialOffsetDefined" << offset;
this->offset = offset;
// Some protocols do not support resuming file transfers, therefore we need
// To connect to this method to set the real
diff --git a/src/handle-incoming-file-transfer-channel-job.h b/src/handle-incoming-file-transfer-channel-job.h
index f6c7701..cc4334e 100644
--- a/src/handle-incoming-file-transfer-channel-job.h
+++ b/src/handle-incoming-file-transfer-channel-job.h
@@ -40,6 +40,8 @@ class HandleIncomingFileTransferChannelJob : public KTp::TelepathyBaseJob
Q_PRIVATE_SLOT(d_func(), void __k__start())
Q_PRIVATE_SLOT(d_func(), void __k__kill())
+ Q_PRIVATE_SLOT(d_func(), void __k__onRenameDialogFinished(int result))
+ Q_PRIVATE_SLOT(d_func(), void __k__onResumeDialogFinished(int result))
Q_PRIVATE_SLOT(d_func(), void __k__onSetUriOperationFinished(Tp::PendingOperation* op))
Q_PRIVATE_SLOT(d_func(), void __k__onInitialOffsetDefined(qulonglong offset))
Q_PRIVATE_SLOT(d_func(), void __k__onFileTransferChannelStateChanged(Tp::FileTransferState state, Tp::FileTransferStateChangeReason reason))
diff --git a/src/handle-outgoing-file-transfer-channel-job.cpp b/src/handle-outgoing-file-transfer-channel-job.cpp
index 162e4ac..b8f1e9d 100644
--- a/src/handle-outgoing-file-transfer-channel-job.cpp
+++ b/src/handle-outgoing-file-transfer-channel-job.cpp
@@ -192,10 +192,15 @@ bool HandleOutgoingFileTransferChannelJobPrivate::__k__kill()
kDebug();
Q_Q(HandleOutgoingFileTransferChannelJob);
- Tp::PendingOperation *cancelOperation = channel->cancel();
- q->connect(cancelOperation,
- SIGNAL(finished(Tp::PendingOperation*)),
- SLOT(__k__onCancelOperationFinished(Tp::PendingOperation*)));
+ if (channel->state() != Tp::FileTransferStateCancelled) {
+ Tp::PendingOperation *cancelOperation = channel->cancel();
+ q->connect(cancelOperation,
+ SIGNAL(finished(Tp::PendingOperation*)),
+ SLOT(__k__onCancelOperationFinished(Tp::PendingOperation*)));
+ } else {
+ QTimer::singleShot(0, q, SLOT(__k__doEmitResult()));
+ }
+
return true;
}
--
ktp-filetransfer-handler packaging
More information about the pkg-kde-commits
mailing list