diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp
index bd8f6414..dc287f94 100644
--- a/src/timeline/InputBar.cpp
+++ b/src/timeline/InputBar.cpp
@@ -12,13 +12,16 @@
#include <mtx/responses/media.hpp>
#include "Cache.h"
+#include "CallManager.h"
#include "ChatPage.h"
#include "Logging.h"
+#include "MainWindow.h"
#include "MatrixClient.h"
#include "Olm.h"
#include "TimelineModel.h"
#include "UserSettingsPage.h"
#include "Utils.h"
+#include "dialogs/PlaceCall.h"
#include "dialogs/PreviewUploadOverlay.h"
#include "blurhash.hpp"
@@ -511,3 +514,45 @@ InputBar::showPreview(const QMimeData &source, QString path, const QStringList &
});
});
}
+
+void
+InputBar::callButton()
+{
+ auto callManager_ = ChatPage::instance()->callManager();
+ if (callManager_->onActiveCall()) {
+ callManager_->hangUp();
+ } else {
+ auto current_room_ = room->roomId();
+ if (auto roomInfo = cache::singleRoomInfo(current_room_.toStdString());
+ roomInfo.member_count != 2) {
+ ChatPage::instance()->showNotification("Calls are limited to 1:1 rooms.");
+ } else {
+ std::vector<RoomMember> members(
+ cache::getMembers(current_room_.toStdString()));
+ const RoomMember &callee = members.front().user_id == utils::localUser()
+ ? members.back()
+ : members.front();
+ auto dialog =
+ new dialogs::PlaceCall(callee.user_id,
+ callee.display_name,
+ QString::fromStdString(roomInfo.name),
+ QString::fromStdString(roomInfo.avatar_url),
+ ChatPage::instance()->userSettings(),
+ MainWindow::instance());
+ connect(dialog,
+ &dialogs::PlaceCall::voice,
+ callManager_,
+ [callManager_, current_room_]() {
+ callManager_->sendInvite(current_room_, false);
+ });
+ connect(dialog,
+ &dialogs::PlaceCall::video,
+ callManager_,
+ [callManager_, current_room_]() {
+ callManager_->sendInvite(current_room_, true);
+ });
+ utils::centerWidget(dialog, MainWindow::instance());
+ dialog->show();
+ }
+ }
+}
|