aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2011-05-13 07:30:07 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2011-05-13 07:30:07 +0000
commit612a93867681c48ec9fc28c77dd8926b4e70baef (patch)
treefee5c2479d1224600d06193db778633c10951ee8 /src
parent89b85eda7570337e2e9611a547e28f21bba0d48a (diff)
downloadqxmpp-612a93867681c48ec9fc28c77dd8926b4e70baef.tar.gz
add some properties to QXmppTransferJob to make it easier to script
Diffstat (limited to 'src')
-rw-r--r--src/QXmppTransferManager.cpp57
-rw-r--r--src/QXmppTransferManager.h27
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;