diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-07-19 12:44:24 +0000 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2010-07-19 12:44:24 +0000 |
| commit | 368037c7a1d077da4cb828e7cf5671d92e4eda02 (patch) | |
| tree | b767f813feb9817f97efd514a2aba76cafd1d433 /example/example_3_ibbTransferSource/ibbClient.cpp | |
| parent | 046f9b04abdf3e2315744a7e548c6c860eecd07e (diff) | |
| download | qxmpp-368037c7a1d077da4cb828e7cf5671d92e4eda02.tar.gz | |
merge ibbTransferTarget code
Diffstat (limited to 'example/example_3_ibbTransferSource/ibbClient.cpp')
| -rw-r--r-- | example/example_3_ibbTransferSource/ibbClient.cpp | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/example/example_3_ibbTransferSource/ibbClient.cpp b/example/example_3_ibbTransferSource/ibbClient.cpp index 3db6973a..cfd78a42 100644 --- a/example/example_3_ibbTransferSource/ibbClient.cpp +++ b/example/example_3_ibbTransferSource/ibbClient.cpp @@ -22,7 +22,7 @@ * */ - +#include <QBuffer> #include <QDebug> #include "QXmppMessage.h" @@ -33,16 +33,36 @@ ibbClient::ibbClient(QObject *parent) : QXmppClient(parent) { - bool check = connect( this, SIGNAL(connected()), - this, SLOT(slotConnected()) ); + bool check = connect(this, SIGNAL(connected()), + this, SLOT(slotConnected()) ); + Q_ASSERT(check); + + check = connect(&transferManager(), SIGNAL(fileReceived(QXmppTransferJob*)), + this, SLOT(slotFileReceived(QXmppTransferJob*))); Q_ASSERT(check); - Q_UNUSED(check); +} + +/// Request that the given file be sent to the recipient once he/she is online. +/// +/// \param recipient +/// \param file + +void ibbClient::sendOnceAvailable(const QString &recipient, const QString &file) +{ + m_sendRecipient = recipient; + m_sendFile = file; } void ibbClient::slotConnected() { + const QLatin1String recipient("client@geiseri.com/QXmpp"); + + // if we are the recipient, do nothing + if (getConfiguration().jid() == recipient) + return; + transferManager().setSupportedMethods(QXmppTransferJob::InBandMethod); - QXmppTransferJob *job = transferManager().sendFile( "client@geiseri.com/QXmpp", "ibbClient.cpp" ); + QXmppTransferJob *job = transferManager().sendFile(recipient, "ibbClient.cpp"); bool check = connect( job, SIGNAL(error(QXmppTransferJob::Error)), this, SLOT(slotError(QXmppTransferJob::Error)) ); @@ -57,16 +77,43 @@ void ibbClient::slotConnected() Q_ASSERT(check); } +/// A file transfer failed. + void ibbClient::slotError(QXmppTransferJob::Error error) { qDebug() << "Transmission failed:" << error; } +/// A file transfer request was received. + +void ibbClient::slotFileReceived(QXmppTransferJob *job) +{ + qDebug() << "Got transfer request from:" << job->jid(); + + bool check = connect(job, SIGNAL(error(QXmppTransferJob::Error)), this, SLOT(slotError(QXmppTransferJob::Error))); + Q_ASSERT(check); + + check = connect(job, SIGNAL(finished()), this, SLOT(slotFinished())); + Q_ASSERT(check); + + check = connect(job, SIGNAL(progress(qint64,qint64)), this, SLOT(slotProgress(qint64,qint64))); + Q_ASSERT(check); + + // allocate a buffer to receive the file + QBuffer *buffer = new QBuffer(this); + buffer->open(QIODevice::WriteOnly); + job->accept(buffer); +} + +/// A file transfer finished. + void ibbClient::slotFinished() { qDebug() << "Transmission finished"; } +/// A file transfer has made progress. + void ibbClient::slotProgress(qint64 done, qint64 total) { qDebug() << "Transmission progress:" << done << "/" << total; |
