[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