summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorDominik Holland <dominik.holland@pelagicore.com>2019-05-06 16:25:01 +0200
committerRobert Griebl <robert.griebl@pelagicore.com>2019-05-14 12:58:21 +0000
commit06d415d83fc4b80730286686a8e5243ca0b03a20 (patch)
tree6e515166b39e7461d25752e886d717c1e0680e3c /src/plugins
parent07c631aa4c1ac5199b4919087e43815a00154867 (diff)
downloadqtivi-06d415d83fc4b80730286686a8e5243ca0b03a20.tar.gz
Introduce a internal QtRemoteObject helper module
This module provides helper functions when using QtRemoteObjects and starts using it in the autogenerator templates and the handwritten servers. The helper provides the following: * generic error handling * conversion from QIviPendingReply to a pending call on the source side * conversion to QIviPendingReply on the replica side Change-Id: Ic9030c89b8153626340cc786d97ecdae416e699d Fixes: AUTOSUITE-929 Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/ivimedia/media_qtro/media_qtro.pro2
-rw-r--r--src/plugins/ivimedia/media_qtro/mediadiscoverybackend.cpp29
-rw-r--r--src/plugins/ivimedia/media_qtro/mediadiscoverybackend.h7
-rw-r--r--src/plugins/ivimedia/media_qtro/mediaindexerbackend.cpp29
-rw-r--r--src/plugins/ivimedia/media_qtro/mediaindexerbackend.h7
-rw-r--r--src/plugins/ivimedia/media_qtro/mediaplayerbackend.cpp29
-rw-r--r--src/plugins/ivimedia/media_qtro/mediaplayerbackend.h7
-rw-r--r--src/plugins/ivimedia/media_qtro/searchandbrowsemodel.cpp239
-rw-r--r--src/plugins/ivimedia/media_qtro/searchandbrowsemodel.h8
9 files changed, 57 insertions, 300 deletions
diff --git a/src/plugins/ivimedia/media_qtro/media_qtro.pro b/src/plugins/ivimedia/media_qtro/media_qtro.pro
index 6967890..60e6a8a 100644
--- a/src/plugins/ivimedia/media_qtro/media_qtro.pro
+++ b/src/plugins/ivimedia/media_qtro/media_qtro.pro
@@ -8,7 +8,7 @@ load(qt_plugin)
DISTFILES += media_qtro.json
-QT += ivicore ivimedia remoteobjects
+QT += ivicore ivimedia remoteobjects iviremoteobjects_helper_private
HEADERS += \
mediaplugin.h \
diff --git a/src/plugins/ivimedia/media_qtro/mediadiscoverybackend.cpp b/src/plugins/ivimedia/media_qtro/mediadiscoverybackend.cpp
index 30ae5b8..30df6a6 100644
--- a/src/plugins/ivimedia/media_qtro/mediadiscoverybackend.cpp
+++ b/src/plugins/ivimedia/media_qtro/mediadiscoverybackend.cpp
@@ -50,12 +50,14 @@ Q_LOGGING_CATEGORY(qLcROQIviMediaDiscovery, "qtivi.media.qivimediadiscoverybacke
MediaDiscoveryBackend::MediaDiscoveryBackend(QRemoteObjectNode *node, QObject *parent)
: QIviMediaDeviceDiscoveryModelBackendInterface(parent)
, m_initialized(false)
+ , m_helper(new QIviRemoteObjectReplicaHelper(qLcROQIviMediaDiscovery(), this))
{
m_replica.reset(node->acquire<QIviMediaDiscoveryModelReplica>(QStringLiteral("QtIviMedia.QIviMediaDiscoveryModel")));
- connect(node, &QRemoteObjectNode::error, this, &MediaDiscoveryBackend::onNodeError);
+ connect(node, &QRemoteObjectNode::error, m_helper, &QIviRemoteObjectReplicaHelper::onNodeError);
+ connect(m_helper, &QIviRemoteObjectReplicaHelper::errorChanged, this, &QIviFeatureInterface::errorChanged);
+ connect(m_replica.data(), &QRemoteObjectReplica::stateChanged, m_helper, &QIviRemoteObjectReplicaHelper::onReplicaStateChanged);
connect(m_replica.data(), &QRemoteObjectReplica::initialized, this, &QIviFeatureInterface::initializationDone);
- connect(m_replica.data(), &QRemoteObjectReplica::stateChanged, this, &MediaDiscoveryBackend::onReplicaStateChanged);
connect(m_replica.data(), &QIviMediaDiscoveryModelReplica::devicesChanged, this, &MediaDiscoveryBackend::onDevicesChanged);
connect(m_replica.data(), &QIviMediaDiscoveryModelReplica::deviceAdded, this, &MediaDiscoveryBackend::onDeviceAdded);
connect(m_replica.data(), &QIviMediaDiscoveryModelReplica::deviceRemoved, this, &MediaDiscoveryBackend::onDeviceRemoved);
@@ -100,26 +102,3 @@ void MediaDiscoveryBackend::onDeviceRemoved(const QString &device)
emit deviceRemoved(dev);
dev->deleteLater();
}
-
-void MediaDiscoveryBackend::onReplicaStateChanged(QRemoteObjectReplica::State newState, QRemoteObjectReplica::State oldState)
-{
- Q_UNUSED(oldState)
-
- if (newState == QRemoteObjectReplica::Suspect) {
- qCWarning(qLcROQIviMediaDiscovery) << "QRemoteObjectReplica error, connection to the source lost";
- emit errorChanged(QIviAbstractFeature::Unknown,
- "QRemoteObjectReplica error, connection to the source lost");
- } else if (newState == QRemoteObjectReplica::SignatureMismatch) {
- qCWarning(qLcROQIviMediaDiscovery) << "QRemoteObjectReplica error, signature mismatch";
- emit errorChanged(QIviAbstractFeature::Unknown,
- "QRemoteObjectReplica error, signature mismatch");
- } else if (newState==QRemoteObjectReplica::Valid) {
- emit errorChanged(QIviAbstractFeature::NoError, "");
- }
-}
-
-void MediaDiscoveryBackend::onNodeError(QRemoteObjectNode::ErrorCode code)
-{
- qCWarning(qLcROQIviMediaDiscovery) << "QRemoteObjectNode error, code: " << code;
- emit errorChanged(QIviAbstractFeature::Unknown, "QRemoteObjectNode error, code: " + code);
-}
diff --git a/src/plugins/ivimedia/media_qtro/mediadiscoverybackend.h b/src/plugins/ivimedia/media_qtro/mediadiscoverybackend.h
index 14e78c1..505cf14 100644
--- a/src/plugins/ivimedia/media_qtro/mediadiscoverybackend.h
+++ b/src/plugins/ivimedia/media_qtro/mediadiscoverybackend.h
@@ -44,10 +44,12 @@
#include <QtIviMedia/QIviMediaDeviceDiscoveryModelBackendInterface>
#include <QtIviCore/QIviServiceObject>
+#include <QIviRemoteObjectReplicaHelper>
#include <QRemoteObjectNode>
#include "rep_qivimediadiscoverymodel_replica.h"
+
class MediaDiscoveryBackend : public QIviMediaDeviceDiscoveryModelBackendInterface
{
Q_OBJECT
@@ -58,10 +60,6 @@ public:
void initialize() override;
public Q_SLOTS:
- void onReplicaStateChanged(QRemoteObjectReplica::State newState,
- QRemoteObjectReplica::State oldState);
- void onNodeError(QRemoteObjectNode::ErrorCode code);
-
void onDevicesChanged(const QStringList &devices);
void onDeviceAdded(const QString &device);
void onDeviceRemoved(const QString &device);
@@ -70,6 +68,7 @@ private:
QSharedPointer<QIviMediaDiscoveryModelReplica> m_replica;
QHash<QString, QIviServiceObject*> m_deviceMap;
bool m_initialized;
+ QIviRemoteObjectReplicaHelper *m_helper;
};
#endif // MEDIADISCOVERYBACKEND_H
diff --git a/src/plugins/ivimedia/media_qtro/mediaindexerbackend.cpp b/src/plugins/ivimedia/media_qtro/mediaindexerbackend.cpp
index bdc26ab..58f2027 100644
--- a/src/plugins/ivimedia/media_qtro/mediaindexerbackend.cpp
+++ b/src/plugins/ivimedia/media_qtro/mediaindexerbackend.cpp
@@ -47,12 +47,14 @@ Q_LOGGING_CATEGORY(qLcROQIviMediaIndexer, "qtivi.media.qivimediaindexerbackend.r
MediaIndexerBackend::MediaIndexerBackend(QRemoteObjectNode *node, QObject *parent)
: QIviMediaIndexerControlBackendInterface(parent)
+ , m_helper(new QIviRemoteObjectReplicaHelper(qLcROQIviMediaIndexer(), this))
{
m_replica.reset(node->acquire<QIviMediaIndexerReplica>(QStringLiteral("QtIviMedia.QIviMediaIndexer")));
- connect(node, &QRemoteObjectNode::error, this, &MediaIndexerBackend::onNodeError);
+ connect(node, &QRemoteObjectNode::error, m_helper, &QIviRemoteObjectReplicaHelper::onNodeError);
+ connect(m_helper, &QIviRemoteObjectReplicaHelper::errorChanged, this, &QIviFeatureInterface::errorChanged);
+ connect(m_replica.data(), &QRemoteObjectReplica::stateChanged, m_helper, &QIviRemoteObjectReplicaHelper::onReplicaStateChanged);
connect(m_replica.data(), &QRemoteObjectReplica::initialized, this, &QIviFeatureInterface::initializationDone);
- connect(m_replica.data(), &QRemoteObjectReplica::stateChanged, this, &MediaIndexerBackend::onReplicaStateChanged);
connect(m_replica.data(), &QIviMediaIndexerReplica::stateChanged, this, &MediaIndexerBackend::stateChanged);
connect(m_replica.data(), &QIviMediaIndexerReplica::progressChanged, this, &MediaIndexerBackend::progressChanged);
@@ -80,26 +82,3 @@ void MediaIndexerBackend::resume()
{
m_replica->resume();
}
-
-void MediaIndexerBackend::onReplicaStateChanged(QRemoteObjectReplica::State newState, QRemoteObjectReplica::State oldState)
-{
- Q_UNUSED(oldState)
-
- if (newState == QRemoteObjectReplica::Suspect) {
- qCWarning(qLcROQIviMediaIndexer) << "QRemoteObjectReplica error, connection to the source lost";
- emit errorChanged(QIviAbstractFeature::Unknown,
- "QRemoteObjectReplica error, connection to the source lost");
- } else if (newState == QRemoteObjectReplica::SignatureMismatch) {
- qCWarning(qLcROQIviMediaIndexer) << "QRemoteObjectReplica error, signature mismatch";
- emit errorChanged(QIviAbstractFeature::Unknown,
- "QRemoteObjectReplica error, signature mismatch");
- } else if (newState==QRemoteObjectReplica::Valid) {
- emit errorChanged(QIviAbstractFeature::NoError, "");
- }
-}
-
-void MediaIndexerBackend::onNodeError(QRemoteObjectNode::ErrorCode code)
-{
- qCWarning(qLcROQIviMediaIndexer) << "QRemoteObjectNode error, code: " << code;
- emit errorChanged(QIviAbstractFeature::Unknown, "QRemoteObjectNode error, code: " + code);
-}
diff --git a/src/plugins/ivimedia/media_qtro/mediaindexerbackend.h b/src/plugins/ivimedia/media_qtro/mediaindexerbackend.h
index add4010..29a0cd3 100644
--- a/src/plugins/ivimedia/media_qtro/mediaindexerbackend.h
+++ b/src/plugins/ivimedia/media_qtro/mediaindexerbackend.h
@@ -43,6 +43,7 @@
#define MEDIAINDEXERBACKEND_H
#include <QtIviMedia/QIviMediaIndexerControlBackendInterface>
+#include <QIviRemoteObjectReplicaHelper>
#include <QRemoteObjectNode>
#include "rep_qivimediaindexer_replica.h"
@@ -57,13 +58,9 @@ public:
void pause() override;
void resume() override;
-public Q_SLOTS:
- void onReplicaStateChanged(QRemoteObjectReplica::State newState,
- QRemoteObjectReplica::State oldState);
- void onNodeError(QRemoteObjectNode::ErrorCode code);
-
private:
QSharedPointer<QIviMediaIndexerReplica> m_replica;
+ QIviRemoteObjectReplicaHelper *m_helper;
};
#endif // MEDIAINDEXERBACKEND_H
diff --git a/src/plugins/ivimedia/media_qtro/mediaplayerbackend.cpp b/src/plugins/ivimedia/media_qtro/mediaplayerbackend.cpp
index 983dd35..10fc75a 100644
--- a/src/plugins/ivimedia/media_qtro/mediaplayerbackend.cpp
+++ b/src/plugins/ivimedia/media_qtro/mediaplayerbackend.cpp
@@ -48,6 +48,7 @@ Q_LOGGING_CATEGORY(qLcROQIviMediaPlayer, "qtivi.media.qivimediaplayerbackend.rem
MediaPlayerBackend::MediaPlayerBackend(QRemoteObjectNode *node, QObject *parent)
: QIviMediaPlayerBackendInterface(parent)
+ , m_helper(new QIviRemoteObjectReplicaHelper(qLcROQIviMediaPlayer(), this))
{
qRegisterMetaType<QIviPlayableItem>();
qRegisterMetaType<QIviAudioTrackItem>();
@@ -55,9 +56,10 @@ MediaPlayerBackend::MediaPlayerBackend(QRemoteObjectNode *node, QObject *parent)
m_replica.reset(node->acquire<QIviMediaPlayerReplica>(QStringLiteral("QtIviMedia.QIviMediaPlayer")));
- connect(node, &QRemoteObjectNode::error, this, &MediaPlayerBackend::onNodeError);
+ connect(node, &QRemoteObjectNode::error, m_helper, &QIviRemoteObjectReplicaHelper::onNodeError);
+ connect(m_helper, &QIviRemoteObjectReplicaHelper::errorChanged, this, &QIviFeatureInterface::errorChanged);
+ connect(m_replica.data(), &QRemoteObjectReplica::stateChanged, m_helper, &QIviRemoteObjectReplicaHelper::onReplicaStateChanged);
connect(m_replica.data(), &QRemoteObjectReplica::initialized, this, &QIviFeatureInterface::initializationDone);
- connect(m_replica.data(), &QRemoteObjectReplica::stateChanged, this, &MediaPlayerBackend::onReplicaStateChanged);
connect(m_replica.data(), &QIviMediaPlayerReplica::playModeChanged, this, &MediaPlayerBackend::playModeChanged);
connect(m_replica.data(), &QIviMediaPlayerReplica::playStateChanged, this, &MediaPlayerBackend::playStateChanged);
connect(m_replica.data(), &QIviMediaPlayerReplica::positionChanged, this, &MediaPlayerBackend::positionChanged);
@@ -167,26 +169,3 @@ void MediaPlayerBackend::move(int currentIndex, int newIndex)
{
m_replica->move(currentIndex, newIndex);
}
-
-void MediaPlayerBackend::onReplicaStateChanged(QRemoteObjectReplica::State newState, QRemoteObjectReplica::State oldState)
-{
- Q_UNUSED(oldState)
-
- if (newState == QRemoteObjectReplica::Suspect) {
- qCWarning(qLcROQIviMediaPlayer) << "QRemoteObjectReplica error, connection to the source lost";
- emit errorChanged(QIviAbstractFeature::Unknown,
- "QRemoteObjectReplica error, connection to the source lost");
- } else if (newState == QRemoteObjectReplica::SignatureMismatch) {
- qCWarning(qLcROQIviMediaPlayer) << "QRemoteObjectReplica error, signature mismatch";
- emit errorChanged(QIviAbstractFeature::Unknown,
- "QRemoteObjectReplica error, signature mismatch");
- } else if (newState==QRemoteObjectReplica::Valid) {
- emit errorChanged(QIviAbstractFeature::NoError, "");
- }
-}
-
-void MediaPlayerBackend::onNodeError(QRemoteObjectNode::ErrorCode code)
-{
- qCWarning(qLcROQIviMediaPlayer) << "QRemoteObjectNode error, code: " << code;
- emit errorChanged(QIviAbstractFeature::Unknown, "QRemoteObjectNode error, code: " + code);
-}
diff --git a/src/plugins/ivimedia/media_qtro/mediaplayerbackend.h b/src/plugins/ivimedia/media_qtro/mediaplayerbackend.h
index 3f951e4..62b3b22 100644
--- a/src/plugins/ivimedia/media_qtro/mediaplayerbackend.h
+++ b/src/plugins/ivimedia/media_qtro/mediaplayerbackend.h
@@ -43,6 +43,7 @@
#define MEDIAPLAYERBACKEND_H
#include <QtIviMedia/QIviMediaPlayerBackendInterface>
+#include <QIviRemoteObjectReplicaHelper>
#include <QRemoteObjectNode>
#include "rep_qivimediaplayer_replica.h"
@@ -69,13 +70,9 @@ public:
void remove(int index) override;
void move(int currentIndex, int newIndex) override;
-public Q_SLOTS:
- void onReplicaStateChanged(QRemoteObjectReplica::State newState,
- QRemoteObjectReplica::State oldState);
- void onNodeError(QRemoteObjectNode::ErrorCode code);
-
private:
QSharedPointer<QIviMediaPlayerReplica> m_replica;
+ QIviRemoteObjectReplicaHelper *m_helper;
};
#endif // MEDIAPLAYERBACKEND_H
diff --git a/src/plugins/ivimedia/media_qtro/searchandbrowsemodel.cpp b/src/plugins/ivimedia/media_qtro/searchandbrowsemodel.cpp
index 6297b5a..9a3894e 100644
--- a/src/plugins/ivimedia/media_qtro/searchandbrowsemodel.cpp
+++ b/src/plugins/ivimedia/media_qtro/searchandbrowsemodel.cpp
@@ -74,6 +74,7 @@ QDataStream &operator>>(QDataStream &stream, SearchAndBrowseItem &obj)
SearchAndBrowseModel::SearchAndBrowseModel(QRemoteObjectNode *node, QObject *parent)
: QIviSearchAndBrowseModelInterface(parent)
+ , m_helper(new QIviRemoteObjectReplicaHelper(qLcROQIviSearchAndBrowseModel(), this))
{
qRegisterMetaType<SearchAndBrowseItem>();
qRegisterMetaTypeStreamOperators<SearchAndBrowseItem>();
@@ -82,10 +83,11 @@ SearchAndBrowseModel::SearchAndBrowseModel(QRemoteObjectNode *node, QObject *par
m_replica.reset(node->acquire<QIviSearchAndBrowseModelReplica>(QStringLiteral("QIviSearchAndBrowseModel")));
- connect(node, &QRemoteObjectNode::error, this, &SearchAndBrowseModel::onNodeError);
+ connect(node, &QRemoteObjectNode::error, m_helper, &QIviRemoteObjectReplicaHelper::onNodeError);
+ connect(m_helper, &QIviRemoteObjectReplicaHelper::errorChanged, this, &QIviFeatureInterface::errorChanged);
+ connect(m_replica.data(), &QRemoteObjectReplica::stateChanged, m_helper, &QIviRemoteObjectReplicaHelper::onReplicaStateChanged);
connect(m_replica.data(), &QRemoteObjectReplica::initialized, this, &QIviFeatureInterface::initializationDone);
- connect(m_replica.data(), &QRemoteObjectReplica::stateChanged, this, &SearchAndBrowseModel::onReplicaStateChanged);
- connect(m_replica.data(), &QIviSearchAndBrowseModelReplica::pendingResultAvailable, this, &SearchAndBrowseModel::onPendingResultAvailable);
+ connect(m_replica.data(), &QIviSearchAndBrowseModelReplica::pendingResultAvailable, m_helper, &QIviRemoteObjectReplicaHelper::onPendingResultAvailable);
connect(m_replica.data(), &QIviSearchAndBrowseModelReplica::canGoBackChanged, this, &SearchAndBrowseModel::canGoBackChanged);
connect(m_replica.data(), &QIviSearchAndBrowseModelReplica::canGoForwardChanged, this, &SearchAndBrowseModel::canGoForwardChanged);
connect(m_replica.data(), &QIviSearchAndBrowseModelReplica::supportedCapabilitiesChanged, this, &SearchAndBrowseModel::supportedCapabilitiesChanged);
@@ -141,244 +143,73 @@ void SearchAndBrowseModel::setupFilter(const QUuid &identifier, QIviAbstractQuer
QIviPendingReply<QString> SearchAndBrowseModel::goBack(const QUuid &identifier)
{
- QIviPendingReply<QString> iviReply;
QRemoteObjectPendingReply<QVariant> reply = m_replica->goBack(identifier);
- auto watcher = new QRemoteObjectPendingCallWatcher(reply);
- connect(watcher, &QRemoteObjectPendingCallWatcher::finished, this, [this, iviReply](QRemoteObjectPendingCallWatcher *self) mutable {
- if (self->error() == QRemoteObjectPendingCallWatcher::NoError) {
-#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 1)
- QVariant value = self->returnValue();
-#else
- QVariant value = self->returnValue().value<QVariant>();
-#endif
- if (value.canConvert<QIviSearchAndBrowseModelPendingResult>()) {
- QIviSearchAndBrowseModelPendingResult result = value.value<QIviSearchAndBrowseModelPendingResult>();
- if (result.failed()) {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Pending Result with id:" << result.id() << "failed";
- iviReply.setFailed();
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Result not available yet. Waiting for id:" << result.id();
- m_pendingReplies.insert(result.id(), iviReply);
- }
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Got the value right away:" << value.value<QString>();
- iviReply.setSuccess(value.toString());
- }
- } else {
- iviReply.setFailed();
- emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method insert failed"));
- }
- self->deleteLater();
+ auto iviReply = m_helper->toQIviPendingReply<QString>(reply);
+
+ //Pass an empty std::function to only handle errors.
+ iviReply.then(std::function<void(QString)>(), [this]() {
+ emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method goBack failed"));
});
return iviReply;
}
QIviPendingReply<QString> SearchAndBrowseModel::goForward(const QUuid &identifier, int index)
{
- QIviPendingReply<QString> iviReply;
QRemoteObjectPendingReply<QVariant> reply = m_replica->goForward(identifier, index);
- auto watcher = new QRemoteObjectPendingCallWatcher(reply);
- connect(watcher, &QRemoteObjectPendingCallWatcher::finished, this, [this, iviReply](QRemoteObjectPendingCallWatcher *self) mutable {
- if (self->error() == QRemoteObjectPendingCallWatcher::NoError) {
-#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 1)
- QVariant value = self->returnValue();
-#else
- QVariant value = self->returnValue().value<QVariant>();
-#endif
- if (value.canConvert<QIviSearchAndBrowseModelPendingResult>()) {
- QIviSearchAndBrowseModelPendingResult result = value.value<QIviSearchAndBrowseModelPendingResult>();
- if (result.failed()) {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Pending Result with id:" << result.id() << "failed";
- iviReply.setFailed();
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Result not available yet. Waiting for id:" << result.id();
- m_pendingReplies.insert(result.id(), iviReply);
- }
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Got the value right away:" << value.value<QString>();
- iviReply.setSuccess(value.toString());
- }
- } else {
- iviReply.setFailed();
- emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method insert failed"));
- }
- self->deleteLater();
+
+ //Pass an empty std::function to only handle errors.
+ auto iviReply = m_helper->toQIviPendingReply<QString>(reply);
+ iviReply.then(std::function<void(QString)>(), [this]() {
+ emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method goForward failed"));
});
return iviReply;
}
QIviPendingReply<void> SearchAndBrowseModel::insert(const QUuid &identifier, int index, const QVariant &item)
{
- QIviPendingReply<void> iviReply;
QRemoteObjectPendingReply<QVariant> reply = m_replica->insert(identifier, index, item);
- auto watcher = new QRemoteObjectPendingCallWatcher(reply);
- connect(watcher, &QRemoteObjectPendingCallWatcher::finished, this, [this, iviReply](QRemoteObjectPendingCallWatcher *self) mutable {
- if (self->error() == QRemoteObjectPendingCallWatcher::NoError) {
-#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 1)
- QVariant value = self->returnValue();
-#else
- QVariant value = self->returnValue().value<QVariant>();
-#endif
- if (value.canConvert<QIviSearchAndBrowseModelPendingResult>()) {
- QIviSearchAndBrowseModelPendingResult result = value.value<QIviSearchAndBrowseModelPendingResult>();
- if (result.failed()) {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Pending Result with id:" << result.id() << "failed";
- iviReply.setFailed();
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Result not available yet. Waiting for id:" << result.id();
- m_pendingReplies.insert(result.id(), iviReply);
- }
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Got the value right away: void";
- iviReply.setSuccess();
- }
- } else {
- iviReply.setFailed();
- emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method insert failed"));
- }
- self->deleteLater();
+
+ //Pass an empty std::function to only handle errors.
+ auto iviReply = m_helper->toQIviPendingReply<void>(reply);
+ iviReply.then(std::function<void()>(), [this]() {
+ emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method insert failed"));
});
return iviReply;
}
QIviPendingReply<void> SearchAndBrowseModel::remove(const QUuid &identifier, int index)
{
- QIviPendingReply<void> iviReply;
QRemoteObjectPendingReply<QVariant> reply = m_replica->remove(identifier, index);
- auto watcher = new QRemoteObjectPendingCallWatcher(reply);
- connect(watcher, &QRemoteObjectPendingCallWatcher::finished, this, [this, iviReply](QRemoteObjectPendingCallWatcher *self) mutable {
- if (self->error() == QRemoteObjectPendingCallWatcher::NoError) {
-#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 1)
- QVariant value = self->returnValue();
-#else
- QVariant value = self->returnValue().value<QVariant>();
-#endif
- if (value.canConvert<QIviSearchAndBrowseModelPendingResult>()) {
- QIviSearchAndBrowseModelPendingResult result = value.value<QIviSearchAndBrowseModelPendingResult>();
- if (result.failed()) {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Pending Result with id:" << result.id() << "failed";
- iviReply.setFailed();
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Result not available yet. Waiting for id:" << result.id();
- m_pendingReplies.insert(result.id(), iviReply);
- }
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Got the value right away: void";
- iviReply.setSuccess();
- }
- } else {
- iviReply.setFailed();
- emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method remove failed"));
- }
- self->deleteLater();
+
+ //Pass an empty std::function to only handle errors.
+ auto iviReply = m_helper->toQIviPendingReply<void>(reply);
+ iviReply.then(std::function<void()>(), [this]() {
+ emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method remove failed"));
});
return iviReply;
}
QIviPendingReply<void> SearchAndBrowseModel::move(const QUuid &identifier, int currentIndex, int newIndex)
{
- QIviPendingReply<void> iviReply;
QRemoteObjectPendingReply<QVariant> reply = m_replica->move(identifier, currentIndex, newIndex);
- auto watcher = new QRemoteObjectPendingCallWatcher(reply);
- connect(watcher, &QRemoteObjectPendingCallWatcher::finished, this, [this, iviReply](QRemoteObjectPendingCallWatcher *self) mutable {
- if (self->error() == QRemoteObjectPendingCallWatcher::NoError) {
-#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 1)
- QVariant value = self->returnValue();
-#else
- QVariant value = self->returnValue().value<QVariant>();
-#endif
- if (value.canConvert<QIviSearchAndBrowseModelPendingResult>()) {
- QIviSearchAndBrowseModelPendingResult result = value.value<QIviSearchAndBrowseModelPendingResult>();
- if (result.failed()) {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Pending Result with id:" << result.id() << "failed";
- iviReply.setFailed();
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Result not available yet. Waiting for id:" << result.id();
- m_pendingReplies.insert(result.id(), iviReply);
- }
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Got the value right away: void";
- iviReply.setSuccess();
- }
- } else {
- iviReply.setFailed();
- emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method move failed"));
- }
- self->deleteLater();
+
+ //Pass an empty std::function to only handle errors.
+ auto iviReply = m_helper->toQIviPendingReply<void>(reply);
+ iviReply.then(std::function<void()>(), [this]() {
+ emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method move failed"));
});
return iviReply;
}
QIviPendingReply<int> SearchAndBrowseModel::indexOf(const QUuid &identifier, const QVariant &item)
{
- QIviPendingReply<int> iviReply;
QRemoteObjectPendingReply<QVariant> reply = m_replica->indexOf(identifier, item);
- auto watcher = new QRemoteObjectPendingCallWatcher(reply);
- connect(watcher, &QRemoteObjectPendingCallWatcher::finished, this, [this, iviReply](QRemoteObjectPendingCallWatcher *self) mutable {
- if (self->error() == QRemoteObjectPendingCallWatcher::NoError) {
-#if QT_VERSION >= QT_VERSION_CHECK(5, 12, 1)
- QVariant value = self->returnValue();
-#else
- QVariant value = self->returnValue().value<QVariant>();
-#endif
- if (value.canConvert<QIviSearchAndBrowseModelPendingResult>()) {
- QIviSearchAndBrowseModelPendingResult result = value.value<QIviSearchAndBrowseModelPendingResult>();
- if (result.failed()) {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Pending Result with id:" << result.id() << "failed";
- iviReply.setFailed();
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Result not available yet. Waiting for id:" << result.id();
- m_pendingReplies.insert(result.id(), iviReply);
- }
- } else {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Got the value right away:" << value.value<int>();
- iviReply.setSuccess(value.value<int>());
- }
- } else {
- iviReply.setFailed();
- emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method remove failed"));
- }
- self->deleteLater();
+
+ //Pass an empty std::function to only handle errors.
+ auto iviReply = m_helper->toQIviPendingReply<int>(reply);
+ iviReply.then(std::function<void(int)>(), [this]() {
+ emit errorChanged(QIviAbstractFeature::InvalidOperation, QStringLiteral("remote call of method indexOf failed"));
});
return iviReply;
}
-void SearchAndBrowseModel::onReplicaStateChanged(QRemoteObjectReplica::State newState, QRemoteObjectReplica::State oldState)
-{
- Q_UNUSED(oldState)
-
- if (newState == QRemoteObjectReplica::Suspect) {
- qCWarning(qLcROQIviSearchAndBrowseModel) << "QRemoteObjectReplica error, connection to the source lost";
- emit errorChanged(QIviAbstractFeature::Unknown,
- "QRemoteObjectReplica error, connection to the source lost");
- } else if (newState == QRemoteObjectReplica::SignatureMismatch) {
- qCWarning(qLcROQIviSearchAndBrowseModel) << "QRemoteObjectReplica error, signature mismatch";
- emit errorChanged(QIviAbstractFeature::Unknown,
- "QRemoteObjectReplica error, signature mismatch");
- } else if (newState == QRemoteObjectReplica::Valid) {
- emit errorChanged(QIviAbstractFeature::NoError, "");
- }
-}
-
-void SearchAndBrowseModel::onNodeError(QRemoteObjectNode::ErrorCode code)
-{
- qCWarning(qLcROQIviSearchAndBrowseModel) << "QRemoteObjectNode error, code: " << code;
- emit errorChanged(QIviAbstractFeature::Unknown, "QRemoteObjectNode error, code: " + code);
-}
-
-void SearchAndBrowseModel::onPendingResultAvailable(quint64 id, bool isSuccess, const QVariant &value)
-{
- qCDebug(qLcROQIviSearchAndBrowseModel) << "pending result available" << id;
- if (!m_pendingReplies.contains(id)) {
- qCDebug(qLcROQIviSearchAndBrowseModel) << "Received a result for an unexpected id:" << id << ". Ignoring!";
- return;
- }
-
- QIviPendingReplyBase iviReply = m_pendingReplies.take(id);
-
- if (isSuccess)
- iviReply.setSuccess(value);
- else
- iviReply.setFailed();
-}
-
diff --git a/src/plugins/ivimedia/media_qtro/searchandbrowsemodel.h b/src/plugins/ivimedia/media_qtro/searchandbrowsemodel.h
index 4a7b23c..5761ee5 100644
--- a/src/plugins/ivimedia/media_qtro/searchandbrowsemodel.h
+++ b/src/plugins/ivimedia/media_qtro/searchandbrowsemodel.h
@@ -44,6 +44,7 @@
#include <QtIviCore/QIviSearchAndBrowseModelInterface>
#include <QtIviMedia/QIviPlayableItem>
+#include <QIviRemoteObjectReplicaHelper>
#include <QRemoteObjectNode>
#include "rep_qivisearchandbrowsemodel_replica.h"
@@ -87,14 +88,9 @@ public:
QIviPendingReply<void> move(const QUuid &identifier, int currentIndex, int newIndex) override;
QIviPendingReply<int> indexOf(const QUuid &identifier, const QVariant &item) override;
-public Q_SLOTS:
- void onReplicaStateChanged(QRemoteObjectReplica::State newState,
- QRemoteObjectReplica::State oldState);
- void onNodeError(QRemoteObjectNode::ErrorCode code);
- void onPendingResultAvailable(quint64 id, bool isSuccess, const QVariant &value);
private:
QSharedPointer<QIviSearchAndBrowseModelReplica> m_replica;
- QHash<quint64, QIviPendingReplyBase> m_pendingReplies;
+ QIviRemoteObjectReplicaHelper *m_helper;
};
#endif // SEARCHANDBROWSEMODEL_H