From ea917cfce56186ac7cddddd701cfb83f8127a751 Mon Sep 17 00:00:00 2001 From: Alex Blasche Date: Tue, 16 Sep 2014 14:04:02 +0200 Subject: Add missing error() signal to QBluetoothTransferReply The signal makes error handling much more conveniant. One error situation on QNX did not emit the required finished()/errorType() signals when required. A few minor typo fixes. Task-number: QTBUG-38983 Change-Id: I89c3fbee43921c8894a0ab200ee5550e7dc44543 Reviewed-by: Lars Knoll --- src/bluetooth/qbluetoothtransferreply.cpp | 17 ++++++++++++++++- src/bluetooth/qbluetoothtransferreply.h | 3 +++ src/bluetooth/qbluetoothtransferreply_bluez.cpp | 16 ++++++++++++++-- src/bluetooth/qbluetoothtransferreply_p.h | 4 ---- src/bluetooth/qbluetoothtransferreply_qnx.cpp | 7 +++++++ .../tst_qbluetoothtransfermanager.cpp | 8 +++++++- 6 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/bluetooth/qbluetoothtransferreply.cpp b/src/bluetooth/qbluetoothtransferreply.cpp index 6ade4808..44f2f6f8 100644 --- a/src/bluetooth/qbluetoothtransferreply.cpp +++ b/src/bluetooth/qbluetoothtransferreply.cpp @@ -89,13 +89,24 @@ void QBluetoothTransferReply::abort() number of bytes transferred so far out of \a bytesTotal. */ +/*! + \fn void QBluetoothTransferReply::error(QBluetoothTransferReply::TransferError errorType) + \since 5.4 + + This signal is emitted whenever an error has occurred. The \a errorType + parameter indicates the type of error. + + \sa error(), errorString() +*/ + /*! Constructs a new QBluetoothTransferReply with \a parent. */ QBluetoothTransferReply::QBluetoothTransferReply(QObject *parent) : QObject(parent), d_ptr(new QBluetoothTransferReplyPrivate()) { - qRegisterMetaType("QBluetoothTransferReply"); + qRegisterMetaType(); + qRegisterMetaType(); } /*! @@ -165,12 +176,16 @@ void QBluetoothTransferReply::setRequest(const QBluetoothTransferRequest &reques \fn TransferError QBluetoothTransferReply::error() const The error code of the error that occurred. + + \sa errorString() */ /*! \fn QString QBluetoothTransferReply::errorString() const String describing the error. Can be displayed to the user. + + \sa error() */ QBluetoothTransferReplyPrivate::QBluetoothTransferReplyPrivate() diff --git a/src/bluetooth/qbluetoothtransferreply.h b/src/bluetooth/qbluetoothtransferreply.h index a8fda6ce..37ca8fe5 100644 --- a/src/bluetooth/qbluetoothtransferreply.h +++ b/src/bluetooth/qbluetoothtransferreply.h @@ -79,6 +79,7 @@ Q_SIGNALS: //TODO Remove QBluetoothTransferReply* parameter in Qt 6 void finished(QBluetoothTransferReply *); void transferProgress(qint64 bytesTransferred, qint64 bytesTotal); + void error(QBluetoothTransferReply::TransferError lastError); protected: explicit QBluetoothTransferReply(QObject *parent = 0); @@ -95,4 +96,6 @@ private: QT_END_NAMESPACE +Q_DECLARE_METATYPE(QBluetoothTransferReply::TransferError) + #endif // QBLUETOOTHTRANSFERREPLY_H diff --git a/src/bluetooth/qbluetoothtransferreply_bluez.cpp b/src/bluetooth/qbluetoothtransferreply_bluez.cpp index be5fccd0..066cab7c 100644 --- a/src/bluetooth/qbluetoothtransferreply_bluez.cpp +++ b/src/bluetooth/qbluetoothtransferreply_bluez.cpp @@ -69,8 +69,6 @@ QBluetoothTransferReplyBluez::QBluetoothTransferReplyBluez(QIODevice *input, con setRequest(request); setManager(parent); - qRegisterMetaType("QBluetoothTransferReply*"); - if (isBluez5()) { m_clientBluez = new OrgBluezObexClient1Interface(QStringLiteral("org.bluez.obex"), QStringLiteral("/org/bluez/obex"), @@ -121,6 +119,8 @@ bool QBluetoothTransferReplyBluez::start() m_error = QBluetoothTransferReply::IODeviceNotReadableError; m_finished = true; m_running = false; + + emit QBluetoothTransferReply::error(m_error); QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection, Q_ARG(QBluetoothTransferReply*, this)); return false; } @@ -137,6 +137,8 @@ bool QBluetoothTransferReplyBluez::start() m_error = QBluetoothTransferReply::FileNotFoundError; m_finished = true; m_running = false; + + emit QBluetoothTransferReply::error(m_error); QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection, Q_ARG(QBluetoothTransferReply*, this)); return false; } @@ -145,6 +147,8 @@ bool QBluetoothTransferReplyBluez::start() m_error = QBluetoothTransferReply::HostNotFoundError; m_finished = true; m_running = false; + + emit QBluetoothTransferReply::error(m_error); QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection, Q_ARG(QBluetoothTransferReply*, this)); return false; } @@ -201,6 +205,8 @@ void QBluetoothTransferReplyBluez::sessionCreated(QDBusPendingCallWatcher *watch m_error = QBluetoothTransferReply::HostNotFoundError; m_finished = true; m_running = false; + + emit QBluetoothTransferReply::error(m_error); QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection, Q_ARG(QBluetoothTransferReply*, this)); @@ -232,6 +238,7 @@ void QBluetoothTransferReplyBluez::sessionStarted(QDBusPendingCallWatcher *watch cleanupSession(); + emit QBluetoothTransferReply::error(m_error); QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection, Q_ARG(QBluetoothTransferReply *, this)); @@ -276,6 +283,8 @@ void QBluetoothTransferReplyBluez::sessionChanged(const QString &interface, if (s == QStringLiteral("error")) { m_error = QBluetoothTransferReply::UnknownError; m_errorStr = tr("Unknown Error"); + + emit QBluetoothTransferReply::error(m_error); } else { // complete // allow progress bar to complete emit transferProgress(m_size, m_size); @@ -336,6 +345,7 @@ void QBluetoothTransferReplyBluez::sendReturned(QDBusPendingCallWatcher *watcher m_error = QBluetoothTransferReply::UnknownError; } + emit QBluetoothTransferReply::error(m_error); // allow time for the developer to connect to the signal QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection, Q_ARG(QBluetoothTransferReply*, this)); } @@ -376,6 +386,7 @@ void QBluetoothTransferReplyBluez::Error(const QDBusObjectPath &in0, const QStri m_error = QBluetoothTransferReply::UnknownError; } + emit QBluetoothTransferReply::error(m_error); emit finished(this); } @@ -444,6 +455,7 @@ void QBluetoothTransferReplyBluez::abort() cleanupSession(); + emit QBluetoothTransferReply::error(m_error); emit finished(this); } } diff --git a/src/bluetooth/qbluetoothtransferreply_p.h b/src/bluetooth/qbluetoothtransferreply_p.h index caf3890d..8c6c4968 100644 --- a/src/bluetooth/qbluetoothtransferreply_p.h +++ b/src/bluetooth/qbluetoothtransferreply_p.h @@ -55,12 +55,8 @@ public: QBluetoothTransferReplyPrivate(); QBluetoothTransferManager *m_manager; - qint64 m_buffersize; QBluetoothTransferRequest m_request; - - QBluetoothTransferReply *q_ptr; - }; QT_END_NAMESPACE diff --git a/src/bluetooth/qbluetoothtransferreply_qnx.cpp b/src/bluetooth/qbluetoothtransferreply_qnx.cpp index 072230b1..acd60894 100644 --- a/src/bluetooth/qbluetoothtransferreply_qnx.cpp +++ b/src/bluetooth/qbluetoothtransferreply_qnx.cpp @@ -106,6 +106,7 @@ bool QBluetoothTransferReplyQnx::start() m_error = QBluetoothTransferReply::ResourceBusyError; m_finished = true; m_running = false; + emit QBluetoothTransferReply::error(m_error); emit finished(this); return false; } @@ -115,6 +116,7 @@ bool QBluetoothTransferReplyQnx::start() m_error = QBluetoothTransferReply::IODeviceNotReadableError; m_finished = true; m_running = false; + emit QBluetoothTransferReply::error(m_error); emit finished(this); return false; } @@ -134,6 +136,7 @@ bool QBluetoothTransferReplyQnx::start() m_error = QBluetoothTransferReply::FileNotFoundError; m_finished = true; m_running = false; + emit QBluetoothTransferReply::error(m_error); QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection, Q_ARG(QBluetoothTransferReply*, this)); return false; } @@ -142,6 +145,7 @@ bool QBluetoothTransferReplyQnx::start() m_error = QBluetoothTransferReply::HostNotFoundError; m_finished = true; m_running = false; + emit QBluetoothTransferReply::error(m_error); QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection, Q_ARG(QBluetoothTransferReply*, this)); return false; } @@ -192,6 +196,8 @@ void QBluetoothTransferReplyQnx::controlReply(ppsResult result) if (!result.errorMsg.isEmpty()) { m_errorStr = result.errorMsg; m_error = QBluetoothTransferReply::UnknownError; + emit QBluetoothTransferReply::error(m_error); + emit finished(this); } } @@ -214,6 +220,7 @@ void QBluetoothTransferReplyQnx::controlEvent(ppsResult result) // } else { m_errorStr = result.errorMsg; m_error = QBluetoothTransferReply::UnknownError; + emit QBluetoothTransferReply::error(m_error); // } emit finished(this); } else if (result.msg == QStringLiteral("opp_update")) { diff --git a/tests/auto/qbluetoothtransfermanager/tst_qbluetoothtransfermanager.cpp b/tests/auto/qbluetoothtransfermanager/tst_qbluetoothtransfermanager.cpp index 89c70854..b2c55da5 100644 --- a/tests/auto/qbluetoothtransfermanager/tst_qbluetoothtransfermanager.cpp +++ b/tests/auto/qbluetoothtransfermanager/tst_qbluetoothtransfermanager.cpp @@ -235,6 +235,7 @@ void tst_QBluetoothTransferManager::tst_sendFile() QBluetoothTransferReply* reply = manager.put(request, &f); QSignalSpy finishedSpy(reply, SIGNAL(finished(QBluetoothTransferReply*))); QSignalSpy progressSpy(reply, SIGNAL(transferProgress(qint64,qint64))); + QSignalSpy errorSpy(reply, SIGNAL(error(QBluetoothTransferReply::TransferError))); QCOMPARE(reply->request(), request); QVERIFY(reply->manager() == &manager); @@ -253,6 +254,7 @@ void tst_QBluetoothTransferManager::tst_sendFile() QVERIFY(progressSpy.count()>0); QCOMPARE(reply->error(), QBluetoothTransferReply::NoError); QCOMPARE(reply->errorString(), QString()); + QVERIFY(errorSpy.isEmpty()); } else { QVERIFY(progressSpy.count() == 0); if (isInvalidFile) @@ -260,6 +262,7 @@ void tst_QBluetoothTransferManager::tst_sendFile() else QVERIFY(reply->error() != QBluetoothTransferReply::NoError); QVERIFY(!reply->errorString().isEmpty()); + QCOMPARE(errorSpy.count(), 1); } QVERIFY(reply->isFinished()); @@ -274,7 +277,7 @@ void tst_QBluetoothTransferManager::tst_sendBuffer_data() QTest::addColumn("data"); QTest::newRow("Push to remote test device") << remoteAddress << true << - QByteArray("This is a very long byte arry which we are going to access via a QBuffer"); ; + QByteArray("This is a very long byte array which we are going to access via a QBuffer"); ; QTest::newRow("Push to invalid address") << QBluetoothAddress() << false << QByteArray("test"); QTest::newRow("Push to non-existend device") << QBluetoothAddress("11:22:33:44:55:66") << false << QByteArray("test"); } @@ -310,6 +313,7 @@ void tst_QBluetoothTransferManager::tst_sendBuffer() QBluetoothTransferReply* reply = manager.put(request, &buffer); QSignalSpy finishedSpy(reply, SIGNAL(finished(QBluetoothTransferReply*))); QSignalSpy progressSpy(reply, SIGNAL(transferProgress(qint64,qint64))); + QSignalSpy errorSpy(reply, SIGNAL(error(QBluetoothTransferReply::TransferError))); QCOMPARE(reply->request(), request); QVERIFY(reply->manager() == &manager); @@ -326,12 +330,14 @@ void tst_QBluetoothTransferManager::tst_sendBuffer() QVERIFY(finishedSpy.count()>0); if (expectSuccess) { QVERIFY(progressSpy.count()>0); + QVERIFY(errorSpy.isEmpty()); QCOMPARE(reply->error(), QBluetoothTransferReply::NoError); QCOMPARE(reply->errorString(), QString()); } else { QVERIFY(progressSpy.count() == 0); QVERIFY(reply->error() != QBluetoothTransferReply::NoError); QVERIFY(!reply->errorString().isEmpty()); + QCOMPARE(errorSpy.count(), 1); } QVERIFY(reply->isFinished()); -- cgit v1.2.3