diff --git a/src/Cache.cpp b/src/Cache.cpp
index 083dbe89..d3aec9db 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -17,6 +17,7 @@
#include <limits>
#include <stdexcept>
+#include <variant>
#include <QByteArray>
#include <QCoreApplication>
@@ -26,7 +27,6 @@
#include <QSettings>
#include <QStandardPaths>
-#include <boost/variant.hpp>
#include <mtx/responses/common.hpp>
#include "Cache.h"
@@ -395,7 +395,7 @@ Cache::saveOlmSession(const std::string &curve25519, mtx::crypto::OlmSessionPtr
txn.commit();
}
-boost::optional<mtx::crypto::OlmSessionPtr>
+std::optional<mtx::crypto::OlmSessionPtr>
Cache::getOlmSession(const std::string &curve25519, const std::string &session_id)
{
using namespace mtx::crypto;
@@ -413,7 +413,7 @@ Cache::getOlmSession(const std::string &curve25519, const std::string &session_i
return unpickle<SessionObject>(data, SECRET);
}
- return boost::none;
+ return std::nullopt;
}
std::vector<std::string>
@@ -967,8 +967,8 @@ Cache::saveState(const mtx::responses::Sync &res)
bool has_new_tags = false;
for (const auto &evt : room.second.account_data.events) {
// for now only fetch tag events
- if (evt.type() == typeid(Event<account_data::Tag>)) {
- auto tags_evt = boost::get<Event<account_data::Tag>>(evt);
+ if (std::holds_alternative<Event<account_data::Tag>>(evt)) {
+ auto tags_evt = std::get<Event<account_data::Tag>>(evt);
has_new_tags = true;
for (const auto &tag : tags_evt.content.tags) {
updatedInfo.tags.push_back(tag.first);
@@ -1049,19 +1049,17 @@ Cache::saveInvite(lmdb::txn &txn,
using namespace mtx::events::state;
for (const auto &e : room.invite_state) {
- if (boost::get<StrippedEvent<Member>>(&e) != nullptr) {
- auto msg = boost::get<StrippedEvent<Member>>(e);
+ if (auto msg = std::get_if<StrippedEvent<Member>>(&e)) {
+ auto display_name = msg->content.display_name.empty()
+ ? msg->state_key
+ : msg->content.display_name;
- auto display_name = msg.content.display_name.empty()
- ? msg.state_key
- : msg.content.display_name;
-
- MemberInfo tmp{display_name, msg.content.avatar_url};
+ MemberInfo tmp{display_name, msg->content.avatar_url};
lmdb::dbi_put(
- txn, membersdb, lmdb::val(msg.state_key), lmdb::val(json(tmp).dump()));
+ txn, membersdb, lmdb::val(msg->state_key), lmdb::val(json(tmp).dump()));
} else {
- boost::apply_visitor(
+ std::visit(
[&txn, &statesdb](auto msg) {
bool res = lmdb::dbi_put(txn,
statesdb,
@@ -1122,7 +1120,7 @@ Cache::roomsWithTagUpdates(const mtx::responses::Sync &res)
for (const auto &room : res.rooms.join) {
bool hasUpdates = false;
for (const auto &evt : room.second.account_data.events) {
- if (evt.type() == typeid(Event<account_data::Tag>)) {
+ if (std::holds_alternative<Event<account_data::Tag>>(evt)) {
hasUpdates = true;
}
}
@@ -1940,7 +1938,7 @@ Cache::saveTimelineMessages(lmdb::txn &txn,
if (isStateEvent(e))
continue;
- if (boost::get<RedactionEvent<msg::Redaction>>(&e) != nullptr)
+ if (std::holds_alternative<RedactionEvent<msg::Redaction>>(e))
continue;
json obj = json::object();
diff --git a/src/Cache.h b/src/Cache.h
index f5e1cfa0..878ac9ce 100644
--- a/src/Cache.h
+++ b/src/Cache.h
@@ -17,7 +17,8 @@
#pragma once
-#include <boost/optional.hpp>
+#include <mutex>
+#include <optional>
#include <QDateTime>
#include <QDir>
@@ -25,11 +26,11 @@
#include <QString>
#include <lmdb++.h>
+#include <nlohmann/json.hpp>
+
#include <mtx/events/join_rules.hpp>
#include <mtx/responses.hpp>
#include <mtxclient/crypto/client.hpp>
-#include <mutex>
-#include <nlohmann/json.hpp>
#include "Logging.h"
#include "MatrixClient.h"
@@ -453,8 +454,8 @@ public:
//
void saveOlmSession(const std::string &curve25519, mtx::crypto::OlmSessionPtr session);
std::vector<std::string> getOlmSessions(const std::string &curve25519);
- boost::optional<mtx::crypto::OlmSessionPtr> getOlmSession(const std::string &curve25519,
- const std::string &session_id);
+ std::optional<mtx::crypto::OlmSessionPtr> getOlmSession(const std::string &curve25519,
+ const std::string &session_id);
void saveOlmAccount(const std::string &pickled);
std::string restoreOlmAccount();
@@ -517,52 +518,50 @@ private:
using namespace mtx::events;
using namespace mtx::events::state;
- if (boost::get<StateEvent<Member>>(&event) != nullptr) {
- const auto e = boost::get<StateEvent<Member>>(event);
-
- switch (e.content.membership) {
+ if (auto e = std::get_if<StateEvent<Member>>(&event); e != nullptr) {
+ switch (e->content.membership) {
//
// We only keep users with invite or join membership.
//
case Membership::Invite:
case Membership::Join: {
- auto display_name = e.content.display_name.empty()
- ? e.state_key
- : e.content.display_name;
+ auto display_name = e->content.display_name.empty()
+ ? e->state_key
+ : e->content.display_name;
// Lightweight representation of a member.
- MemberInfo tmp{display_name, e.content.avatar_url};
+ MemberInfo tmp{display_name, e->content.avatar_url};
lmdb::dbi_put(txn,
membersdb,
- lmdb::val(e.state_key),
+ lmdb::val(e->state_key),
lmdb::val(json(tmp).dump()));
insertDisplayName(QString::fromStdString(room_id),
- QString::fromStdString(e.state_key),
+ QString::fromStdString(e->state_key),
QString::fromStdString(display_name));
insertAvatarUrl(QString::fromStdString(room_id),
- QString::fromStdString(e.state_key),
- QString::fromStdString(e.content.avatar_url));
+ QString::fromStdString(e->state_key),
+ QString::fromStdString(e->content.avatar_url));
break;
}
default: {
lmdb::dbi_del(
- txn, membersdb, lmdb::val(e.state_key), lmdb::val(""));
+ txn, membersdb, lmdb::val(e->state_key), lmdb::val(""));
removeDisplayName(QString::fromStdString(room_id),
- QString::fromStdString(e.state_key));
+ QString::fromStdString(e->state_key));
removeAvatarUrl(QString::fromStdString(room_id),
- QString::fromStdString(e.state_key));
+ QString::fromStdString(e->state_key));
break;
}
}
return;
- } else if (boost::get<StateEvent<Encryption>>(&event) != nullptr) {
+ } else if (std::holds_alternative<StateEvent<Encryption>>(event)) {
setEncryptedRoom(txn, room_id);
return;
}
@@ -570,7 +569,7 @@ private:
if (!isStateEvent(event))
return;
- boost::apply_visitor(
+ std::visit(
[&txn, &statesdb](auto e) {
lmdb::dbi_put(
txn, statesdb, lmdb::val(to_string(e.type)), lmdb::val(json(e).dump()));
@@ -584,17 +583,17 @@ private:
using namespace mtx::events;
using namespace mtx::events::state;
- return boost::get<StateEvent<Aliases>>(&e) != nullptr ||
- boost::get<StateEvent<state::Avatar>>(&e) != nullptr ||
- boost::get<StateEvent<CanonicalAlias>>(&e) != nullptr ||
- boost::get<StateEvent<Create>>(&e) != nullptr ||
- boost::get<StateEvent<GuestAccess>>(&e) != nullptr ||
- boost::get<StateEvent<HistoryVisibility>>(&e) != nullptr ||
- boost::get<StateEvent<JoinRules>>(&e) != nullptr ||
- boost::get<StateEvent<Name>>(&e) != nullptr ||
- boost::get<StateEvent<Member>>(&e) != nullptr ||
- boost::get<StateEvent<PowerLevels>>(&e) != nullptr ||
- boost::get<StateEvent<Topic>>(&e) != nullptr;
+ return std::holds_alternative<StateEvent<Aliases>>(e) ||
+ std::holds_alternative<StateEvent<state::Avatar>>(e) ||
+ std::holds_alternative<StateEvent<CanonicalAlias>>(e) ||
+ std::holds_alternative<StateEvent<Create>>(e) ||
+ std::holds_alternative<StateEvent<GuestAccess>>(e) ||
+ std::holds_alternative<StateEvent<HistoryVisibility>>(e) ||
+ std::holds_alternative<StateEvent<JoinRules>>(e) ||
+ std::holds_alternative<StateEvent<Name>>(e) ||
+ std::holds_alternative<StateEvent<Member>>(e) ||
+ std::holds_alternative<StateEvent<PowerLevels>>(e) ||
+ std::holds_alternative<StateEvent<Topic>>(e);
}
template<class T>
@@ -603,11 +602,11 @@ private:
using namespace mtx::events;
using namespace mtx::events::state;
- return boost::get<StateEvent<state::Avatar>>(&e) != nullptr ||
- boost::get<StateEvent<CanonicalAlias>>(&e) != nullptr ||
- boost::get<StateEvent<Name>>(&e) != nullptr ||
- boost::get<StateEvent<Member>>(&e) != nullptr ||
- boost::get<StateEvent<Topic>>(&e) != nullptr;
+ return std::holds_alternative<StateEvent<state::Avatar>>(e) ||
+ std::holds_alternative<StateEvent<CanonicalAlias>>(e) ||
+ std::holds_alternative<StateEvent<Name>>(e) ||
+ std::holds_alternative<StateEvent<Member>>(e) ||
+ std::holds_alternative<StateEvent<Topic>>(e);
}
bool containsStateUpdates(const mtx::events::collections::StrippedEvents &e)
@@ -615,11 +614,11 @@ private:
using namespace mtx::events;
using namespace mtx::events::state;
- return boost::get<StrippedEvent<state::Avatar>>(&e) != nullptr ||
- boost::get<StrippedEvent<CanonicalAlias>>(&e) != nullptr ||
- boost::get<StrippedEvent<Name>>(&e) != nullptr ||
- boost::get<StrippedEvent<Member>>(&e) != nullptr ||
- boost::get<StrippedEvent<Topic>>(&e) != nullptr;
+ return std::holds_alternative<StrippedEvent<state::Avatar>>(e) ||
+ std::holds_alternative<StrippedEvent<CanonicalAlias>>(e) ||
+ std::holds_alternative<StrippedEvent<Name>>(e) ||
+ std::holds_alternative<StrippedEvent<Member>>(e) ||
+ std::holds_alternative<StrippedEvent<Topic>>(e);
}
void saveInvites(lmdb::txn &txn,
diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp
index 35d262ac..c496acab 100644
--- a/src/ChatPage.cpp
+++ b/src/ChatPage.cpp
@@ -54,7 +54,7 @@ constexpr int CHECK_CONNECTIVITY_INTERVAL = 15'000;
constexpr int RETRY_TIMEOUT = 5'000;
constexpr size_t MAX_ONETIME_KEYS = 50;
-Q_DECLARE_METATYPE(boost::optional<mtx::crypto::EncryptedFile>)
+Q_DECLARE_METATYPE(std::optional<mtx::crypto::EncryptedFile>)
ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
: QWidget(parent)
@@ -64,8 +64,8 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
{
setObjectName("chatPage");
- qRegisterMetaType<boost::optional<mtx::crypto::EncryptedFile>>(
- "boost::optional<mtx::crypto::EncryptedFile>");
+ qRegisterMetaType<std::optional<mtx::crypto::EncryptedFile>>(
+ "std::optional<mtx::crypto::EncryptedFile>");
topLayout_ = new QHBoxLayout(this);
topLayout_->setSpacing(0);
@@ -318,7 +318,7 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
auto bin = dev->peek(dev->size());
auto payload = std::string(bin.data(), bin.size());
- boost::optional<mtx::crypto::EncryptedFile> encryptedFile;
+ std::optional<mtx::crypto::EncryptedFile> encryptedFile;
if (cache::client()->isRoomEncrypted(current_room_.toStdString())) {
mtx::crypto::BinaryBuf buf;
std::tie(buf, encryptedFile) = mtx::crypto::encrypt_file(payload);
@@ -371,7 +371,7 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
this,
[this](QString roomid,
QString filename,
- boost::optional<mtx::crypto::EncryptedFile> encryptedFile,
+ std::optional<mtx::crypto::EncryptedFile> encryptedFile,
QString url,
QString mimeClass,
QString mime,
diff --git a/src/ChatPage.h b/src/ChatPage.h
index 20e156af..6ca30b3d 100644
--- a/src/ChatPage.h
+++ b/src/ChatPage.h
@@ -18,8 +18,9 @@
#pragma once
#include <atomic>
-#include <boost/optional.hpp>
-#include <boost/variant.hpp>
+#include <optional>
+#include <variant>
+
#include <mtx/common.hpp>
#include <mtx/responses.hpp>
@@ -98,7 +99,7 @@ signals:
void uploadFailed(const QString &msg);
void mediaUploaded(const QString &roomid,
const QString &filename,
- const boost::optional<mtx::crypto::EncryptedFile> &file,
+ const std::optional<mtx::crypto::EncryptedFile> &file,
const QString &url,
const QString &mimeClass,
const QString &mime,
@@ -252,9 +253,8 @@ ChatPage::getMemberships(const std::vector<Collection> &collection) const
using Member = mtx::events::StateEvent<mtx::events::state::Member>;
for (const auto &event : collection) {
- if (boost::get<Member>(event) != nullptr) {
- auto member = boost::get<Member>(event);
- memberships.emplace(member.state_key, member);
+ if (auto member = std::get_if<Member>(event)) {
+ memberships.emplace(member->state_key, *member);
}
}
diff --git a/src/Olm.cpp b/src/Olm.cpp
index c1598570..9c1a25df 100644
--- a/src/Olm.cpp
+++ b/src/Olm.cpp
@@ -1,4 +1,4 @@
-#include <boost/variant.hpp>
+#include <variant>
#include "Olm.h"
@@ -289,14 +289,13 @@ request_keys(const std::string &room_id, const std::string &event_id)
return;
}
- if (boost::get<EncryptedEvent<msg::Encrypted>>(&res) == nullptr) {
+ if (!std::holds_alternative<EncryptedEvent<msg::Encrypted>>(res)) {
nhlog::net()->info(
"retrieved event is not encrypted: {} from {}", event_id, room_id);
return;
}
- olm::send_key_request_for(room_id,
- boost::get<EncryptedEvent<msg::Encrypted>>(res));
+ olm::send_key_request_for(room_id, std::get<EncryptedEvent<msg::Encrypted>>(res));
});
}
diff --git a/src/Utils.cpp b/src/Utils.cpp
index 8f9e0643..3d69162f 100644
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -9,9 +9,10 @@
#include <QSettings>
#include <QTextDocument>
#include <QXmlStreamReader>
+
#include <cmath>
+#include <variant>
-#include <boost/variant.hpp>
#include <cmark.h>
#include "Config.h"
@@ -122,34 +123,33 @@ utils::getMessageDescription(const TimelineEvent &event,
using Video = mtx::events::RoomEvent<mtx::events::msg::Video>;
using Encrypted = mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>;
- if (boost::get<Audio>(&event) != nullptr) {
+ if (std::holds_alternative<Audio>(event)) {
return createDescriptionInfo<Audio>(event, localUser, room_id);
- } else if (boost::get<Emote>(&event) != nullptr) {
+ } else if (std::holds_alternative<Emote>(event)) {
return createDescriptionInfo<Emote>(event, localUser, room_id);
- } else if (boost::get<File>(&event) != nullptr) {
+ } else if (std::holds_alternative<File>(event)) {
return createDescriptionInfo<File>(event, localUser, room_id);
- } else if (boost::get<Image>(&event) != nullptr) {
+ } else if (std::holds_alternative<Image>(event)) {
return createDescriptionInfo<Image>(event, localUser, room_id);
- } else if (boost::get<Notice>(&event) != nullptr) {
+ } else if (std::holds_alternative<Notice>(event)) {
return createDescriptionInfo<Notice>(event, localUser, room_id);
- } else if (boost::get<Text>(&event) != nullptr) {
+ } else if (std::holds_alternative<Text>(event)) {
return createDescriptionInfo<Text>(event, localUser, room_id);
- } else if (boost::get<Video>(&event) != nullptr) {
+ } else if (std::holds_alternative<Video>(event)) {
return createDescriptionInfo<Video>(event, localUser, room_id);
- } else if (boost::get<mtx::events::Sticker>(&event) != nullptr) {
+ } else if (std::holds_alternative<mtx::events::Sticker>(event)) {
return createDescriptionInfo<mtx::events::Sticker>(event, localUser, room_id);
- } else if (boost::get<Encrypted>(&event) != nullptr) {
- const auto msg = boost::get<Encrypted>(event);
- const auto sender = QString::fromStdString(msg.sender);
+ } else if (auto msg = std::get_if<Encrypted>(&event); msg != nullptr) {
+ const auto sender = QString::fromStdString(msg->sender);
const auto username = Cache::displayName(room_id, sender);
- const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts);
+ const auto ts = QDateTime::fromMSecsSinceEpoch(msg->origin_server_ts);
DescInfo info;
info.userid = sender;
info.body = QString(" %1").arg(messageDescription<Encrypted>());
info.timestamp = utils::descriptiveTime(ts);
- info.event_id = QString::fromStdString(msg.event_id);
+ info.event_id = QString::fromStdString(msg->event_id);
info.datetime = ts;
return info;
@@ -217,30 +217,25 @@ utils::levenshtein_distance(const std::string &s1, const std::string &s2)
}
QString
-utils::event_body(const mtx::events::collections::TimelineEvents &event)
+utils::event_body(const mtx::events::collections::TimelineEvents &e)
{
using namespace mtx::events;
- using namespace mtx::events::msg;
-
- if (boost::get<RoomEvent<Audio>>(&event) != nullptr) {
- return message_body<RoomEvent<Audio>>(event);
- } else if (boost::get<RoomEvent<Emote>>(&event) != nullptr) {
- return message_body<RoomEvent<Emote>>(event);
- } else if (boost::get<RoomEvent<File>>(&event) != nullptr) {
- return message_body<RoomEvent<File>>(event);
- } else if (boost::get<RoomEvent<Image>>(&event) != nullptr) {
- return message_body<RoomEvent<Image>>(event);
- } else if (boost::get<RoomEvent<Notice>>(&event) != nullptr) {
- return message_body<RoomEvent<Notice>>(event);
- } else if (boost::get<Sticker>(&event) != nullptr) {
- return message_body<Sticker>(event);
- } else if (boost::get<RoomEvent<Text>>(&event) != nullptr) {
- return message_body<RoomEvent<Text>>(event);
- } else if (boost::get<RoomEvent<Video>>(&event) != nullptr) {
- return message_body<RoomEvent<Video>>(event);
- }
+ if (auto ev = std::get_if<RoomEvent<msg::Audio>>(&e); ev != nullptr)
+ return QString::fromStdString(ev->content.body);
+ if (auto ev = std::get_if<RoomEvent<msg::Emote>>(&e); ev != nullptr)
+ return QString::fromStdString(ev->content.body);
+ if (auto ev = std::get_if<RoomEvent<msg::File>>(&e); ev != nullptr)
+ return QString::fromStdString(ev->content.body);
+ if (auto ev = std::get_if<RoomEvent<msg::Image>>(&e); ev != nullptr)
+ return QString::fromStdString(ev->content.body);
+ if (auto ev = std::get_if<RoomEvent<msg::Notice>>(&e); ev != nullptr)
+ return QString::fromStdString(ev->content.body);
+ if (auto ev = std::get_if<RoomEvent<msg::Text>>(&e); ev != nullptr)
+ return QString::fromStdString(ev->content.body);
+ if (auto ev = std::get_if<RoomEvent<msg::Video>>(&e); ev != nullptr)
+ return QString::fromStdString(ev->content.body);
- return QString();
+ return "";
}
QPixmap
diff --git a/src/Utils.h b/src/Utils.h
index bdb51844..6c0cf0dd 100644
--- a/src/Utils.h
+++ b/src/Utils.h
@@ -1,6 +1,6 @@
#pragma once
-#include <boost/variant.hpp>
+#include <variant>
#include "Cache.h"
#include "RoomInfoListItem.h"
@@ -165,7 +165,7 @@ template<class T, class Event>
DescInfo
createDescriptionInfo(const Event &event, const QString &localUser, const QString &room_id)
{
- const auto msg = boost::get<T>(event);
+ const auto msg = std::get<T>(event);
const auto sender = QString::fromStdString(msg.sender);
const auto username = Cache::displayName(room_id, sender);
@@ -200,25 +200,25 @@ erase_if(ContainerT &items, const PredicateT &predicate)
inline uint64_t
event_timestamp(const mtx::events::collections::TimelineEvents &event)
{
- return boost::apply_visitor([](auto msg) { return msg.origin_server_ts; }, event);
+ return std::visit([](auto msg) { return msg.origin_server_ts; }, event);
}
inline nlohmann::json
serialize_event(const mtx::events::collections::TimelineEvents &event)
{
- return boost::apply_visitor([](auto msg) { return json(msg); }, event);
+ return std::visit([](auto msg) { return json(msg); }, event);
}
inline mtx::events::EventType
event_type(const mtx::events::collections::TimelineEvents &event)
{
- return boost::apply_visitor([](auto msg) { return msg.type; }, event);
+ return std::visit([](auto msg) { return msg.type; }, event);
}
inline std::string
event_id(const mtx::events::collections::TimelineEvents &event)
{
- return boost::apply_visitor([](auto msg) { return msg.event_id; }, event);
+ return std::visit([](auto msg) { return msg.event_id; }, event);
}
inline QString
@@ -230,15 +230,14 @@ eventId(const mtx::events::collections::TimelineEvents &event)
inline QString
event_sender(const mtx::events::collections::TimelineEvents &event)
{
- return boost::apply_visitor([](auto msg) { return QString::fromStdString(msg.sender); },
- event);
+ return std::visit([](auto msg) { return QString::fromStdString(msg.sender); }, event);
}
template<class T>
QString
message_body(const mtx::events::collections::TimelineEvents &event)
{
- return QString::fromStdString(boost::get<T>(event).content.body);
+ return QString::fromStdString(std::get<T>(event).content.body);
}
//! Calculate the Levenshtein distance between two strings with character skipping.
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index e49fcf57..1e069d50 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -117,17 +117,17 @@ eventFormattedBody(const mtx::events::RoomEvent<T> &e)
}
template<class T>
-boost::optional<mtx::crypto::EncryptedFile>
+std::optional<mtx::crypto::EncryptedFile>
eventEncryptionInfo(const mtx::events::Event<T> &)
{
- return boost::none;
+ return std::nullopt;
}
template<class T>
auto
eventEncryptionInfo(const mtx::events::RoomEvent<T> &e) -> std::enable_if_t<
- std::is_same<decltype(e.content.file), boost::optional<mtx::crypto::EncryptedFile>>::value,
- boost::optional<mtx::crypto::EncryptedFile>>
+ std::is_same<decltype(e.content.file), std::optional<mtx::crypto::EncryptedFile>>::value,
+ std::optional<mtx::crypto::EncryptedFile>>
{
return e.content.file;
}
@@ -407,7 +407,7 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj
}
eventOrder[idx] = event_id;
auto ev = events.value(txn_id);
- ev = boost::apply_visitor(
+ ev = std::visit(
[event_id](const auto &e) -> mtx::events::collections::TimelineEvents {
auto eventCopy = e;
eventCopy.event_id = event_id.toStdString();
@@ -483,29 +483,30 @@ TimelineModel::data(const QModelIndex &index, int role) const
mtx::events::collections::TimelineEvents event = events.value(id);
- if (auto e = boost::get<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&event)) {
+ if (auto e =
+ std::get_if<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&event)) {
event = decryptEvent(*e).event;
}
switch (role) {
case Section: {
- QDateTime date = boost::apply_visitor(
- [](const auto &e) -> QDateTime { return eventTimestamp(e); }, event);
+ QDateTime date =
+ std::visit([](const auto &e) -> QDateTime { return eventTimestamp(e); }, event);
date.setTime(QTime());
QString userId =
- boost::apply_visitor([](const auto &e) -> QString { return senderId(e); }, event);
+ std::visit([](const auto &e) -> QString { return senderId(e); }, event);
for (int r = index.row() - 1; r > 0; r--) {
auto tempEv = events.value(eventOrder[r]);
- QDateTime prevDate = boost::apply_visitor(
+ QDateTime prevDate = std::visit(
[](const auto &e) -> QDateTime { return eventTimestamp(e); }, tempEv);
prevDate.setTime(QTime());
if (prevDate != date)
return QString("%2 %1").arg(date.toMSecsSinceEpoch()).arg(userId);
- QString prevUserId = boost::apply_visitor(
- [](const auto &e) -> QString { return senderId(e); }, tempEv);
+ QString prevUserId =
+ std::visit([](const auto &e) -> QString { return senderId(e); }, tempEv);
if (userId != prevUserId)
break;
}
@@ -513,62 +514,61 @@ TimelineModel::data(const QModelIndex &index, int role) const
return QString("%1").arg(userId);
}
case UserId:
- return QVariant(boost::apply_visitor(
- [](const auto &e) -> QString { return senderId(e); }, event));
+ return QVariant(
+ std::visit([](const auto &e) -> QString { return senderId(e); }, event));
case UserName:
- return QVariant(displayName(boost::apply_visitor(
- [](const auto &e) -> QString { return senderId(e); }, event)));
+ return QVariant(displayName(
+ std::visit([](const auto &e) -> QString { return senderId(e); }, event)));
case Timestamp:
- return QVariant(boost::apply_visitor(
- [](const auto &e) -> QDateTime { return eventTimestamp(e); }, event));
+ return QVariant(
+ std::visit([](const auto &e) -> QDateTime { return eventTimestamp(e); }, event));
case Type:
- return QVariant(boost::apply_visitor(
+ return QVariant(std::visit(
[](const auto &e) -> qml_mtx_events::EventType { return toRoomEventType(e); },
event));
case Body:
- return QVariant(utils::replaceEmoji(boost::apply_visitor(
- [](const auto &e) -> QString { return eventBody(e); }, event)));
+ return QVariant(utils::replaceEmoji(
+ std::visit([](const auto &e) -> QString { return eventBody(e); }, event)));
case FormattedBody:
return QVariant(
utils::replaceEmoji(
- utils::linkifyMessage(boost::apply_visitor(
+ utils::linkifyMessage(std::visit(
[](const auto &e) -> QString { return eventFormattedBody(e); }, event)))
.remove("<mx-reply>")
.remove("</mx-reply>"));
case Url:
- return QVariant(boost::apply_visitor(
- [](const auto &e) -> QString { return eventUrl(e); }, event));
+ return QVariant(
+ std::visit([](const auto &e) -> QString { return eventUrl(e); }, event));
case ThumbnailUrl:
- return QVariant(boost::apply_visitor(
- [](const auto &e) -> QString { return eventThumbnailUrl(e); }, event));
+ return QVariant(
+ std::visit([](const auto &e) -> QString { return eventThumbnailUrl(e); }, event));
case Filename:
- return QVariant(boost::apply_visitor(
- [](const auto &e) -> QString { return eventFilename(e); }, event));
+ return QVariant(
+ std::visit([](const auto &e) -> QString { return eventFilename(e); }, event));
case Filesize:
- return QVariant(boost::apply_visitor(
+ return QVariant(std::visit(
[](const auto &e) -> QString {
return utils::humanReadableFileSize(eventFilesize(e));
},
event));
case MimeType:
- return QVariant(boost::apply_visitor(
- [](const auto &e) -> QString { return eventMimeType(e); }, event));
+ return QVariant(
+ std::visit([](const auto &e) -> QString { return eventMimeType(e); }, event));
case Height:
- return QVariant(boost::apply_visitor(
- [](const auto &e) -> qulonglong { return eventHeight(e); }, event));
+ return QVariant(
+ std::visit([](const auto &e) -> qulonglong { return eventHeight(e); }, event));
case Width:
- return QVariant(boost::apply_visitor(
- [](const auto &e) -> qulonglong { return eventWidth(e); }, event));
+ return QVariant(
+ std::visit([](const auto &e) -> qulonglong { return eventWidth(e); }, event));
case ProportionalHeight:
- return QVariant(boost::apply_visitor(
- [](const auto &e) -> double { return eventPropHeight(e); }, event));
+ return QVariant(
+ std::visit([](const auto &e) -> double { return eventPropHeight(e); }, event));
case Id:
return id;
case State:
// only show read receipts for messages not from us
- if (boost::apply_visitor([](const auto &e) -> QString { return senderId(e); },
- event)
+ if (std::visit([](const auto &e) -> QString { return senderId(e); }, event)
.toStdString() != http::client()->user_id().to_string())
return qml_mtx_events::Empty;
else if (failed.contains(id))
@@ -582,20 +582,20 @@ TimelineModel::data(const QModelIndex &index, int role) const
return qml_mtx_events::Received;
case IsEncrypted: {
auto tempEvent = events[id];
- return boost::get<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(
- &tempEvent) != nullptr;
+ return std::holds_alternative<
+ mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(tempEvent);
}
case ReplyTo: {
- QString evId = boost::apply_visitor(
- [](const auto &e) -> QString { return eventRelatesTo(e); }, event);
+ QString evId =
+ std::visit([](const auto &e) -> QString { return eventRelatesTo(e); }, event);
return QVariant(evId);
}
case RoomName:
- return QVariant(boost::apply_visitor(
- [](const auto &e) -> QString { return eventRoomName(e); }, event));
+ return QVariant(
+ std::visit([](const auto &e) -> QString { return eventRoomName(e); }, event));
case RoomTopic:
- return QVariant(boost::apply_visitor(
- [](const auto &e) -> QString { return eventRoomTopic(e); }, event));
+ return QVariant(
+ std::visit([](const auto &e) -> QString { return eventRoomTopic(e); }, event));
default:
return QVariant();
}
@@ -646,13 +646,12 @@ TimelineModel::updateLastMessage()
{
for (auto it = eventOrder.rbegin(); it != eventOrder.rend(); ++it) {
auto event = events.value(*it);
- if (auto e = boost::get<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(
+ if (auto e = std::get_if<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(
&event)) {
event = decryptEvent(*e).event;
}
- if (!boost::apply_visitor([](const auto &e) -> bool { return isMessage(e); },
- event))
+ if (!std::visit([](const auto &e) -> bool { return isMessage(e); }, event))
continue;
auto description = utils::getMessageDescription(
@@ -668,8 +667,7 @@ TimelineModel::internalAddEvents(
{
std::vector<QString> ids;
for (auto e : timeline) {
- QString id =
- boost::apply_visitor([](const auto &e) -> QString { return eventId(e); }, e);
+ QString id = std::visit([](const auto &e) -> QString { return eventId(e); }, e);
if (this->events.contains(id)) {
this->events.insert(id, e);
@@ -679,12 +677,12 @@ TimelineModel::internalAddEvents(
}
if (auto redaction =
- boost::get<mtx::events::RedactionEvent<mtx::events::msg::Redaction>>(&e)) {
+ std::get_if<mtx::events::RedactionEvent<mtx::events::msg::Redaction>>(&e)) {
QString redacts = QString::fromStdString(redaction->redacts);
auto redacted = std::find(eventOrder.begin(), eventOrder.end(), redacts);
if (redacted != eventOrder.end()) {
- auto redactedEvent = boost::apply_visitor(
+ auto redactedEvent = std::visit(
[](const auto &ev)
-> mtx::events::RoomEvent<mtx::events::msg::Redacted> {
mtx::events::RoomEvent<mtx::events::msg::Redacted>
@@ -707,11 +705,11 @@ TimelineModel::internalAddEvents(
}
if (auto event =
- boost::get<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&e)) {
+ std::get_if<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&e)) {
e = decryptEvent(*event).event;
}
- auto encInfo = boost::apply_visitor(
- [](const auto &ev) -> boost::optional<mtx::crypto::EncryptedFile> {
+ auto encInfo = std::visit(
+ [](const auto &ev) -> std::optional<mtx::crypto::EncryptedFile> {
return eventEncryptionInfo(ev);
},
e);
@@ -947,11 +945,12 @@ void
TimelineModel::replyAction(QString id)
{
auto event = events.value(id);
- if (auto e = boost::get<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&event)) {
+ if (auto e =
+ std::get_if<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&event)) {
event = decryptEvent(*e).event;
}
- RelatedInfo related = boost::apply_visitor(
+ RelatedInfo related = std::visit(
[](const auto &ev) -> RelatedInfo {
RelatedInfo related_ = {};
related_.quoted_user = QString::fromStdString(ev.sender);
@@ -959,10 +958,10 @@ TimelineModel::replyAction(QString id)
return related_;
},
event);
- related.type = mtx::events::getMessageType(boost::apply_visitor(
- [](const auto &e) -> std::string { return eventMsgType(e); }, event));
- related.quoted_body = boost::apply_visitor(
- [](const auto &e) -> QString { return eventFormattedBody(e); }, event);
+ related.type = mtx::events::getMessageType(
+ std::visit([](const auto &e) -> std::string { return eventMsgType(e); }, event));
+ related.quoted_body =
+ std::visit([](const auto &e) -> QString { return eventFormattedBody(e); }, event);
related.quoted_body.remove(QRegularExpression(
"<mx-reply>.*</mx-reply>", QRegularExpression::DotMatchesEverythingOption));
nhlog::ui()->debug("after replacement: {}", related.quoted_body.toStdString());
@@ -1396,7 +1395,7 @@ TimelineModel::processOnePendingMessage()
QString txn_id_qstr = pending.first();
auto event = events.value(txn_id_qstr);
- boost::apply_visitor(SendMessageVisitor{txn_id_qstr, this}, event);
+ std::visit(SendMessageVisitor{txn_id_qstr, this}, event);
}
void
@@ -1405,7 +1404,7 @@ TimelineModel::addPendingMessage(mtx::events::collections::TimelineEvents event)
internalAddEvents({event});
QString txn_id_qstr =
- boost::apply_visitor([](const auto &e) -> QString { return eventId(e); }, event);
+ std::visit([](const auto &e) -> QString { return eventId(e); }, event);
beginInsertRows(QModelIndex(),
static_cast<int>(this->eventOrder.size()),
static_cast<int>(this->eventOrder.size()));
@@ -1423,22 +1422,22 @@ TimelineModel::saveMedia(QString eventId) const
{
mtx::events::collections::TimelineEvents event = events.value(eventId);
- if (auto e = boost::get<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&event)) {
+ if (auto e =
+ std::get_if<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&event)) {
event = decryptEvent(*e).event;
}
- QString mxcUrl =
- boost::apply_visitor([](const auto &e) -> QString { return eventUrl(e); }, event);
+ QString mxcUrl = std::visit([](const auto &e) -> QString { return eventUrl(e); }, event);
QString originalFilename =
- boost::apply_visitor([](const auto &e) -> QString { return eventFilename(e); }, event);
+ std::visit([](const auto &e) -> QString { return eventFilename(e); }, event);
QString mimeType =
- boost::apply_visitor([](const auto &e) -> QString { return eventMimeType(e); }, event);
+ std::visit([](const auto &e) -> QString { return eventMimeType(e); }, event);
- using EncF = boost::optional<mtx::crypto::EncryptedFile>;
+ using EncF = std::optional<mtx::crypto::EncryptedFile>;
EncF encryptionInfo =
- boost::apply_visitor([](const auto &e) -> EncF { return eventEncryptionInfo(e); }, event);
+ std::visit([](const auto &e) -> EncF { return eventEncryptionInfo(e); }, event);
- qml_mtx_events::EventType eventType = boost::apply_visitor(
+ qml_mtx_events::EventType eventType = std::visit(
[](const auto &e) -> qml_mtx_events::EventType { return toRoomEventType(e); }, event);
QString dialogTitle;
@@ -1500,18 +1499,18 @@ TimelineModel::cacheMedia(QString eventId)
{
mtx::events::collections::TimelineEvents event = events.value(eventId);
- if (auto e = boost::get<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&event)) {
+ if (auto e =
+ std::get_if<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&event)) {
event = decryptEvent(*e).event;
}
- QString mxcUrl =
- boost::apply_visitor([](const auto &e) -> QString { return eventUrl(e); }, event);
+ QString mxcUrl = std::visit([](const auto &e) -> QString { return eventUrl(e); }, event);
QString mimeType =
- boost::apply_visitor([](const auto &e) -> QString { return eventMimeType(e); }, event);
+ std::visit([](const auto &e) -> QString { return eventMimeType(e); }, event);
- using EncF = boost::optional<mtx::crypto::EncryptedFile>;
+ using EncF = std::optional<mtx::crypto::EncryptedFile>;
EncF encryptionInfo =
- boost::apply_visitor([](const auto &e) -> EncF { return eventEncryptionInfo(e); }, event);
+ std::visit([](const auto &e) -> EncF { return eventEncryptionInfo(e); }, event);
// If the message is a link to a non mxcUrl, don't download it
if (!mxcUrl.startsWith("mxc://")) {
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 6e18d111..74e09a33 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -222,7 +222,7 @@ TimelineViewManager::queueEmoteMessage(const QString &msg)
void
TimelineViewManager::queueImageMessage(const QString &roomid,
const QString &filename,
- const boost::optional<mtx::crypto::EncryptedFile> &file,
+ const std::optional<mtx::crypto::EncryptedFile> &file,
const QString &url,
const QString &mime,
uint64_t dsize,
@@ -243,7 +243,7 @@ void
TimelineViewManager::queueFileMessage(
const QString &roomid,
const QString &filename,
- const boost::optional<mtx::crypto::EncryptedFile> &encryptedFile,
+ const std::optional<mtx::crypto::EncryptedFile> &encryptedFile,
const QString &url,
const QString &mime,
uint64_t dsize)
@@ -260,7 +260,7 @@ TimelineViewManager::queueFileMessage(
void
TimelineViewManager::queueAudioMessage(const QString &roomid,
const QString &filename,
- const boost::optional<mtx::crypto::EncryptedFile> &file,
+ const std::optional<mtx::crypto::EncryptedFile> &file,
const QString &url,
const QString &mime,
uint64_t dsize)
@@ -277,7 +277,7 @@ TimelineViewManager::queueAudioMessage(const QString &roomid,
void
TimelineViewManager::queueVideoMessage(const QString &roomid,
const QString &filename,
- const boost::optional<mtx::crypto::EncryptedFile> &file,
+ const std::optional<mtx::crypto::EncryptedFile> &file,
const QString &url,
const QString &mime,
uint64_t dsize)
diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h
index 9e8de616..587aa14e 100644
--- a/src/timeline/TimelineViewManager.h
+++ b/src/timeline/TimelineViewManager.h
@@ -56,26 +56,26 @@ public slots:
void queueEmoteMessage(const QString &msg);
void queueImageMessage(const QString &roomid,
const QString &filename,
- const boost::optional<mtx::crypto::EncryptedFile> &file,
+ const std::optional<mtx::crypto::EncryptedFile> &file,
const QString &url,
const QString &mime,
uint64_t dsize,
const QSize &dimensions);
void queueFileMessage(const QString &roomid,
const QString &filename,
- const boost::optional<mtx::crypto::EncryptedFile> &file,
+ 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 boost::optional<mtx::crypto::EncryptedFile> &file,
+ 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 boost::optional<mtx::crypto::EncryptedFile> &file,
+ const std::optional<mtx::crypto::EncryptedFile> &file,
const QString &url,
const QString &mime,
uint64_t dsize);
|