summary refs log tree commit diff
path: root/src/voip
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2023-06-19 01:38:40 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2023-06-19 01:38:40 +0200
commitce1a64bc19ffc21e115bdf2587bb053d7a417f3e (patch)
treea195d127228218772a535448de642f0bb7b6d053 /src/voip
parentRemove explicit link styling (diff)
downloadnheko-ce1a64bc19ffc21e115bdf2587bb053d7a417f3e.tar.xz
Move to automatic type registration
Diffstat (limited to 'src/voip')
-rw-r--r--src/voip/CallManager.cpp21
-rw-r--r--src/voip/CallManager.h7
-rw-r--r--src/voip/WebRTCSession.cpp36
-rw-r--r--src/voip/WebRTCSession.h2
4 files changed, 48 insertions, 18 deletions
diff --git a/src/voip/CallManager.cpp b/src/voip/CallManager.cpp

index feb06835..5479ba31 100644 --- a/src/voip/CallManager.cpp +++ b/src/voip/CallManager.cpp
@@ -54,6 +54,27 @@ std::vector<std::string> getTurnURIs(const mtx::responses::TurnServer &turnServer); } +CallManager * +CallManager::create(QQmlEngine *qmlEngine, QJSEngine *) +{ + // The instance has to exist before it is used. We cannot replace it. + auto instance = ChatPage::instance()->callManager(); + Q_ASSERT(instance); + + // The engine has to have the same thread affinity as the singleton. + Q_ASSERT(qmlEngine->thread() == instance->thread()); + + // There can only be one engine accessing the singleton. + static QJSEngine *s_engine = nullptr; + if (s_engine) + Q_ASSERT(qmlEngine == s_engine); + else + s_engine = qmlEngine; + + QJSEngine::setObjectOwnership(instance, QJSEngine::CppOwnership); + return instance; +} + CallManager::CallManager(QObject *parent) : QObject(parent) , session_(WebRTCSession::instance()) diff --git a/src/voip/CallManager.h b/src/voip/CallManager.h
index bbc7a903..e84b79c9 100644 --- a/src/voip/CallManager.h +++ b/src/voip/CallManager.h
@@ -9,6 +9,7 @@ #include <QMediaPlayer> #include <QObject> +#include <QQmlEngine> #include <QString> #include <QStringList> #include <QTimer> @@ -29,6 +30,10 @@ class QUrl; class CallManager final : public QObject { Q_OBJECT + + QML_ELEMENT + QML_SINGLETON + Q_PROPERTY(bool haveCallInvite READ haveCallInvite NOTIFY newInviteState) Q_PROPERTY(bool isOnCall READ isOnCall NOTIFY newCallState) Q_PROPERTY(bool isOnCallOnOtherDevice READ isOnCallOnOtherDevice NOTIFY newCallDeviceState) @@ -49,6 +54,8 @@ class CallManager final : public QObject public: CallManager(QObject *); + static CallManager *create(QQmlEngine *qmlEngine, QJSEngine *); + bool haveCallInvite() const { return haveCallInvite_; } bool isOnCall() const { return (session_.state() != webrtc::State::DISCONNECTED); } bool isOnCallOnOtherDevice() const { return (isOnCallOnOtherDevice_ != ""); } diff --git a/src/voip/WebRTCSession.cpp b/src/voip/WebRTCSession.cpp
index c40b39a4..ff459bf9 100644 --- a/src/voip/WebRTCSession.cpp +++ b/src/voip/WebRTCSession.cpp
@@ -48,26 +48,26 @@ using webrtc::State; WebRTCSession::WebRTCSession() : devices_(CallDevices::instance()) { - qmlRegisterUncreatableMetaObject(webrtc::staticMetaObject, - "im.nheko", - 1, - 0, - "CallType", - QStringLiteral("Can't instantiate enum")); + // qmlRegisterUncreatableMetaObject(webrtc::staticMetaObject, + // "im.nheko", + // 1, + // 0, + // "CallType", + // QStringLiteral("Can't instantiate enum")); - qmlRegisterUncreatableMetaObject(webrtc::staticMetaObject, - "im.nheko", - 1, - 0, - "ScreenShareType", - QStringLiteral("Can't instantiate enum")); + // qmlRegisterUncreatableMetaObject(webrtc::staticMetaObject, + // "im.nheko", + // 1, + // 0, + // "ScreenShareType", + // QStringLiteral("Can't instantiate enum")); - qmlRegisterUncreatableMetaObject(webrtc::staticMetaObject, - "im.nheko", - 1, - 0, - "WebRTCState", - QStringLiteral("Can't instantiate enum")); + // qmlRegisterUncreatableMetaObject(webrtc::staticMetaObject, + // "im.nheko", + // 1, + // 0, + // "WebRTCState", + // QStringLiteral("Can't instantiate enum")); connect(this, &WebRTCSession::stateChanged, this, &WebRTCSession::setState); init(); diff --git a/src/voip/WebRTCSession.h b/src/voip/WebRTCSession.h
index 82753372..3357bff7 100644 --- a/src/voip/WebRTCSession.h +++ b/src/voip/WebRTCSession.h
@@ -8,6 +8,7 @@ #include <vector> #include <QObject> +#include <QQmlEngine> #include "mtx/events/voip.hpp" @@ -17,6 +18,7 @@ class QQuickItem; namespace webrtc { Q_NAMESPACE +QML_NAMED_ELEMENT(Voip) enum class CallType {