Merge remote-tracking branch 'origin/master' into cross-signing
This commit is contained in:
commit
4802c34009
43 changed files with 8773 additions and 2200 deletions
|
|
@ -565,6 +565,25 @@ TimelineModel::fetchMore(const QModelIndex &)
|
|||
events.fetchMore();
|
||||
}
|
||||
|
||||
void
|
||||
TimelineModel::syncState(const mtx::responses::State &s)
|
||||
{
|
||||
using namespace mtx::events;
|
||||
|
||||
for (const auto &e : s.events) {
|
||||
if (std::holds_alternative<StateEvent<state::Avatar>>(e))
|
||||
emit roomAvatarUrlChanged();
|
||||
else if (std::holds_alternative<StateEvent<state::Name>>(e))
|
||||
emit roomNameChanged();
|
||||
else if (std::holds_alternative<StateEvent<state::Topic>>(e))
|
||||
emit roomTopicChanged();
|
||||
else if (std::holds_alternative<StateEvent<state::Member>>(e)) {
|
||||
emit roomAvatarUrlChanged();
|
||||
emit roomNameChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
TimelineModel::addEvents(const mtx::responses::Timeline &timeline)
|
||||
{
|
||||
|
|
@ -574,6 +593,7 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline)
|
|||
events.handleSync(timeline);
|
||||
|
||||
using namespace mtx::events;
|
||||
|
||||
for (auto e : timeline.events) {
|
||||
if (auto encryptedEvent = std::get_if<EncryptedEvent<msg::Encrypted>>(&e)) {
|
||||
MegolmSessionIndex index;
|
||||
|
|
@ -597,6 +617,16 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline)
|
|||
emit newCallEvent(event);
|
||||
},
|
||||
e);
|
||||
else if (std::holds_alternative<StateEvent<state::Avatar>>(e))
|
||||
emit roomAvatarUrlChanged();
|
||||
else if (std::holds_alternative<StateEvent<state::Name>>(e))
|
||||
emit roomNameChanged();
|
||||
else if (std::holds_alternative<StateEvent<state::Topic>>(e))
|
||||
emit roomTopicChanged();
|
||||
else if (std::holds_alternative<StateEvent<state::Member>>(e)) {
|
||||
emit roomAvatarUrlChanged();
|
||||
emit roomNameChanged();
|
||||
}
|
||||
}
|
||||
updateLastMessage();
|
||||
}
|
||||
|
|
@ -737,12 +767,6 @@ TimelineModel::formatDateSeparator(QDate date) const
|
|||
return date.toString(fmt);
|
||||
}
|
||||
|
||||
QString
|
||||
TimelineModel::escapeEmoji(QString str) const
|
||||
{
|
||||
return utils::replaceEmoji(str);
|
||||
}
|
||||
|
||||
void
|
||||
TimelineModel::viewRawMessage(QString id) const
|
||||
{
|
||||
|
|
@ -1440,7 +1464,7 @@ TimelineModel::formatTypingUsers(const std::vector<QString> &users, QColor bg)
|
|||
QStringList uidWithoutLast;
|
||||
|
||||
auto formatUser = [this, bg](const QString &user_id) -> QString {
|
||||
auto uncoloredUsername = escapeEmoji(displayName(user_id));
|
||||
auto uncoloredUsername = utils::replaceEmoji(displayName(user_id));
|
||||
QString prefix =
|
||||
QString("<font color=\"%1\">").arg(manager_->userColor(user_id, bg).name());
|
||||
|
||||
|
|
@ -1490,7 +1514,7 @@ TimelineModel::formatJoinRuleEvent(QString id)
|
|||
return "";
|
||||
|
||||
QString user = QString::fromStdString(event->sender);
|
||||
QString name = escapeEmoji(displayName(user));
|
||||
QString name = utils::replaceEmoji(displayName(user));
|
||||
|
||||
switch (event->content.join_rule) {
|
||||
case mtx::events::state::JoinRule::Public:
|
||||
|
|
@ -1515,7 +1539,7 @@ TimelineModel::formatGuestAccessEvent(QString id)
|
|||
return "";
|
||||
|
||||
QString user = QString::fromStdString(event->sender);
|
||||
QString name = escapeEmoji(displayName(user));
|
||||
QString name = utils::replaceEmoji(displayName(user));
|
||||
|
||||
switch (event->content.guest_access) {
|
||||
case mtx::events::state::AccessState::CanJoin:
|
||||
|
|
@ -1540,7 +1564,7 @@ TimelineModel::formatHistoryVisibilityEvent(QString id)
|
|||
return "";
|
||||
|
||||
QString user = QString::fromStdString(event->sender);
|
||||
QString name = escapeEmoji(displayName(user));
|
||||
QString name = utils::replaceEmoji(displayName(user));
|
||||
|
||||
switch (event->content.history_visibility) {
|
||||
case mtx::events::state::Visibility::WorldReadable:
|
||||
|
|
@ -1573,7 +1597,7 @@ TimelineModel::formatPowerLevelEvent(QString id)
|
|||
return "";
|
||||
|
||||
QString user = QString::fromStdString(event->sender);
|
||||
QString name = escapeEmoji(displayName(user));
|
||||
QString name = utils::replaceEmoji(displayName(user));
|
||||
|
||||
// TODO: power levels rendering is actually a bit complex. work on this later.
|
||||
return tr("%1 has changed the room's permissions.").arg(name);
|
||||
|
|
@ -1602,7 +1626,7 @@ TimelineModel::formatMemberEvent(QString id)
|
|||
}
|
||||
|
||||
QString user = QString::fromStdString(event->state_key);
|
||||
QString name = escapeEmoji(displayName(user));
|
||||
QString name = utils::replaceEmoji(displayName(user));
|
||||
QString rendered;
|
||||
|
||||
// see table https://matrix.org/docs/spec/client_server/latest#m-room-member
|
||||
|
|
@ -1675,3 +1699,37 @@ TimelineModel::formatMemberEvent(QString id)
|
|||
|
||||
return rendered;
|
||||
}
|
||||
|
||||
QString
|
||||
TimelineModel::roomName() const
|
||||
{
|
||||
auto info = cache::getRoomInfo({room_id_.toStdString()});
|
||||
|
||||
if (!info.count(room_id_))
|
||||
return "";
|
||||
else
|
||||
return QString::fromStdString(info[room_id_].name);
|
||||
}
|
||||
|
||||
QString
|
||||
TimelineModel::roomAvatarUrl() const
|
||||
{
|
||||
auto info = cache::getRoomInfo({room_id_.toStdString()});
|
||||
|
||||
if (!info.count(room_id_))
|
||||
return "";
|
||||
else
|
||||
return QString::fromStdString(info[room_id_].avatar_url);
|
||||
}
|
||||
|
||||
QString
|
||||
TimelineModel::roomTopic() const
|
||||
{
|
||||
auto info = cache::getRoomInfo({room_id_.toStdString()});
|
||||
|
||||
if (!info.count(room_id_))
|
||||
return "";
|
||||
else
|
||||
return utils::replaceEmoji(utils::linkifyMessage(
|
||||
utils::escapeBlacklistedHtml(QString::fromStdString(info[room_id_].topic))));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue