summary refs log tree commit diff
path: root/src/timeline
diff options
context:
space:
mode:
authorJoseph Donofry <joedonofry@gmail.com>2021-01-11 17:51:39 -0500
committerJoseph Donofry <joedonofry@gmail.com>2021-01-11 17:51:39 -0500
commit3ff8b3ad8c015d45a515ca381691cae43fc32a00 (patch)
treeedec1d1e7926d9c0e0beb68ca604cc6bcdc1ebf6 /src/timeline
parentAdd Ripple effects to qml buttons and avatar (diff)
parentMerge pull request #372 from deepbluev7/fix-pr-CI (diff)
downloadnheko-3ff8b3ad8c015d45a515ca381691cae43fc32a00.tar.xz
Merge master and fix conflicts
Diffstat (limited to 'src/timeline')
-rw-r--r--src/timeline/InputBar.cpp44
-rw-r--r--src/timeline/InputBar.h3
-rw-r--r--src/timeline/TimelineModel.cpp9
-rw-r--r--src/timeline/TimelineViewManager.cpp78
-rw-r--r--src/timeline/TimelineViewManager.h26
5 files changed, 42 insertions, 118 deletions
diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp

index 5cbc33e0..3cddd613 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp
@@ -13,7 +13,6 @@ #include <mtx/responses/media.hpp> #include "Cache.h" -#include "CallManager.h" #include "ChatPage.h" #include "CompletionProxyModel.h" #include "Logging.h" @@ -25,7 +24,6 @@ #include "UserSettingsPage.h" #include "UsersModel.h" #include "Utils.h" -#include "dialogs/PlaceCall.h" #include "dialogs/PreviewUploadOverlay.h" #include "emoji/EmojiModel.h" @@ -594,48 +592,6 @@ 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(); - } - } -} - -void InputBar::startTyping() { if (!typingRefresh_.isActive()) { diff --git a/src/timeline/InputBar.h b/src/timeline/InputBar.h
index 27aa4bc3..c729a6fc 100644 --- a/src/timeline/InputBar.h +++ b/src/timeline/InputBar.h
@@ -41,7 +41,7 @@ public slots: void updateState(int selectionStart, int selectionEnd, int cursorPosition, QString text); void openFileSelection(); bool uploading() const { return uploading_; } - void callButton(); + void message(QString body); QObject *completerFor(QString completerName); @@ -54,7 +54,6 @@ signals: void uploadingChanged(bool value); private: - void message(QString body); void emote(QString body); void command(QString name, QString args); void image(const QString &filename, diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index adef886d..852f584d 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp
@@ -613,8 +613,15 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline) std::visit( [this](auto &event) { event.room_id = room_id_.toStdString(); - if (event.sender != http::client()->user_id().to_string()) + if constexpr (std::is_same_v<std::decay_t<decltype(event)>, + RoomEvent<msg::CallAnswer>> || + std::is_same_v<std::decay_t<decltype(event)>, + RoomEvent<msg::CallHangUp>>) emit newCallEvent(event); + else { + if (event.sender != http::client()->user_id().to_string()) + emit newCallEvent(event); + } }, e); else if (std::holds_alternative<StateEvent<state::Avatar>>(e)) diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 03eb53fc..97af0065 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp
@@ -136,6 +136,10 @@ TimelineViewManager::TimelineViewManager(CallManager *callManager, ChatPage *par "im.nheko", 1, 0, "Settings", [](QQmlEngine *, QJSEngine *) -> QObject * { return ChatPage::instance()->userSettings().data(); }); + qmlRegisterSingletonType<CallManager>( + "im.nheko", 1, 0, "CallManager", [](QQmlEngine *, QJSEngine *) -> QObject * { + return ChatPage::instance()->callManager(); + }); qRegisterMetaType<mtx::events::collections::TimelineEvents>(); qRegisterMetaType<std::vector<DeviceInfo>>(); @@ -237,36 +241,6 @@ TimelineViewManager::TimelineViewManager(CallManager *callManager, ChatPage *par isInitialSync_ = true; emit initialSyncChanged(true); }); - connect(&WebRTCSession::instance(), - &WebRTCSession::stateChanged, - this, - &TimelineViewManager::callStateChanged); - connect( - callManager_, &CallManager::newCallParty, this, &TimelineViewManager::callPartyChanged); - connect(callManager_, - &CallManager::newVideoCallState, - this, - &TimelineViewManager::videoCallChanged); - - connect(&WebRTCSession::instance(), - &WebRTCSession::stateChanged, - this, - &TimelineViewManager::onCallChanged); -} - -bool -TimelineViewManager::isOnCall() const -{ - return callManager_->onActiveCall(); -} -bool -TimelineViewManager::callsSupported() const -{ -#ifdef GSTREAMER_AVAILABLE - return true; -#else - return false; -#endif } void @@ -297,13 +271,20 @@ TimelineViewManager::sync(const mtx::responses::Rooms &rooms) &CallManager::syncEvent); if (ChatPage::instance()->userSettings()->typingNotifications()) { - std::vector<QString> typing; - typing.reserve(room.ephemeral.typing.size()); - for (const auto &user : room.ephemeral.typing) { - if (user != http::client()->user_id().to_string()) - typing.push_back(QString::fromStdString(user)); + for (const auto &ev : room.ephemeral.events) { + if (auto t = std::get_if< + mtx::events::EphemeralEvent<mtx::events::ephemeral::Typing>>( + &ev)) { + std::vector<QString> typing; + typing.reserve(t->content.user_ids.size()); + for (const auto &user : t->content.user_ids) { + if (user != http::client()->user_id().to_string()) + typing.push_back( + QString::fromStdString(user)); + } + room_model->updateTypingUsers(typing); + } } - room_model->updateTypingUsers(typing); } } @@ -348,19 +329,6 @@ TimelineViewManager::escapeEmoji(QString str) const } void -TimelineViewManager::toggleMicMute() -{ - WebRTCSession::instance().toggleMicMute(); - emit micMuteChanged(); -} - -void -TimelineViewManager::toggleCameraView() -{ - WebRTCSession::instance().toggleCameraView(); -} - -void TimelineViewManager::openImageOverlay(QString mxcUrl, QString eventId) const { if (mxcUrl.isEmpty()) { @@ -502,6 +470,18 @@ TimelineViewManager::initWithMessages(const std::vector<QString> &roomIds) } void +TimelineViewManager::queueReply(const QString &roomid, + const QString &repliedToEvent, + const QString &replyBody) +{ + auto room = models.find(roomid); + if (room != models.end()) { + room.value()->setReply(repliedToEvent); + room.value()->input()->message(replyBody); + } +} + +void TimelineViewManager::queueReactionMessage(const QString &reactedEvent, const QString &reactionKey) { if (!timeline_) diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h
index f346acf8..23a960b8 100644 --- a/src/timeline/TimelineViewManager.h +++ b/src/timeline/TimelineViewManager.h
@@ -36,13 +36,6 @@ class TimelineViewManager : public QObject bool isInitialSync MEMBER isInitialSync_ READ isInitialSync NOTIFY initialSyncChanged) Q_PROPERTY( bool isNarrowView MEMBER isNarrowView_ READ isNarrowView NOTIFY narrowViewChanged) - Q_PROPERTY(webrtc::State callState READ callState NOTIFY callStateChanged) - Q_PROPERTY(bool onVideoCall READ onVideoCall NOTIFY videoCallChanged) - Q_PROPERTY(QString callPartyName READ callPartyName NOTIFY callPartyChanged) - Q_PROPERTY(QString callPartyAvatarUrl READ callPartyAvatarUrl NOTIFY callPartyChanged) - Q_PROPERTY(bool isMicMuted READ isMicMuted NOTIFY micMuteChanged) - Q_PROPERTY(bool isOnCall READ isOnCall NOTIFY onCallChanged) - Q_PROPERTY(bool callsSupported READ callsSupported CONSTANT) public: TimelineViewManager(CallManager *callManager, ChatPage *parent = nullptr); @@ -61,14 +54,6 @@ public: Q_INVOKABLE TimelineModel *activeTimeline() const { return timeline_; } Q_INVOKABLE bool isInitialSync() const { return isInitialSync_; } bool isNarrowView() const { return isNarrowView_; } - webrtc::State callState() const { return WebRTCSession::instance().state(); } - bool onVideoCall() const { return WebRTCSession::instance().isVideo(); } - Q_INVOKABLE void setVideoCallItem(); - QString callPartyName() const { return callManager_->callPartyName(); } - QString callPartyAvatarUrl() const { return callManager_->callPartyAvatarUrl(); } - bool isMicMuted() const { return WebRTCSession::instance().isMicMuted(); } - Q_INVOKABLE void toggleMicMute(); - Q_INVOKABLE void toggleCameraView(); Q_INVOKABLE void openImageOverlay(QString mxcUrl, QString eventId) const; Q_INVOKABLE QColor userColor(QString id, QColor background); Q_INVOKABLE QString escapeEmoji(QString str) const; @@ -98,11 +83,6 @@ signals: void inviteUsers(QStringList users); void showRoomList(); void narrowViewChanged(); - void callStateChanged(webrtc::State); - void videoCallChanged(); - void callPartyChanged(); - void micMuteChanged(); - void onCallChanged(); public slots: void updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids); @@ -120,6 +100,9 @@ public slots: } void updateColorPalette(); + void queueReply(const QString &roomid, + const QString &repliedToEvent, + const QString &replyBody); void queueReactionMessage(const QString &reactedEvent, const QString &reactionKey); void queueCallMessage(const QString &roomid, const mtx::events::msg::CallInvite &); void queueCallMessage(const QString &roomid, const mtx::events::msg::CallCandidates &); @@ -127,8 +110,7 @@ public slots: void queueCallMessage(const QString &roomid, const mtx::events::msg::CallHangUp &); void updateEncryptedDescriptions(); - bool isOnCall() const; - bool callsSupported() const; + void setVideoCallItem(); void enableBackButton() {