Update to c++17

This commit is contained in:
Nicolas Werner 2019-12-14 17:08:36 +01:00
parent 2ea1e11ffc
commit 659e36b113
17 changed files with 284 additions and 284 deletions

View file

@ -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://")) {