diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-05-13 07:30:07 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2011-05-13 07:30:07 +0000 |
| commit | 612a93867681c48ec9fc28c77dd8926b4e70baef (patch) | |
| tree | fee5c2479d1224600d06193db778633c10951ee8 /src | |
| parent | 89b85eda7570337e2e9611a547e28f21bba0d48a (diff) | |
| download | qxmpp-612a93867681c48ec9fc28c77dd8926b4e70baef.tar.gz | |
add some properties to QXmppTransferJob to make it easier to script
Diffstat (limited to 'src')
| -rw-r--r-- | src/QXmppTransferManager.cpp | 57 | ||||
| -rw-r--r-- | src/QXmppTransferManager.h | 27 |
2 files changed, 74 insertions, 10 deletions
diff --git a/src/QXmppTransferManager.cpp b/src/QXmppTransferManager.cpp index cf5a5492..ca0bbbbe 100644 --- a/src/QXmppTransferManager.cpp +++ b/src/QXmppTransferManager.cpp @@ -30,6 +30,7 @@ #include <QNetworkInterface> #include <QTime> #include <QTimer> +#include <QUrl> #include "QXmppByteStreamIq.h" #include "QXmppClient.h" @@ -116,6 +117,7 @@ public: QIODevice *iodevice; QString offerId; QString jid; + QUrl localFileUrl; QString sid; QXmppTransferJob::Method method; QString mimeType; @@ -151,7 +153,7 @@ QXmppTransferJobPrivate::QXmppTransferJobPrivate() } QXmppTransferJob::QXmppTransferJob(const QString &jid, QXmppTransferJob::Direction direction, QObject *parent) - : QObject(parent), + : QXmppLoggable(parent), d(new QXmppTransferJobPrivate) { d->direction = direction; @@ -174,6 +176,27 @@ void QXmppTransferJob::abort() /// Call this method if you wish to accept an incoming transfer job. /// +void QXmppTransferJob::accept(const QString &filePath) +{ + if (d->direction == IncomingDirection && d->state == OfferState && !d->iodevice) + { + QFile *file = new QFile(filePath, this); + if (!file->open(QIODevice::WriteOnly)) + { + warning(QString("Could not write to %1").arg(filePath)); + abort(); + return; + } + + d->iodevice = file; + setLocalFileUrl(QUrl::fromLocalFile(filePath)); + setState(QXmppTransferJob::StartState); + } +} + +/// Call this method if you wish to accept an incoming transfer job. +/// + void QXmppTransferJob::accept(QIODevice *iodevice) { if (d->direction == IncomingDirection && d->state == OfferState && !d->iodevice) @@ -235,6 +258,27 @@ QString QXmppTransferJob::jid() const return d->jid; } +/// Returns the local file URL. +/// + +QUrl QXmppTransferJob::localFileUrl() const +{ + return d->localFileUrl; +} + +/// Sets the local file URL. +/// +/// \note You do not need to call this method if you called accept() +/// with a file path. + +void QXmppTransferJob::setLocalFileUrl(const QUrl &localFileUrl) +{ + if (localFileUrl != d->localFileUrl) { + d->localFileUrl = localFileUrl; + emit localFileUrlChanged(localFileUrl); + } +} + /// Returns meta-data about the file being transferred. /// @@ -1016,9 +1060,9 @@ void QXmppTransferManager::jobStateChanged(QXmppTransferJob::State state) /// /// The remote party will be given the choice to accept or refuse the transfer. /// -QXmppTransferJob *QXmppTransferManager::sendFile(const QString &jid, const QString &fileName, const QString &sid) +QXmppTransferJob *QXmppTransferManager::sendFile(const QString &jid, const QString &filePath, const QString &sid) { - QFileInfo info(fileName); + QFileInfo info(filePath); QXmppTransferFileInfo fileInfo; fileInfo.setDate(info.lastModified()); @@ -1026,9 +1070,10 @@ QXmppTransferJob *QXmppTransferManager::sendFile(const QString &jid, const QStri fileInfo.setSize(info.size()); // open file - QIODevice *device = new QFile(fileName); + QIODevice *device = new QFile(filePath); if (!device->open(QIODevice::ReadOnly)) { + warning(QString("Could not read from %1").arg(filePath)); delete device; device = 0; } @@ -1048,7 +1093,9 @@ QXmppTransferJob *QXmppTransferManager::sendFile(const QString &jid, const QStri } // create job - return sendFile(jid, device, fileInfo, sid); + QXmppTransferJob *job = sendFile(jid, device, fileInfo, sid); + job->setLocalFileUrl(filePath); + return job; } /// Send file to a remote party. diff --git a/src/QXmppTransferManager.h b/src/QXmppTransferManager.h index f5cf432f..45df48e9 100644 --- a/src/QXmppTransferManager.h +++ b/src/QXmppTransferManager.h @@ -25,6 +25,7 @@ #define QXMPPTRANSFERMANAGER_H #include <QDateTime> +#include <QUrl> #include <QVariant> #include "QXmppClientExtension.h" @@ -72,9 +73,18 @@ private: /// \sa QXmppTransferManager /// -class QXmppTransferJob : public QObject +class QXmppTransferJob : public QXmppLoggable { Q_OBJECT + Q_ENUMS(Direction Error Method State) + Q_PROPERTY(Direction direction READ direction CONSTANT) + Q_PROPERTY(QUrl localFileUrl READ localFileUrl WRITE setLocalFileUrl NOTIFY localFileUrlChanged) + Q_PROPERTY(QString jid READ jid CONSTANT) + Q_PROPERTY(Method method READ method CONSTANT) + Q_PROPERTY(State state READ state NOTIFY stateChanged) + + Q_PROPERTY(QString fileName READ fileName CONSTANT) + Q_PROPERTY(qint64 fileSize READ fileSize CONSTANT) public: /// This enum is used to describe the direction of a transfer job. @@ -115,9 +125,6 @@ public: ~QXmppTransferJob(); - void abort(); - void accept(QIODevice *output); - QVariant data(int role) const; void setData(int role, const QVariant &value); @@ -131,6 +138,8 @@ public: // XEP-0096 : File transfer QXmppTransferFileInfo fileInfo() const; + QUrl localFileUrl() const; + void setLocalFileUrl(const QUrl &localFileUrl); /// \cond QDateTime fileDate() const; @@ -153,12 +162,20 @@ signals: /// instead use deleteLater(). void finished(); + /// This signal is emitted when the local file URL changes. + void localFileUrlChanged(const QUrl &localFileUrl); + /// This signal is emitted to indicate the progress of this transfer job. void progress(qint64 done, qint64 total); /// This signal is emitted when the transfer job changes state. void stateChanged(QXmppTransferJob::State state); +public slots: + void abort(); + void accept(const QString &filePath); + void accept(QIODevice *output); + private slots: void disconnected(); void receiveData(); @@ -199,7 +216,7 @@ class QXmppTransferManager : public QXmppClientExtension public: QXmppTransferManager(); - QXmppTransferJob *sendFile(const QString &jid, const QString &fileName, const QString &sid = QString()); + QXmppTransferJob *sendFile(const QString &jid, const QString &filePath, const QString &sid = QString()); QXmppTransferJob *sendFile(const QString &jid, QIODevice *device, const QXmppTransferFileInfo &fileInfo, const QString &sid = QString()); QString proxy() const; |
