From f157602a52278519370c45cde4c9a0b12ede8d7e Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 14 Aug 2020 01:03:27 +0200 Subject: [PATCH] Disable call support, when GStreamer is unavailable Integrating that in our CI is currently a bit hard, so disable it for now, if GStreamer isn't found. Just make sure to build against GStreamer for call support! --- CMakeLists.txt | 10 +++--- src/CallManager.cpp | 4 +++ src/TextInputWidget.cpp | 6 ++++ src/WebRTCSession.cpp | 68 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 83 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e17f70f..1be11fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -427,8 +427,7 @@ else() endif() include(FindPkgConfig) -pkg_check_modules(GST_SDP REQUIRED IMPORTED_TARGET gstreamer-sdp-1.0>=1.14) -pkg_check_modules(GST_WEBRTC REQUIRED IMPORTED_TARGET gstreamer-webrtc-1.0>=1.14) +pkg_check_modules(GSTREAMER IMPORTED_TARGET gstreamer-sdp-1.0>=1.14 gstreamer-webrtc-1.0>=1.14) # single instance functionality set(QAPPLICATION_CLASS QApplication CACHE STRING "Inheritance class for SingleApplication") @@ -595,8 +594,6 @@ target_link_libraries(nheko PRIVATE lmdbxx::lmdbxx liblmdb::lmdb tweeny - PkgConfig::GST_SDP - PkgConfig::GST_WEBRTC SingleApplication::SingleApplication) if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16.0") @@ -606,6 +603,11 @@ target_precompile_headers(nheko ) endif() +if (TARGET PkgConfig::GSTREAMER) + target_link_libraries(nheko PRIVATE PkgConfig::GSTREAMER) + target_compile_definitions(nheko PRIVATE GSTREAMER_AVAILABLE) +endif() + if(MSVC) target_link_libraries(nheko PRIVATE ntdll) endif() diff --git a/src/CallManager.cpp b/src/CallManager.cpp index 7ecabde..32b82fd 100644 --- a/src/CallManager.cpp +++ b/src/CallManager.cpp @@ -201,9 +201,13 @@ CallManager::onActiveCall() void CallManager::syncEvent(const mtx::events::collections::TimelineEvents &event) { +#ifdef GSTREAMER_AVAILABLE if (handleEvent_(event) || handleEvent_(event) || handleEvent_(event) || handleEvent_(event)) return; +#else + (void)event; +#endif } template diff --git a/src/TextInputWidget.cpp b/src/TextInputWidget.cpp index 9aadc10..a339217 100644 --- a/src/TextInputWidget.cpp +++ b/src/TextInputWidget.cpp @@ -453,12 +453,14 @@ TextInputWidget::TextInputWidget(QWidget *parent) topLayout_->setSpacing(0); topLayout_->setContentsMargins(13, 1, 13, 0); +#ifdef GSTREAMER_AVAILABLE callBtn_ = new FlatButton(this); changeCallButtonState(WebRTCSession::State::DISCONNECTED); connect(&WebRTCSession::instance(), &WebRTCSession::stateChanged, this, &TextInputWidget::changeCallButtonState); +#endif QIcon send_file_icon; send_file_icon.addFile(":/icons/icons/ui/paper-clip-outline.png"); @@ -528,7 +530,9 @@ TextInputWidget::TextInputWidget(QWidget *parent) emojiBtn_->setIcon(emoji_icon); emojiBtn_->setIconSize(QSize(ButtonHeight, ButtonHeight)); +#ifdef GSTREAMER_AVAILABLE topLayout_->addWidget(callBtn_); +#endif topLayout_->addWidget(sendFileBtn_); topLayout_->addWidget(input_); topLayout_->addWidget(emojiBtn_); @@ -536,7 +540,9 @@ TextInputWidget::TextInputWidget(QWidget *parent) setLayout(topLayout_); +#ifdef GSTREAMER_AVAILABLE connect(callBtn_, &FlatButton::clicked, this, &TextInputWidget::callButtonPress); +#endif connect(sendMessageBtn_, &FlatButton::clicked, input_, &FilteredTextEdit::submit); connect(sendFileBtn_, SIGNAL(clicked()), this, SLOT(openFileSelection())); connect(input_, &FilteredTextEdit::message, this, &TextInputWidget::sendTextMessage); diff --git a/src/WebRTCSession.cpp b/src/WebRTCSession.cpp index 5638c60..dd1dd61 100644 --- a/src/WebRTCSession.cpp +++ b/src/WebRTCSession.cpp @@ -3,6 +3,7 @@ #include "Logging.h" #include "WebRTCSession.h" +#ifdef GSTREAMER_AVAILABLE extern "C" { #include "gst/gst.h" @@ -11,6 +12,7 @@ extern "C" #define GST_USE_UNSTABLE_API #include "gst/webrtc/webrtc.h" } +#endif Q_DECLARE_METATYPE(WebRTCSession::State) @@ -24,6 +26,7 @@ WebRTCSession::WebRTCSession() bool WebRTCSession::init(std::string *errorMessage) { +#ifdef GSTREAMER_AVAILABLE if (initialised_) return true; @@ -81,10 +84,14 @@ WebRTCSession::init(std::string *errorMessage) *errorMessage = strError; } return initialised_; +#else + (void)errorMessage; + return false; +#endif } +#ifdef GSTREAMER_AVAILABLE namespace { - bool isoffering_; std::string localsdp_; std::vector localcandidates_; @@ -631,3 +638,62 @@ WebRTCSession::getAudioSourceNames(const std::string &defaultDevice) } return ret; } +#else + +bool +WebRTCSession::createOffer() +{ + return false; +} + +bool +WebRTCSession::acceptOffer(const std::string &) +{ + return false; +} + +bool +WebRTCSession::acceptAnswer(const std::string &) +{ + return false; +} + +void +WebRTCSession::acceptICECandidates(const std::vector &) +{} + +bool +WebRTCSession::startPipeline(int) +{ + return false; +} + +bool +WebRTCSession::createPipeline(int) +{ + return false; +} + +bool +WebRTCSession::toggleMuteAudioSrc(bool &) +{ + return false; +} + +void +WebRTCSession::end() +{ +} + +void +WebRTCSession::refreshDevices() +{ +} + +std::vector +WebRTCSession::getAudioSourceNames(const std::string &) +{ + return {}; +} + +#endif