Move calls to new input bar
This commit is contained in:
parent
a31d3d0816
commit
d1af1a8669
@ -17,14 +17,18 @@ Rectangle {
|
|||||||
spacing: 16
|
spacing: 16
|
||||||
|
|
||||||
ImageButton {
|
ImageButton {
|
||||||
|
visible: TimelineManager.callsSupported
|
||||||
Layout.alignment: Qt.AlignBottom
|
Layout.alignment: Qt.AlignBottom
|
||||||
hoverEnabled: true
|
hoverEnabled: true
|
||||||
width: 22
|
width: 22
|
||||||
height: 22
|
height: 22
|
||||||
image: ":/icons/icons/ui/place-call.png"
|
image: TimelineManager.isOnCall ? ":/icons/icons/ui/end-call.png" : ":/icons/icons/ui/place-call.png"
|
||||||
|
ToolTip.visible: hovered
|
||||||
|
ToolTip.text: TimelineManager.isOnCall ? qsTr("Hang up") : qsTr("Place a call")
|
||||||
Layout.topMargin: 8
|
Layout.topMargin: 8
|
||||||
Layout.bottomMargin: 8
|
Layout.bottomMargin: 8
|
||||||
Layout.leftMargin: 16
|
Layout.leftMargin: 16
|
||||||
|
onClicked: TimelineManager.timeline.input.callButton()
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageButton {
|
ImageButton {
|
||||||
@ -35,7 +39,10 @@ Rectangle {
|
|||||||
image: ":/icons/icons/ui/paper-clip-outline.png"
|
image: ":/icons/icons/ui/paper-clip-outline.png"
|
||||||
Layout.topMargin: 8
|
Layout.topMargin: 8
|
||||||
Layout.bottomMargin: 8
|
Layout.bottomMargin: 8
|
||||||
|
Layout.leftMargin: TimelineManager.callsSupported ? 0 : 16
|
||||||
onClicked: TimelineManager.timeline.input.openFileSelection()
|
onClicked: TimelineManager.timeline.input.openFileSelection()
|
||||||
|
ToolTip.visible: hovered
|
||||||
|
ToolTip.text: qsTr("Send a file")
|
||||||
|
|
||||||
Rectangle {
|
Rectangle {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
@ -112,6 +119,8 @@ Rectangle {
|
|||||||
image: ":/icons/icons/ui/smile.png"
|
image: ":/icons/icons/ui/smile.png"
|
||||||
Layout.topMargin: 8
|
Layout.topMargin: 8
|
||||||
Layout.bottomMargin: 8
|
Layout.bottomMargin: 8
|
||||||
|
ToolTip.visible: hovered
|
||||||
|
ToolTip.text: qsTr("Emoji")
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageButton {
|
ImageButton {
|
||||||
@ -123,6 +132,8 @@ Rectangle {
|
|||||||
Layout.topMargin: 8
|
Layout.topMargin: 8
|
||||||
Layout.bottomMargin: 8
|
Layout.bottomMargin: 8
|
||||||
Layout.rightMargin: 16
|
Layout.rightMargin: 16
|
||||||
|
ToolTip.visible: hovered
|
||||||
|
ToolTip.text: qsTr("Send")
|
||||||
onClicked: {
|
onClicked: {
|
||||||
TimelineManager.timeline.input.send();
|
TimelineManager.timeline.input.send();
|
||||||
textArea.clear();
|
textArea.clear();
|
||||||
|
@ -6,8 +6,8 @@ BusyIndicator {
|
|||||||
id: control
|
id: control
|
||||||
|
|
||||||
contentItem: Item {
|
contentItem: Item {
|
||||||
implicitWidth: Math.min(parent.height, parent.width)
|
implicitWidth: 64
|
||||||
implicitHeight: implicitWidth
|
implicitHeight: 64
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: item
|
id: item
|
||||||
|
@ -268,38 +268,6 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
|
|||||||
this,
|
this,
|
||||||
SIGNAL(unreadMessages(int)));
|
SIGNAL(unreadMessages(int)));
|
||||||
|
|
||||||
connect(text_input_, &TextInputWidget::callButtonPress, this, [this]() {
|
|
||||||
if (callManager_->onActiveCall()) {
|
|
||||||
callManager_->hangUp();
|
|
||||||
} else {
|
|
||||||
if (auto roomInfo = cache::singleRoomInfo(current_room_.toStdString());
|
|
||||||
roomInfo.member_count != 2) {
|
|
||||||
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),
|
|
||||||
userSettings_,
|
|
||||||
MainWindow::instance());
|
|
||||||
connect(dialog, &dialogs::PlaceCall::voice, this, [this]() {
|
|
||||||
callManager_->sendInvite(current_room_, false);
|
|
||||||
});
|
|
||||||
connect(dialog, &dialogs::PlaceCall::video, this, [this]() {
|
|
||||||
callManager_->sendInvite(current_room_, true);
|
|
||||||
});
|
|
||||||
utils::centerWidget(dialog, MainWindow::instance());
|
|
||||||
dialog->show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
connect(
|
connect(
|
||||||
this, &ChatPage::updateGroupsInfo, communitiesList_, &CommunitiesList::setCommunities);
|
this, &ChatPage::updateGroupsInfo, communitiesList_, &CommunitiesList::setCommunities);
|
||||||
|
|
||||||
|
@ -88,6 +88,7 @@ public:
|
|||||||
static ChatPage *instance() { return instance_; }
|
static ChatPage *instance() { return instance_; }
|
||||||
|
|
||||||
QSharedPointer<UserSettings> userSettings() { return userSettings_; }
|
QSharedPointer<UserSettings> userSettings() { return userSettings_; }
|
||||||
|
CallManager *callManager() { return callManager_; }
|
||||||
void deleteConfigs();
|
void deleteConfigs();
|
||||||
|
|
||||||
CommunitiesList *communitiesList() { return communitiesList_; }
|
CommunitiesList *communitiesList() { return communitiesList_; }
|
||||||
|
@ -431,15 +431,6 @@ TextInputWidget::TextInputWidget(QWidget *parent)
|
|||||||
topLayout_->setSpacing(0);
|
topLayout_->setSpacing(0);
|
||||||
topLayout_->setContentsMargins(13, 1, 13, 0);
|
topLayout_->setContentsMargins(13, 1, 13, 0);
|
||||||
|
|
||||||
#ifdef GSTREAMER_AVAILABLE
|
|
||||||
callBtn_ = new FlatButton(this);
|
|
||||||
changeCallButtonState(webrtc::State::DISCONNECTED);
|
|
||||||
connect(&WebRTCSession::instance(),
|
|
||||||
&WebRTCSession::stateChanged,
|
|
||||||
this,
|
|
||||||
&TextInputWidget::changeCallButtonState);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QIcon send_file_icon;
|
QIcon send_file_icon;
|
||||||
send_file_icon.addFile(":/icons/icons/ui/paper-clip-outline.png");
|
send_file_icon.addFile(":/icons/icons/ui/paper-clip-outline.png");
|
||||||
|
|
||||||
@ -508,9 +499,6 @@ TextInputWidget::TextInputWidget(QWidget *parent)
|
|||||||
emojiBtn_->setIcon(emoji_icon);
|
emojiBtn_->setIcon(emoji_icon);
|
||||||
emojiBtn_->setIconSize(QSize(ButtonHeight, ButtonHeight));
|
emojiBtn_->setIconSize(QSize(ButtonHeight, ButtonHeight));
|
||||||
|
|
||||||
#ifdef GSTREAMER_AVAILABLE
|
|
||||||
topLayout_->addWidget(callBtn_);
|
|
||||||
#endif
|
|
||||||
topLayout_->addWidget(sendFileBtn_);
|
topLayout_->addWidget(sendFileBtn_);
|
||||||
topLayout_->addWidget(input_);
|
topLayout_->addWidget(input_);
|
||||||
topLayout_->addWidget(emojiBtn_);
|
topLayout_->addWidget(emojiBtn_);
|
||||||
@ -518,9 +506,6 @@ TextInputWidget::TextInputWidget(QWidget *parent)
|
|||||||
|
|
||||||
setLayout(topLayout_);
|
setLayout(topLayout_);
|
||||||
|
|
||||||
#ifdef GSTREAMER_AVAILABLE
|
|
||||||
connect(callBtn_, &FlatButton::clicked, this, &TextInputWidget::callButtonPress);
|
|
||||||
#endif
|
|
||||||
connect(sendMessageBtn_, &FlatButton::clicked, input_, &FilteredTextEdit::submit);
|
connect(sendMessageBtn_, &FlatButton::clicked, input_, &FilteredTextEdit::submit);
|
||||||
connect(sendFileBtn_, SIGNAL(clicked()), this, SLOT(openFileSelection()));
|
connect(sendFileBtn_, SIGNAL(clicked()), this, SLOT(openFileSelection()));
|
||||||
connect(emojiBtn_,
|
connect(emojiBtn_,
|
||||||
@ -570,18 +555,3 @@ TextInputWidget::paintEvent(QPaintEvent *)
|
|||||||
|
|
||||||
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
TextInputWidget::changeCallButtonState(webrtc::State state)
|
|
||||||
{
|
|
||||||
QIcon icon;
|
|
||||||
if (state == webrtc::State::ICEFAILED || state == webrtc::State::DISCONNECTED) {
|
|
||||||
callBtn_->setToolTip(tr("Place a call"));
|
|
||||||
icon.addFile(":/icons/icons/ui/place-call.png");
|
|
||||||
} else {
|
|
||||||
callBtn_->setToolTip(tr("Hang up"));
|
|
||||||
icon.addFile(":/icons/icons/ui/end-call.png");
|
|
||||||
}
|
|
||||||
callBtn_->setIcon(icon);
|
|
||||||
callBtn_->setIconSize(QSize(ButtonHeight * 1.1, ButtonHeight * 1.1));
|
|
||||||
}
|
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
#include <QTextEdit>
|
#include <QTextEdit>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
#include "WebRTCSession.h"
|
|
||||||
#include "dialogs/PreviewUploadOverlay.h"
|
#include "dialogs/PreviewUploadOverlay.h"
|
||||||
#include "emoji/PickButton.h"
|
#include "emoji/PickButton.h"
|
||||||
#include "popups/SuggestionsPopup.h"
|
#include "popups/SuggestionsPopup.h"
|
||||||
@ -155,7 +154,6 @@ public:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void focusLineEdit() { input_->setFocus(); }
|
void focusLineEdit() { input_->setFocus(); }
|
||||||
void changeCallButtonState(webrtc::State);
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void addSelectedEmoji(const QString &emoji);
|
void addSelectedEmoji(const QString &emoji);
|
||||||
@ -163,8 +161,6 @@ private slots:
|
|||||||
signals:
|
signals:
|
||||||
void heightChanged(int height);
|
void heightChanged(int height);
|
||||||
|
|
||||||
void callButtonPress();
|
|
||||||
|
|
||||||
void sendJoinRoomRequest(const QString &room);
|
void sendJoinRoomRequest(const QString &room);
|
||||||
void sendInviteRoomRequest(const QString &userid, const QString &reason);
|
void sendInviteRoomRequest(const QString &userid, const QString &reason);
|
||||||
void sendKickRoomRequest(const QString &userid, const QString &reason);
|
void sendKickRoomRequest(const QString &userid, const QString &reason);
|
||||||
@ -185,7 +181,6 @@ private:
|
|||||||
|
|
||||||
LoadingIndicator *spinner_;
|
LoadingIndicator *spinner_;
|
||||||
|
|
||||||
FlatButton *callBtn_;
|
|
||||||
FlatButton *sendFileBtn_;
|
FlatButton *sendFileBtn_;
|
||||||
FlatButton *sendMessageBtn_;
|
FlatButton *sendMessageBtn_;
|
||||||
emoji::PickButton *emojiBtn_;
|
emoji::PickButton *emojiBtn_;
|
||||||
|
@ -12,13 +12,16 @@
|
|||||||
#include <mtx/responses/media.hpp>
|
#include <mtx/responses/media.hpp>
|
||||||
|
|
||||||
#include "Cache.h"
|
#include "Cache.h"
|
||||||
|
#include "CallManager.h"
|
||||||
#include "ChatPage.h"
|
#include "ChatPage.h"
|
||||||
#include "Logging.h"
|
#include "Logging.h"
|
||||||
|
#include "MainWindow.h"
|
||||||
#include "MatrixClient.h"
|
#include "MatrixClient.h"
|
||||||
#include "Olm.h"
|
#include "Olm.h"
|
||||||
#include "TimelineModel.h"
|
#include "TimelineModel.h"
|
||||||
#include "UserSettingsPage.h"
|
#include "UserSettingsPage.h"
|
||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
|
#include "dialogs/PlaceCall.h"
|
||||||
#include "dialogs/PreviewUploadOverlay.h"
|
#include "dialogs/PreviewUploadOverlay.h"
|
||||||
|
|
||||||
#include "blurhash.hpp"
|
#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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -27,6 +27,7 @@ public slots:
|
|||||||
void updateState(int selectionStart, int selectionEnd, int cursorPosition, QString text);
|
void updateState(int selectionStart, int selectionEnd, int cursorPosition, QString text);
|
||||||
void openFileSelection();
|
void openFileSelection();
|
||||||
bool uploading() const { return uploading_; }
|
bool uploading() const { return uploading_; }
|
||||||
|
void callButton();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void insertText(QString text);
|
void insertText(QString text);
|
||||||
|
@ -244,6 +244,26 @@ TimelineViewManager::TimelineViewManager(CallManager *callManager, ChatPage *par
|
|||||||
&CallManager::newVideoCallState,
|
&CallManager::newVideoCallState,
|
||||||
this,
|
this,
|
||||||
&TimelineViewManager::videoCallChanged);
|
&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
|
void
|
||||||
@ -506,122 +526,6 @@ TimelineViewManager::queueReactionMessage(const QString &reactedEvent, const QSt
|
|||||||
timeline_->redactEvent(selfReactedEvent);
|
timeline_->redactEvent(selfReactedEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
TimelineViewManager::queueImageMessage(const QString &roomid,
|
|
||||||
const QString &filename,
|
|
||||||
const std::optional<mtx::crypto::EncryptedFile> &file,
|
|
||||||
const QString &url,
|
|
||||||
const QString &mime,
|
|
||||||
uint64_t dsize,
|
|
||||||
const QSize &dimensions,
|
|
||||||
const QString &blurhash)
|
|
||||||
{
|
|
||||||
mtx::events::msg::Image image;
|
|
||||||
image.info.mimetype = mime.toStdString();
|
|
||||||
image.info.size = dsize;
|
|
||||||
image.info.blurhash = blurhash.toStdString();
|
|
||||||
image.body = filename.toStdString();
|
|
||||||
image.info.h = dimensions.height();
|
|
||||||
image.info.w = dimensions.width();
|
|
||||||
|
|
||||||
if (file)
|
|
||||||
image.file = file;
|
|
||||||
else
|
|
||||||
image.url = url.toStdString();
|
|
||||||
|
|
||||||
auto model = models.value(roomid);
|
|
||||||
if (!model->reply().isEmpty()) {
|
|
||||||
image.relates_to.in_reply_to.event_id = model->reply().toStdString();
|
|
||||||
model->resetReply();
|
|
||||||
}
|
|
||||||
|
|
||||||
model->sendMessageEvent(image, mtx::events::EventType::RoomMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TimelineViewManager::queueFileMessage(
|
|
||||||
const QString &roomid,
|
|
||||||
const QString &filename,
|
|
||||||
const std::optional<mtx::crypto::EncryptedFile> &encryptedFile,
|
|
||||||
const QString &url,
|
|
||||||
const QString &mime,
|
|
||||||
uint64_t dsize)
|
|
||||||
{
|
|
||||||
mtx::events::msg::File file;
|
|
||||||
file.info.mimetype = mime.toStdString();
|
|
||||||
file.info.size = dsize;
|
|
||||||
file.body = filename.toStdString();
|
|
||||||
|
|
||||||
if (encryptedFile)
|
|
||||||
file.file = encryptedFile;
|
|
||||||
else
|
|
||||||
file.url = url.toStdString();
|
|
||||||
|
|
||||||
auto model = models.value(roomid);
|
|
||||||
if (!model->reply().isEmpty()) {
|
|
||||||
file.relates_to.in_reply_to.event_id = model->reply().toStdString();
|
|
||||||
model->resetReply();
|
|
||||||
}
|
|
||||||
|
|
||||||
model->sendMessageEvent(file, mtx::events::EventType::RoomMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TimelineViewManager::queueAudioMessage(const QString &roomid,
|
|
||||||
const QString &filename,
|
|
||||||
const std::optional<mtx::crypto::EncryptedFile> &file,
|
|
||||||
const QString &url,
|
|
||||||
const QString &mime,
|
|
||||||
uint64_t dsize)
|
|
||||||
{
|
|
||||||
mtx::events::msg::Audio audio;
|
|
||||||
audio.info.mimetype = mime.toStdString();
|
|
||||||
audio.info.size = dsize;
|
|
||||||
audio.body = filename.toStdString();
|
|
||||||
audio.url = url.toStdString();
|
|
||||||
|
|
||||||
if (file)
|
|
||||||
audio.file = file;
|
|
||||||
else
|
|
||||||
audio.url = url.toStdString();
|
|
||||||
|
|
||||||
auto model = models.value(roomid);
|
|
||||||
if (!model->reply().isEmpty()) {
|
|
||||||
audio.relates_to.in_reply_to.event_id = model->reply().toStdString();
|
|
||||||
model->resetReply();
|
|
||||||
}
|
|
||||||
|
|
||||||
model->sendMessageEvent(audio, mtx::events::EventType::RoomMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
TimelineViewManager::queueVideoMessage(const QString &roomid,
|
|
||||||
const QString &filename,
|
|
||||||
const std::optional<mtx::crypto::EncryptedFile> &file,
|
|
||||||
const QString &url,
|
|
||||||
const QString &mime,
|
|
||||||
uint64_t dsize)
|
|
||||||
{
|
|
||||||
mtx::events::msg::Video video;
|
|
||||||
video.info.mimetype = mime.toStdString();
|
|
||||||
video.info.size = dsize;
|
|
||||||
video.body = filename.toStdString();
|
|
||||||
|
|
||||||
if (file)
|
|
||||||
video.file = file;
|
|
||||||
else
|
|
||||||
video.url = url.toStdString();
|
|
||||||
|
|
||||||
auto model = models.value(roomid);
|
|
||||||
if (!model->reply().isEmpty()) {
|
|
||||||
video.relates_to.in_reply_to.event_id = model->reply().toStdString();
|
|
||||||
model->resetReply();
|
|
||||||
}
|
|
||||||
|
|
||||||
model->sendMessageEvent(video, mtx::events::EventType::RoomMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TimelineViewManager::queueCallMessage(const QString &roomid,
|
TimelineViewManager::queueCallMessage(const QString &roomid,
|
||||||
const mtx::events::msg::CallInvite &callInvite)
|
const mtx::events::msg::CallInvite &callInvite)
|
||||||
|
@ -41,6 +41,8 @@ class TimelineViewManager : public QObject
|
|||||||
Q_PROPERTY(QString callPartyName READ callPartyName NOTIFY callPartyChanged)
|
Q_PROPERTY(QString callPartyName READ callPartyName NOTIFY callPartyChanged)
|
||||||
Q_PROPERTY(QString callPartyAvatarUrl READ callPartyAvatarUrl NOTIFY callPartyChanged)
|
Q_PROPERTY(QString callPartyAvatarUrl READ callPartyAvatarUrl NOTIFY callPartyChanged)
|
||||||
Q_PROPERTY(bool isMicMuted READ isMicMuted NOTIFY micMuteChanged)
|
Q_PROPERTY(bool isMicMuted READ isMicMuted NOTIFY micMuteChanged)
|
||||||
|
Q_PROPERTY(bool isOnCall READ isOnCall NOTIFY onCallChanged)
|
||||||
|
Q_PROPERTY(bool callsSupported READ callsSupported CONSTANT)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TimelineViewManager(CallManager *callManager, ChatPage *parent = nullptr);
|
TimelineViewManager(CallManager *callManager, ChatPage *parent = nullptr);
|
||||||
@ -95,6 +97,7 @@ signals:
|
|||||||
void videoCallChanged();
|
void videoCallChanged();
|
||||||
void callPartyChanged();
|
void callPartyChanged();
|
||||||
void micMuteChanged();
|
void micMuteChanged();
|
||||||
|
void onCallChanged();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids);
|
void updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids);
|
||||||
@ -104,38 +107,14 @@ public slots:
|
|||||||
void setHistoryView(const QString &room_id);
|
void setHistoryView(const QString &room_id);
|
||||||
void updateColorPalette();
|
void updateColorPalette();
|
||||||
void queueReactionMessage(const QString &reactedEvent, const QString &reactionKey);
|
void queueReactionMessage(const QString &reactedEvent, const QString &reactionKey);
|
||||||
void queueImageMessage(const QString &roomid,
|
|
||||||
const QString &filename,
|
|
||||||
const std::optional<mtx::crypto::EncryptedFile> &file,
|
|
||||||
const QString &url,
|
|
||||||
const QString &mime,
|
|
||||||
uint64_t dsize,
|
|
||||||
const QSize &dimensions,
|
|
||||||
const QString &blurhash);
|
|
||||||
void queueFileMessage(const QString &roomid,
|
|
||||||
const QString &filename,
|
|
||||||
const std::optional<mtx::crypto::EncryptedFile> &file,
|
|
||||||
const QString &url,
|
|
||||||
const QString &mime,
|
|
||||||
uint64_t dsize);
|
|
||||||
void queueAudioMessage(const QString &roomid,
|
|
||||||
const QString &filename,
|
|
||||||
const std::optional<mtx::crypto::EncryptedFile> &file,
|
|
||||||
const QString &url,
|
|
||||||
const QString &mime,
|
|
||||||
uint64_t dsize);
|
|
||||||
void queueVideoMessage(const QString &roomid,
|
|
||||||
const QString &filename,
|
|
||||||
const std::optional<mtx::crypto::EncryptedFile> &file,
|
|
||||||
const QString &url,
|
|
||||||
const QString &mime,
|
|
||||||
uint64_t dsize);
|
|
||||||
void queueCallMessage(const QString &roomid, const mtx::events::msg::CallInvite &);
|
void queueCallMessage(const QString &roomid, const mtx::events::msg::CallInvite &);
|
||||||
void queueCallMessage(const QString &roomid, const mtx::events::msg::CallCandidates &);
|
void queueCallMessage(const QString &roomid, const mtx::events::msg::CallCandidates &);
|
||||||
void queueCallMessage(const QString &roomid, const mtx::events::msg::CallAnswer &);
|
void queueCallMessage(const QString &roomid, const mtx::events::msg::CallAnswer &);
|
||||||
void queueCallMessage(const QString &roomid, const mtx::events::msg::CallHangUp &);
|
void queueCallMessage(const QString &roomid, const mtx::events::msg::CallHangUp &);
|
||||||
|
|
||||||
void updateEncryptedDescriptions();
|
void updateEncryptedDescriptions();
|
||||||
|
bool isOnCall() const;
|
||||||
|
bool callsSupported() const;
|
||||||
|
|
||||||
void enableBackButton()
|
void enableBackButton()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user