diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 975dd5fb..466c3cee 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -1,10 +1,13 @@
#include "TimelineViewManager.h"
+#include <QDesktopServices>
#include <QMetaType>
#include <QPalette>
#include <QQmlContext>
+#include <QString>
#include "BlurhashProvider.h"
+#include "CallManager.h"
#include "ChatPage.h"
#include "ColorImageProvider.h"
#include "DelegateChooser.h"
@@ -71,10 +74,13 @@ TimelineViewManager::userStatus(QString id) const
return QString::fromStdString(cache::statusMessage(id.toStdString()));
}
-TimelineViewManager::TimelineViewManager(QSharedPointer<UserSettings> userSettings, QWidget *parent)
+TimelineViewManager::TimelineViewManager(QSharedPointer<UserSettings> userSettings,
+ CallManager *callManager,
+ QWidget *parent)
: imgProvider(new MxcImageProvider())
, colorImgProvider(new ColorImageProvider())
, blurhashProvider(new BlurhashProvider())
+ , callManager_(callManager)
, settings(userSettings)
{
qmlRegisterUncreatableMetaObject(qml_mtx_events::staticMetaObject,
@@ -133,6 +139,10 @@ TimelineViewManager::TimelineViewManager(QSharedPointer<UserSettings> userSettin
&ChatPage::decryptSidebarChanged,
this,
&TimelineViewManager::updateEncryptedDescriptions);
+ connect(dynamic_cast<ChatPage *>(parent), &ChatPage::loggedOut, this, [this]() {
+ isInitialSync_ = true;
+ emit initialSyncChanged(true);
+ });
}
void
@@ -142,7 +152,17 @@ TimelineViewManager::sync(const mtx::responses::Rooms &rooms)
// addRoom will only add the room, if it doesn't exist
addRoom(QString::fromStdString(room_id));
const auto &room_model = models.value(QString::fromStdString(room_id));
+ if (!isInitialSync_)
+ connect(room_model.data(),
+ &TimelineModel::newCallEvent,
+ callManager_,
+ &CallManager::syncEvent);
room_model->addEvents(room.timeline);
+ if (!isInitialSync_)
+ disconnect(room_model.data(),
+ &TimelineModel::newCallEvent,
+ callManager_,
+ &CallManager::syncEvent);
if (ChatPage::instance()->userSettings()->typingNotifications()) {
std::vector<QString> typing;
@@ -220,6 +240,12 @@ TimelineViewManager::openImageOverlay(QString mxcUrl, QString eventId) const
}
void
+TimelineViewManager::openLink(QString link) const
+{
+ QDesktopServices::openUrl(link);
+}
+
+void
TimelineViewManager::updateReadReceipts(const QString &room_id,
const std::vector<QString> &event_ids)
{
@@ -288,7 +314,7 @@ TimelineViewManager::queueTextMessage(const QString &msg)
timeline_->resetReply();
}
- timeline_->sendMessage(text);
+ timeline_->sendMessageEvent(text, mtx::events::EventType::RoomMessage);
}
void
@@ -310,7 +336,7 @@ TimelineViewManager::queueEmoteMessage(const QString &msg)
}
if (timeline_)
- timeline_->sendMessage(emote);
+ timeline_->sendMessageEvent(emote, mtx::events::EventType::RoomMessage);
}
void
@@ -339,7 +365,7 @@ TimelineViewManager::queueReactionMessage(const QString &reactedEvent, const QSt
reaction.relates_to.event_id = reactedEvent.toStdString();
reaction.relates_to.key = reactionKey.toStdString();
- timeline_->sendMessage(reaction);
+ timeline_->sendMessageEvent(reaction, mtx::events::EventType::Reaction);
// Otherwise, we have previously reacted and the reaction should be redacted
} else {
timeline_->redactEvent(selfReactedEvent);
@@ -375,7 +401,7 @@ TimelineViewManager::queueImageMessage(const QString &roomid,
model->resetReply();
}
- model->sendMessage(image);
+ model->sendMessageEvent(image, mtx::events::EventType::RoomMessage);
}
void
@@ -403,7 +429,7 @@ TimelineViewManager::queueFileMessage(
model->resetReply();
}
- model->sendMessage(file);
+ model->sendMessageEvent(file, mtx::events::EventType::RoomMessage);
}
void
@@ -431,7 +457,7 @@ TimelineViewManager::queueAudioMessage(const QString &roomid,
model->resetReply();
}
- model->sendMessage(audio);
+ model->sendMessageEvent(audio, mtx::events::EventType::RoomMessage);
}
void
@@ -458,5 +484,34 @@ TimelineViewManager::queueVideoMessage(const QString &roomid,
model->resetReply();
}
- model->sendMessage(video);
+ model->sendMessageEvent(video, mtx::events::EventType::RoomMessage);
+}
+
+void
+TimelineViewManager::queueCallMessage(const QString &roomid,
+ const mtx::events::msg::CallInvite &callInvite)
+{
+ models.value(roomid)->sendMessageEvent(callInvite, mtx::events::EventType::CallInvite);
+}
+
+void
+TimelineViewManager::queueCallMessage(const QString &roomid,
+ const mtx::events::msg::CallCandidates &callCandidates)
+{
+ models.value(roomid)->sendMessageEvent(callCandidates,
+ mtx::events::EventType::CallCandidates);
+}
+
+void
+TimelineViewManager::queueCallMessage(const QString &roomid,
+ const mtx::events::msg::CallAnswer &callAnswer)
+{
+ models.value(roomid)->sendMessageEvent(callAnswer, mtx::events::EventType::CallAnswer);
+}
+
+void
+TimelineViewManager::queueCallMessage(const QString &roomid,
+ const mtx::events::msg::CallHangUp &callHangUp)
+{
+ models.value(roomid)->sendMessageEvent(callHangUp, mtx::events::EventType::CallHangUp);
}
|