summary refs log tree commit diff
path: root/src/ChatPage.cpp
diff options
context:
space:
mode:
authorJoseph Donofry <joedonofry@gmail.com>2020-06-11 22:28:44 -0400
committerGitHub <noreply@github.com>2020-06-11 22:28:44 -0400
commit21dfb3c0b9fb760391ff76f39a81889db94d50e3 (patch)
treefa33fb0a8be883401da6bc90054be31a42df4db0 /src/ChatPage.cpp
parentMerge pull request #217 from Nheko-Reborn/reactions (diff)
parentMerge branch origin/master and update translations (diff)
downloadnheko-21dfb3c0b9fb760391ff76f39a81889db94d50e3.tar.xz
Merge pull request #216 from Nheko-Reborn/presence
Presence support
Diffstat (limited to 'src/ChatPage.cpp')
-rw-r--r--src/ChatPage.cpp40
1 files changed, 39 insertions, 1 deletions
diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp

index 0ca20c52..3b8af33a 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp
@@ -61,6 +61,7 @@ constexpr size_t MAX_ONETIME_KEYS = 50; Q_DECLARE_METATYPE(std::optional<mtx::crypto::EncryptedFile>) Q_DECLARE_METATYPE(std::optional<RelatedInfo>) +Q_DECLARE_METATYPE(mtx::presence::PresenceState) ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) : QWidget(parent) @@ -72,6 +73,7 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) qRegisterMetaType<std::optional<mtx::crypto::EncryptedFile>>(); qRegisterMetaType<std::optional<RelatedInfo>>(); + qRegisterMetaType<mtx::presence::PresenceState>(); topLayout_ = new QHBoxLayout(this); topLayout_->setSpacing(0); @@ -990,7 +992,9 @@ ChatPage::startInitialSync() nhlog::net()->info("trying initial sync"); mtx::http::SyncOpts opts; - opts.timeout = 0; + opts.timeout = 0; + opts.set_presence = currentPresence(); + http::client()->sync( opts, std::bind( @@ -1001,6 +1005,7 @@ void ChatPage::trySync() { mtx::http::SyncOpts opts; + opts.set_presence = currentPresence(); if (!connectivityTimer_.isActive()) connectivityTimer_.start(); @@ -1228,6 +1233,39 @@ ChatPage::sendTypingNotifications() }); } +QString +ChatPage::status() const +{ + return QString::fromStdString(cache::statusMessage(utils::localUser().toStdString())); +} + +void +ChatPage::setStatus(const QString &status) +{ + http::client()->put_presence_status( + currentPresence(), status.toStdString(), [](mtx::http::RequestErr err) { + if (err) { + nhlog::net()->warn("failed to set presence status_msg: {}", + err->matrix_error.error); + } + }); +} + +mtx::presence::PresenceState +ChatPage::currentPresence() const +{ + switch (userSettings_->presence()) { + case UserSettings::Presence::Online: + return mtx::presence::online; + case UserSettings::Presence::Unavailable: + return mtx::presence::unavailable; + case UserSettings::Presence::Offline: + return mtx::presence::offline; + default: + return mtx::presence::online; + } +} + void ChatPage::initialSyncHandler(const mtx::responses::Sync &res, mtx::http::RequestErr err) {