263 lines
13 KiB
Diff
263 lines
13 KiB
Diff
From 9f00179a95ef729fa7871b4d408c76bc50e4eb4e Mon Sep 17 00:00:00 2001
|
|
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
|
|
Date: Wed, 20 Jun 2018 11:56:19 +0200
|
|
Subject: Introduce reportError to fix "QMetaObject::invokeMethod: No such method"
|
|
|
|
Task-number: QTBUG-67958
|
|
Change-Id: Ia5a21cb19f0318844ac436adcc3f0fff9a3185b5
|
|
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
---
|
|
src/nfc/qnearfieldtagtype1.cpp | 8 ++----
|
|
src/nfc/qnearfieldtarget.cpp | 13 ++++++++++
|
|
src/nfc/qnearfieldtarget.h | 2 ++
|
|
src/nfc/qnearfieldtarget_android.cpp | 36 +++++++--------------------
|
|
src/nfc/qnearfieldtarget_emulator.cpp | 20 ++++-----------
|
|
src/nfc/qnearfieldtarget_neard_p.h | 8 ++----
|
|
6 files changed, 33 insertions(+), 54 deletions(-)
|
|
|
|
diff --git x/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp y/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp
|
|
index 34f2c8b8..7f27fbe9 100644
|
|
--- x/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp
|
|
+++ y/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp
|
|
@@ -440,9 +440,7 @@ QNearFieldTarget::RequestId QNearFieldTagType1::readNdefMessages()
|
|
if (d->m_readNdefMessageState == QNearFieldTagType1Private::NotReadingNdefMessage) {
|
|
d->progressToNextNdefReadMessageState();
|
|
} else {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, NdefReadError),
|
|
- Q_ARG(QNearFieldTarget::RequestId, d->m_readNdefRequestId));
|
|
+ reportError(QNearFieldTarget::NdefReadError, d->m_readNdefRequestId);
|
|
}
|
|
|
|
return d->m_readNdefRequestId;
|
|
@@ -462,9 +460,7 @@ QNearFieldTarget::RequestId QNearFieldTagType1::writeNdefMessages(const QList<QN
|
|
d->m_ndefWriteMessages = messages;
|
|
d->progressToNextNdefWriteMessageState();
|
|
} else {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, NdefWriteError),
|
|
- Q_ARG(QNearFieldTarget::RequestId, d->m_readNdefRequestId));
|
|
+ reportError(QNearFieldTarget::NdefWriteError, d->m_readNdefRequestId);
|
|
}
|
|
|
|
return d->m_writeNdefRequestId;
|
|
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
|
|
index e642824b..e9a6fa11 100644
|
|
--- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
|
|
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
|
|
@@ -530,4 +530,17 @@ bool QNearFieldTarget::handleResponse(const QNearFieldTarget::RequestId &id,
|
|
return true;
|
|
}
|
|
|
|
+/*!
|
|
+ \since 5.12
|
|
+
|
|
+ Reports the \a error for the request \a id by appending the signal emission to the event queue.
|
|
+*/
|
|
+void QNearFieldTarget::reportError(QNearFieldTarget::Error error,
|
|
+ const QNearFieldTarget::RequestId &id)
|
|
+{
|
|
+ QMetaObject::invokeMethod(this, [this, error, id]() {
|
|
+ Q_EMIT this->error(error, id);
|
|
+ }, Qt::QueuedConnection);
|
|
+}
|
|
+
|
|
QT_END_NAMESPACE
|
|
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
|
|
index e51960f7..868b52d5 100644
|
|
--- x/qtconnectivity/src/nfc/qnearfieldtarget.h
|
|
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
|
|
@@ -153,6 +153,8 @@ protected:
|
|
Q_INVOKABLE virtual bool handleResponse(const QNearFieldTarget::RequestId &id,
|
|
const QByteArray &response);
|
|
|
|
+ void reportError(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id);
|
|
+
|
|
Q_SIGNALS:
|
|
void disconnected();
|
|
|
|
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
|
|
index e656996e..78da6ac2 100644
|
|
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
|
|
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
|
|
@@ -147,25 +147,19 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
|
|
// Making sure that target is still in range
|
|
QNearFieldTarget::RequestId requestId(new QNearFieldTarget::RequestIdPrivate);
|
|
if (!m_intent.isValid()) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
|
|
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
|
|
return requestId;
|
|
}
|
|
|
|
// Getting Ndef technology object
|
|
if (!setTagTechnology({NDEFTECHNOLOGY})) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnsupportedError),
|
|
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
+ reportError(QNearFieldTarget::UnsupportedError, requestId);
|
|
return requestId;
|
|
}
|
|
|
|
// Connect
|
|
if (!connect()) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
|
|
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
|
|
return requestId;
|
|
}
|
|
|
|
@@ -174,9 +168,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
|
|
if (catchJavaExceptions())
|
|
ndefMessage = QAndroidJniObject();
|
|
if (!ndefMessage.isValid()) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::NdefReadError),
|
|
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
+ reportError(QNearFieldTarget::NdefReadError, requestId);
|
|
return requestId;
|
|
}
|
|
|
|
@@ -249,9 +241,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
|
|
// Connecting
|
|
QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
|
|
if (!connect()) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
|
|
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
|
|
return requestId;
|
|
}
|
|
|
|
@@ -263,9 +253,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
|
|
// Writing
|
|
QAndroidJniObject myNewVal = m_tagTech.callObjectMethod("transceive", "([B)[B", jba);
|
|
if (catchJavaExceptions()) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::CommandError),
|
|
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
+ reportError(QNearFieldTarget::CommandError, requestId);
|
|
return requestId;
|
|
}
|
|
QByteArray result = jbyteArrayToQByteArray(myNewVal.object<jbyteArray>());
|
|
@@ -315,9 +303,7 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
|
|
// Connecting
|
|
QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
|
|
if (!connect()) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
|
|
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
|
|
return requestId;
|
|
}
|
|
|
|
@@ -328,18 +314,14 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
|
|
env->SetByteArrayRegion(jba.object<jbyteArray>(), 0, ba.size(), reinterpret_cast<jbyte*>(ba.data()));
|
|
QAndroidJniObject jmessage = QAndroidJniObject("android/nfc/NdefMessage", "([B)V", jba.object<jbyteArray>());
|
|
if (catchJavaExceptions()) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError),
|
|
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
+ reportError(QNearFieldTarget::UnknownError, requestId);
|
|
return requestId;
|
|
}
|
|
|
|
// Writing
|
|
m_tagTech.callMethod<void>(writeMethod, "(Landroid/nfc/NdefMessage;)V", jmessage.object<jobject>());
|
|
if (catchJavaExceptions()) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::NdefWriteError),
|
|
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
+ reportError(QNearFieldTarget::NdefWriteError, requestId);
|
|
return requestId;
|
|
}
|
|
|
|
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp
|
|
index 29b1f74d..030718cc 100644
|
|
--- x/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp
|
|
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp
|
|
@@ -82,9 +82,7 @@ QNearFieldTarget::RequestId TagType1::sendCommand(const QByteArray &command)
|
|
|
|
// tag not in proximity
|
|
if (!tagMap.value(m_tag)) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, TargetOutOfRangeError),
|
|
- Q_ARG(QNearFieldTarget::RequestId, id));
|
|
+ reportError(QNearFieldTarget::TargetOutOfRangeError, id);
|
|
return id;
|
|
}
|
|
|
|
@@ -93,17 +91,13 @@ QNearFieldTarget::RequestId TagType1::sendCommand(const QByteArray &command)
|
|
QByteArray response = m_tag->processCommand(command + char(crc & 0xff) + char(crc >> 8));
|
|
|
|
if (response.isEmpty()) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, NoResponseError),
|
|
- Q_ARG(QNearFieldTarget::RequestId, id));
|
|
+ reportError(QNearFieldTarget::NoResponseError, id);
|
|
return id;
|
|
}
|
|
|
|
// check crc
|
|
if (qChecksum(response.constData(), response.length(), Qt::ChecksumItuV41) != 0) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, ChecksumMismatchError),
|
|
- Q_ARG(QNearFieldTarget::RequestId, id));
|
|
+ reportError(QNearFieldTarget::ChecksumMismatchError, id);
|
|
return id;
|
|
}
|
|
|
|
@@ -152,9 +146,7 @@ QNearFieldTarget::RequestId TagType2::sendCommand(const QByteArray &command)
|
|
|
|
// tag not in proximity
|
|
if (!tagMap.value(m_tag)) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, TargetOutOfRangeError),
|
|
- Q_ARG(QNearFieldTarget::RequestId, id));
|
|
+ reportError(QNearFieldTarget::TargetOutOfRangeError, id);
|
|
return id;
|
|
}
|
|
|
|
@@ -168,9 +160,7 @@ QNearFieldTarget::RequestId TagType2::sendCommand(const QByteArray &command)
|
|
if (response.length() > 1) {
|
|
// check crc
|
|
if (qChecksum(response.constData(), response.length(), Qt::ChecksumItuV41) != 0) {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, ChecksumMismatchError),
|
|
- Q_ARG(QNearFieldTarget::RequestId, id));
|
|
+ reportError(QNearFieldTarget::ChecksumMismatchError, id);
|
|
return id;
|
|
}
|
|
|
|
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h
|
|
index 053df141..625cee67 100644
|
|
--- x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h
|
|
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h
|
|
@@ -359,9 +359,7 @@ private:
|
|
Q_EMIT this->requestCompleted(this->m_currentReadRequestId);
|
|
}, Qt::QueuedConnection);
|
|
} else {
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError),
|
|
- Q_ARG(QNearFieldTarget::RequestId, m_currentReadRequestId));
|
|
+ this->reportError(QNearFieldTarget::UnknownError, m_currentReadRequestId);
|
|
}
|
|
|
|
m_readRequested = false;
|
|
@@ -389,9 +387,7 @@ private:
|
|
reply.waitForFinished();
|
|
if (reply.isError()) {
|
|
qCWarning(QT_NFC_NEARD) << "Error writing to NFC tag" << reply.error();
|
|
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError),
|
|
- Q_ARG(QNearFieldTarget::RequestId, m_currentWriteRequestId));
|
|
+ this->reportError(QNearFieldTarget::UnknownError, m_currentWriteRequestId);
|
|
}
|
|
|
|
QMetaObject::invokeMethod(this, "ndefMessagesWritten", Qt::QueuedConnection);
|
|
--
|
|
2.19.1
|
|
|