Fix most compilation warnings
This commit is contained in:
@@ -180,7 +180,7 @@ void Controller::addConnection(Connection *c)
|
|||||||
});
|
});
|
||||||
|
|
||||||
connect(c, &Connection::requestFailed, this, [this](BaseJob *job) {
|
connect(c, &Connection::requestFailed, this, [this](BaseJob *job) {
|
||||||
if (job->error() == BaseJob::UserConsentRequiredError) {
|
if (job->error() == BaseJob::UserConsentRequired) {
|
||||||
Q_EMIT userConsentRequired(job->errorUrl());
|
Q_EMIT userConsentRequired(job->errorUrl());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -247,7 +247,7 @@ void Controller::invokeLogin()
|
|||||||
connect(connection, &Connection::networkError, this, [this](const QString &error, const QString &, int, int) {
|
connect(connection, &Connection::networkError, this, [this](const QString &error, const QString &, int, int) {
|
||||||
Q_EMIT errorOccured(i18n("Network Error: %1", error));
|
Q_EMIT errorOccured(i18n("Network Error: %1", error));
|
||||||
});
|
});
|
||||||
connection->assumeIdentity(account.userId(), accessToken, account.deviceId());
|
connection->assumeIdentity(account.userId(), accessToken);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -263,7 +263,7 @@ QKeychain::ReadPasswordJob *Controller::loadAccessTokenFromKeyChain(const Accoun
|
|||||||
job->setKey(account.userId());
|
job->setKey(account.userId());
|
||||||
|
|
||||||
// Handling of errors
|
// Handling of errors
|
||||||
connect(job, &QKeychain::Job::finished, this, [this, &account, job]() {
|
connect(job, &QKeychain::Job::finished, this, [this, job]() {
|
||||||
if (job->error() == QKeychain::Error::NoError) {
|
if (job->error() == QKeychain::Error::NoError) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2021 Carl Schwan <carl@carlschwan.eu>
|
|
||||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Quotient/events/stateevent.h>
|
|
||||||
|
|
||||||
namespace Quotient
|
|
||||||
{
|
|
||||||
#ifdef QUOTIENT_07
|
|
||||||
class JoinRulesEvent : public StateEvent
|
|
||||||
#else
|
|
||||||
class JoinRulesEvent : public StateEventBase
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
#ifdef QUOTIENT_07
|
|
||||||
QUO_EVENT(JoinRulesEvent, "m.room.join_rules")
|
|
||||||
#else
|
|
||||||
DEFINE_EVENT_TYPEID("m.room.join_rules", JoinRulesEvent)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
explicit JoinRulesEvent(const QJsonObject &obj)
|
|
||||||
#ifdef QUOTIENT_07
|
|
||||||
: StateEvent(obj)
|
|
||||||
#else
|
|
||||||
: StateEventBase(typeId(), obj)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QString joinRule() const;
|
|
||||||
QJsonArray allow() const;
|
|
||||||
};
|
|
||||||
REGISTER_EVENT_TYPE(JoinRulesEvent)
|
|
||||||
}
|
|
||||||
@@ -436,7 +436,10 @@ QVector<ActionsModel::Action> actions{
|
|||||||
Q_EMIT room->showMessage(NeoChatRoom::Info, i18nc("<user> is already banned from this room.", "%1 is already banned from this room.", text));
|
Q_EMIT room->showMessage(NeoChatRoom::Info, i18nc("<user> is already banned from this room.", "%1 is already banned from this room.", text));
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
auto plEvent = room->getCurrentState<RoomPowerLevelsEvent>();
|
auto plEvent = room->currentState().get<RoomPowerLevelsEvent>();
|
||||||
|
if (!plEvent) {
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
if (plEvent->ban() > plEvent->powerLevelForUser(room->localUser()->id())) {
|
if (plEvent->ban() > plEvent->powerLevelForUser(room->localUser()->id())) {
|
||||||
Q_EMIT room->showMessage(NeoChatRoom::Error, i18n("You are not allowed to ban users from this room."));
|
Q_EMIT room->showMessage(NeoChatRoom::Error, i18n("You are not allowed to ban users from this room."));
|
||||||
return QString();
|
return QString();
|
||||||
@@ -466,7 +469,10 @@ QVector<ActionsModel::Action> actions{
|
|||||||
Q_EMIT room->showMessage(NeoChatRoom::Error, i18nc("'<text>' does not look like a matrix id.", "'%1' does not look like a matrix id.", text));
|
Q_EMIT room->showMessage(NeoChatRoom::Error, i18nc("'<text>' does not look like a matrix id.", "'%1' does not look like a matrix id.", text));
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
auto plEvent = room->getCurrentState<RoomPowerLevelsEvent>();
|
auto plEvent = room->currentState().get<RoomPowerLevelsEvent>();
|
||||||
|
if (!plEvent) {
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
if (plEvent->ban() > plEvent->powerLevelForUser(room->localUser()->id())) {
|
if (plEvent->ban() > plEvent->powerLevelForUser(room->localUser()->id())) {
|
||||||
Q_EMIT room->showMessage(NeoChatRoom::Error, i18n("You are not allowed to unban users from this room."));
|
Q_EMIT room->showMessage(NeoChatRoom::Error, i18n("You are not allowed to unban users from this room."));
|
||||||
return QString();
|
return QString();
|
||||||
@@ -506,7 +512,10 @@ QVector<ActionsModel::Action> actions{
|
|||||||
Q_EMIT room->showMessage(NeoChatRoom::Error, i18nc("<username> is not in this room", "%1 is not in this room.", parts[0]));
|
Q_EMIT room->showMessage(NeoChatRoom::Error, i18nc("<username> is not in this room", "%1 is not in this room.", parts[0]));
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
auto plEvent = room->getCurrentState<RoomPowerLevelsEvent>();
|
auto plEvent = room->currentState().get<RoomPowerLevelsEvent>();
|
||||||
|
if (!plEvent) {
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
auto kick = plEvent->kick();
|
auto kick = plEvent->kick();
|
||||||
if (plEvent->powerLevelForUser(room->localUser()->id()) < kick) {
|
if (plEvent->powerLevelForUser(room->localUser()->id()) < kick) {
|
||||||
Q_EMIT room->showMessage(NeoChatRoom::Error, i18n("You are not allowed to kick users from this room."));
|
Q_EMIT room->showMessage(NeoChatRoom::Error, i18n("You are not allowed to kick users from this room."));
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ QVariant LocationsModel::data(const QModelIndex &index, int roleName) const
|
|||||||
|
|
||||||
int LocationsModel::rowCount(const QModelIndex &parent) const
|
int LocationsModel::rowCount(const QModelIndex &parent) const
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(parent);
|
||||||
return m_locations.size();
|
return m_locations.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ void MessageEventModel::setRoom(NeoChatRoom *room)
|
|||||||
beginRemoveRows({}, i, i);
|
beginRemoveRows({}, i, i);
|
||||||
});
|
});
|
||||||
connect(m_currentRoom, &Room::pendingEventDiscarded, this, &MessageEventModel::endRemoveRows);
|
connect(m_currentRoom, &Room::pendingEventDiscarded, this, &MessageEventModel::endRemoveRows);
|
||||||
connect(m_currentRoom, &Room::readMarkerMoved, this, [this](const QString &fromEventId, const QString &toEventId) {
|
connect(m_currentRoom, &Room::fullyReadMarkerMoved, this, [this](const QString &fromEventId, const QString &toEventId) {
|
||||||
Q_UNUSED(fromEventId);
|
Q_UNUSED(fromEventId);
|
||||||
moveReadMarker(toEventId);
|
moveReadMarker(toEventId);
|
||||||
});
|
});
|
||||||
@@ -609,7 +609,7 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const
|
|||||||
return EventStatus::Hidden;
|
return EventStatus::Hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (evt.isStateEvent() && static_cast<const StateEventBase &>(evt).repeatsState()) {
|
if (evt.isStateEvent() && static_cast<const StateEvent &>(evt).repeatsState()) {
|
||||||
return EventStatus::Hidden;
|
return EventStatus::Hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1053,7 +1053,7 @@ void MessageEventModel::createReactionModelForEvent(const Quotient::RoomMessageE
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto eventId = event->id();
|
auto eventId = event->id();
|
||||||
const auto &annotations = m_currentRoom->relatedEvents(eventId, EventRelation::Annotation());
|
const auto &annotations = m_currentRoom->relatedEvents(eventId, EventRelation::AnnotationType);
|
||||||
if (annotations.isEmpty()) {
|
if (annotations.isEmpty()) {
|
||||||
if (m_reactionModels.contains(eventId)) {
|
if (m_reactionModels.contains(eventId)) {
|
||||||
delete m_reactionModels[eventId];
|
delete m_reactionModels[eventId];
|
||||||
@@ -1068,7 +1068,7 @@ void MessageEventModel::createReactionModelForEvent(const Quotient::RoomMessageE
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (const auto &e = eventCast<const ReactionEvent>(a)) {
|
if (const auto &e = eventCast<const ReactionEvent>(a)) {
|
||||||
reactions[e->relation().key].append(static_cast<NeoChatUser *>(m_currentRoom->user(e->senderId())));
|
reactions[e->key()].append(static_cast<NeoChatUser *>(m_currentRoom->user(e->senderId())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ void RoomListModel::connectRoomSignals(NeoChatRoom *room)
|
|||||||
connect(room, &Room::displaynameChanged, this, [this, room] {
|
connect(room, &Room::displaynameChanged, this, [this, room] {
|
||||||
refresh(room, {DisplayNameRole});
|
refresh(room, {DisplayNameRole});
|
||||||
});
|
});
|
||||||
connect(room, &Room::unreadMessagesChanged, this, [this, room] {
|
connect(room, &Room::unreadStatsChanged, this, [this, room] {
|
||||||
refresh(room, {NotificationCountRole, HighlightCountRole});
|
refresh(room, {NotificationCountRole, HighlightCountRole});
|
||||||
});
|
});
|
||||||
connect(room, &Room::notificationCountChanged, this, [this, room] {
|
connect(room, &Room::notificationCountChanged, this, [this, room] {
|
||||||
|
|||||||
@@ -78,8 +78,11 @@ QVariant UserListModel::data(const QModelIndex &index, int role) const
|
|||||||
return QVariant::fromValue(user);
|
return QVariant::fromValue(user);
|
||||||
}
|
}
|
||||||
if (role == PowerLevelRole) {
|
if (role == PowerLevelRole) {
|
||||||
auto pl = m_currentRoom->getCurrentState<RoomPowerLevelsEvent>();
|
auto plEvent = m_currentRoom->currentState().get<RoomPowerLevelsEvent>();
|
||||||
return pl->powerLevelForUser(user->id());
|
if (!plEvent) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return plEvent->powerLevelForUser(user->id());
|
||||||
}
|
}
|
||||||
if (role == PowerLevelStringRole) {
|
if (role == PowerLevelStringRole) {
|
||||||
auto pl = m_currentRoom->currentState().get<RoomPowerLevelsEvent>();
|
auto pl = m_currentRoom->currentState().get<RoomPowerLevelsEvent>();
|
||||||
|
|||||||
@@ -97,7 +97,9 @@ NeoChatRoom::NeoChatRoom(Connection *connection, QString roomId, JoinState joinS
|
|||||||
if (this->joinState() != JoinState::Invite) {
|
if (this->joinState() != JoinState::Invite) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const QString senderId = getCurrentState<RoomMemberEvent>(localUser()->id())->senderId();
|
auto roomMemberEvent = currentState().get<RoomMemberEvent>(localUser()->id());
|
||||||
|
Q_ASSERT(roomMemberEvent);
|
||||||
|
const QString senderId = roomMemberEvent->senderId();
|
||||||
QImage avatar_image;
|
QImage avatar_image;
|
||||||
if (!user(senderId)->avatarUrl(this).isEmpty()) {
|
if (!user(senderId)->avatarUrl(this).isEmpty()) {
|
||||||
avatar_image = user(senderId)->avatar(128, this);
|
avatar_image = user(senderId)->avatar(128, this);
|
||||||
@@ -271,7 +273,7 @@ const RoomEvent *NeoChatRoom::lastEvent() const
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (event->isStateEvent() && static_cast<const StateEventBase &>(*event).repeatsState()) {
|
if (event->isStateEvent() && static_cast<const StateEvent &>(*event).repeatsState()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,7 +340,7 @@ bool NeoChatRoom::lastEventIsSpoiler() const
|
|||||||
QString NeoChatRoom::lastEventToString(Qt::TextFormat format, bool stripNewlines) const
|
QString NeoChatRoom::lastEventToString(Qt::TextFormat format, bool stripNewlines) const
|
||||||
{
|
{
|
||||||
if (auto event = lastEvent()) {
|
if (auto event = lastEvent()) {
|
||||||
return roomMembername(event->senderId()) + (event->isStateEvent() ? QLatin1String(" ") : QLatin1String(": "))
|
return safeMemberName(event->senderId()) + (event->isStateEvent() ? QLatin1String(" ") : QLatin1String(": "))
|
||||||
+ eventToString(*event, format, stripNewlines);
|
+ eventToString(*event, format, stripNewlines);
|
||||||
}
|
}
|
||||||
return {};
|
return {};
|
||||||
@@ -357,7 +359,7 @@ void NeoChatRoom::checkForHighlights(const Quotient::TimelineItem &ti)
|
|||||||
}
|
}
|
||||||
if (auto *e = ti.viewAs<RoomMessageEvent>()) {
|
if (auto *e = ti.viewAs<RoomMessageEvent>()) {
|
||||||
const auto &text = e->plainBody();
|
const auto &text = e->plainBody();
|
||||||
if (text.contains(localUserId) || text.contains(roomMembername(localUserId))) {
|
if (text.contains(localUserId) || text.contains(safeMemberName(localUserId))) {
|
||||||
highlights.insert(e);
|
highlights.insert(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -380,7 +382,7 @@ void NeoChatRoom::onAddHistoricalTimelineEvents(rev_iter_t from)
|
|||||||
void NeoChatRoom::onRedaction(const RoomEvent &prevEvent, const RoomEvent & /*after*/)
|
void NeoChatRoom::onRedaction(const RoomEvent &prevEvent, const RoomEvent & /*after*/)
|
||||||
{
|
{
|
||||||
if (const auto &e = eventCast<const ReactionEvent>(&prevEvent)) {
|
if (const auto &e = eventCast<const ReactionEvent>(&prevEvent)) {
|
||||||
if (auto relatedEventId = e->relation().eventId; !relatedEventId.isEmpty()) {
|
if (auto relatedEventId = e->eventId(); !relatedEventId.isEmpty()) {
|
||||||
Q_EMIT updatedEvent(relatedEventId);
|
Q_EMIT updatedEvent(relatedEventId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -529,7 +531,7 @@ QString NeoChatRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format,
|
|||||||
[this, prettyPrint](const RoomMemberEvent &e) {
|
[this, prettyPrint](const RoomMemberEvent &e) {
|
||||||
// FIXME: Rewind to the name that was at the time of this event
|
// FIXME: Rewind to the name that was at the time of this event
|
||||||
auto subjectName = this->htmlSafeMemberName(e.userId());
|
auto subjectName = this->htmlSafeMemberName(e.userId());
|
||||||
if (e.membership() == MembershipType::Leave) {
|
if (e.membership() == Membership::Leave) {
|
||||||
if (e.prevContent() && e.prevContent()->displayName) {
|
if (e.prevContent() && e.prevContent()->displayName) {
|
||||||
subjectName = sanitized(*e.prevContent()->displayName).toHtmlEscaped();
|
subjectName = sanitized(*e.prevContent()->displayName).toHtmlEscaped();
|
||||||
}
|
}
|
||||||
@@ -542,7 +544,7 @@ QString NeoChatRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format,
|
|||||||
|
|
||||||
// The below code assumes senderName output in AuthorRole
|
// The below code assumes senderName output in AuthorRole
|
||||||
switch (e.membership()) {
|
switch (e.membership()) {
|
||||||
case MembershipType::Invite:
|
case Membership::Invite:
|
||||||
if (e.repeatsState()) {
|
if (e.repeatsState()) {
|
||||||
auto text = i18n("reinvited %1 to the room", subjectName);
|
auto text = i18n("reinvited %1 to the room", subjectName);
|
||||||
if (!e.reason().isEmpty()) {
|
if (!e.reason().isEmpty()) {
|
||||||
@@ -551,13 +553,13 @@ QString NeoChatRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format,
|
|||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
Q_FALLTHROUGH();
|
Q_FALLTHROUGH();
|
||||||
case MembershipType::Join: {
|
case Membership::Join: {
|
||||||
QString text{};
|
QString text{};
|
||||||
// Part 1: invites and joins
|
// Part 1: invites and joins
|
||||||
if (e.repeatsState()) {
|
if (e.repeatsState()) {
|
||||||
text = i18n("joined the room (repeated)");
|
text = i18n("joined the room (repeated)");
|
||||||
} else if (e.changesMembership()) {
|
} else if (e.changesMembership()) {
|
||||||
text = e.membership() == MembershipType::Invite ? i18n("invited %1 to the room", subjectName) : i18n("joined the room");
|
text = e.membership() == Membership::Invite ? i18n("invited %1 to the room", subjectName) : i18n("joined the room");
|
||||||
}
|
}
|
||||||
if (!text.isEmpty()) {
|
if (!text.isEmpty()) {
|
||||||
if (!e.reason().isEmpty()) {
|
if (!e.reason().isEmpty()) {
|
||||||
@@ -567,17 +569,17 @@ QString NeoChatRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format,
|
|||||||
}
|
}
|
||||||
// Part 2: profile changes of joined members
|
// Part 2: profile changes of joined members
|
||||||
if (e.isRename()) {
|
if (e.isRename()) {
|
||||||
if (e.displayName().isEmpty()) {
|
if (!e.newDisplayName()) {
|
||||||
text = i18nc("their refers to a singular user", "cleared their display name");
|
text = i18nc("their refers to a singular user", "cleared their display name");
|
||||||
} else {
|
} else {
|
||||||
text = i18nc("their refers to a singular user", "changed their display name to %1", e.displayName().toHtmlEscaped());
|
text = i18nc("their refers to a singular user", "changed their display name to %1", e.newDisplayName()->toHtmlEscaped());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (e.isAvatarUpdate()) {
|
if (e.isAvatarUpdate()) {
|
||||||
if (!text.isEmpty()) {
|
if (!text.isEmpty()) {
|
||||||
text += i18n(" and ");
|
text += i18n(" and ");
|
||||||
}
|
}
|
||||||
if (e.avatarUrl().isEmpty()) {
|
if (!e.newAvatarUrl()) {
|
||||||
text += i18nc("their refers to a singular user", "cleared their avatar");
|
text += i18nc("their refers to a singular user", "cleared their avatar");
|
||||||
} else if (!e.prevContent()->avatarUrl) {
|
} else if (!e.prevContent()->avatarUrl) {
|
||||||
text += i18n("set an avatar");
|
text += i18n("set an avatar");
|
||||||
@@ -590,18 +592,18 @@ QString NeoChatRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format,
|
|||||||
}
|
}
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
case MembershipType::Leave:
|
case Membership::Leave:
|
||||||
if (e.prevContent() && e.prevContent()->membership == MembershipType::Invite) {
|
if (e.prevContent() && e.prevContent()->membership == Membership::Invite) {
|
||||||
return (e.senderId() != e.userId()) ? i18n("withdrew %1's invitation", subjectName) : i18n("rejected the invitation");
|
return (e.senderId() != e.userId()) ? i18n("withdrew %1's invitation", subjectName) : i18n("rejected the invitation");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.prevContent() && e.prevContent()->membership == MembershipType::Ban) {
|
if (e.prevContent() && e.prevContent()->membership == Membership::Ban) {
|
||||||
return (e.senderId() != e.userId()) ? i18n("unbanned %1", subjectName) : i18n("self-unbanned");
|
return (e.senderId() != e.userId()) ? i18n("unbanned %1", subjectName) : i18n("self-unbanned");
|
||||||
}
|
}
|
||||||
return (e.senderId() != e.userId())
|
return (e.senderId() != e.userId())
|
||||||
? i18n("has put %1 out of the room: %2", subjectName, e.contentJson()["reason"_ls].toString().toHtmlEscaped())
|
? i18n("has put %1 out of the room: %2", subjectName, e.contentJson()["reason"_ls].toString().toHtmlEscaped())
|
||||||
: i18n("left the room");
|
: i18n("left the room");
|
||||||
case MembershipType::Ban:
|
case Membership::Ban:
|
||||||
if (e.senderId() != e.userId()) {
|
if (e.senderId() != e.userId()) {
|
||||||
if (e.reason().isEmpty()) {
|
if (e.reason().isEmpty()) {
|
||||||
return i18n("banned %1 from the room", subjectName);
|
return i18n("banned %1 from the room", subjectName);
|
||||||
@@ -611,7 +613,7 @@ QString NeoChatRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format,
|
|||||||
} else {
|
} else {
|
||||||
return i18n("self-banned from the room");
|
return i18n("self-banned from the room");
|
||||||
}
|
}
|
||||||
case MembershipType::Knock: {
|
case Membership::Knock: {
|
||||||
QString reason(e.contentJson()["reason"_ls].toString().toHtmlEscaped());
|
QString reason(e.contentJson()["reason"_ls].toString().toHtmlEscaped());
|
||||||
return reason.isEmpty() ? i18n("requested an invite") : i18n("requested an invite with reason: %1", reason);
|
return reason.isEmpty() ? i18n("requested an invite") : i18n("requested an invite with reason: %1", reason);
|
||||||
}
|
}
|
||||||
@@ -645,7 +647,7 @@ QString NeoChatRoom::eventToString(const RoomEvent &evt, Qt::TextFormat format,
|
|||||||
[](const RoomPowerLevelsEvent &) {
|
[](const RoomPowerLevelsEvent &) {
|
||||||
return i18nc("'power level' means permission level", "changed the power levels for this room");
|
return i18nc("'power level' means permission level", "changed the power levels for this room");
|
||||||
},
|
},
|
||||||
[](const StateEventBase &e) {
|
[](const StateEvent &e) {
|
||||||
if (e.matrixType() == QLatin1String("m.room.server_acl")) {
|
if (e.matrixType() == QLatin1String("m.room.server_acl")) {
|
||||||
return i18n("changed the server access control lists for this room");
|
return i18n("changed the server access control lists for this room");
|
||||||
}
|
}
|
||||||
@@ -684,25 +686,25 @@ QString NeoChatRoom::eventToGenericString(const RoomEvent &evt) const
|
|||||||
},
|
},
|
||||||
[](const RoomMemberEvent &e) {
|
[](const RoomMemberEvent &e) {
|
||||||
switch (e.membership()) {
|
switch (e.membership()) {
|
||||||
case MembershipType::Invite:
|
case Membership::Invite:
|
||||||
if (e.repeatsState()) {
|
if (e.repeatsState()) {
|
||||||
return i18n("reinvited someone to the room");
|
return i18n("reinvited someone to the room");
|
||||||
}
|
}
|
||||||
Q_FALLTHROUGH();
|
Q_FALLTHROUGH();
|
||||||
case MembershipType::Join: {
|
case Membership::Join: {
|
||||||
QString text{};
|
QString text{};
|
||||||
// Part 1: invites and joins
|
// Part 1: invites and joins
|
||||||
if (e.repeatsState()) {
|
if (e.repeatsState()) {
|
||||||
text = i18n("joined the room (repeated)");
|
text = i18n("joined the room (repeated)");
|
||||||
} else if (e.changesMembership()) {
|
} else if (e.changesMembership()) {
|
||||||
text = e.membership() == MembershipType::Invite ? i18n("invited someone to the room") : i18n("joined the room");
|
text = e.membership() == Membership::Invite ? i18n("invited someone to the room") : i18n("joined the room");
|
||||||
}
|
}
|
||||||
if (!text.isEmpty()) {
|
if (!text.isEmpty()) {
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
// Part 2: profile changes of joined members
|
// Part 2: profile changes of joined members
|
||||||
if (e.isRename()) {
|
if (e.isRename()) {
|
||||||
if (e.displayName().isEmpty()) {
|
if (!e.newDisplayName()) {
|
||||||
text = i18nc("their refers to a singular user", "cleared their display name");
|
text = i18nc("their refers to a singular user", "cleared their display name");
|
||||||
} else {
|
} else {
|
||||||
text = i18nc("their refers to a singular user", "changed their display name");
|
text = i18nc("their refers to a singular user", "changed their display name");
|
||||||
@@ -712,7 +714,7 @@ QString NeoChatRoom::eventToGenericString(const RoomEvent &evt) const
|
|||||||
if (!text.isEmpty()) {
|
if (!text.isEmpty()) {
|
||||||
text += i18n(" and ");
|
text += i18n(" and ");
|
||||||
}
|
}
|
||||||
if (e.avatarUrl().isEmpty()) {
|
if (!e.newAvatarUrl()) {
|
||||||
text += i18nc("their refers to a singular user", "cleared their avatar");
|
text += i18nc("their refers to a singular user", "cleared their avatar");
|
||||||
} else if (!e.prevContent()->avatarUrl) {
|
} else if (!e.prevContent()->avatarUrl) {
|
||||||
text += i18n("set an avatar");
|
text += i18n("set an avatar");
|
||||||
@@ -725,22 +727,22 @@ QString NeoChatRoom::eventToGenericString(const RoomEvent &evt) const
|
|||||||
}
|
}
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
case MembershipType::Leave:
|
case Membership::Leave:
|
||||||
if (e.prevContent() && e.prevContent()->membership == MembershipType::Invite) {
|
if (e.prevContent() && e.prevContent()->membership == Membership::Invite) {
|
||||||
return (e.senderId() != e.userId()) ? i18n("withdrew a user's invitation") : i18n("rejected the invitation");
|
return (e.senderId() != e.userId()) ? i18n("withdrew a user's invitation") : i18n("rejected the invitation");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.prevContent() && e.prevContent()->membership == MembershipType::Ban) {
|
if (e.prevContent() && e.prevContent()->membership == Membership::Ban) {
|
||||||
return (e.senderId() != e.userId()) ? i18n("unbanned a user") : i18n("self-unbanned");
|
return (e.senderId() != e.userId()) ? i18n("unbanned a user") : i18n("self-unbanned");
|
||||||
}
|
}
|
||||||
return (e.senderId() != e.userId()) ? i18n("put a user out of the room") : i18n("left the room");
|
return (e.senderId() != e.userId()) ? i18n("put a user out of the room") : i18n("left the room");
|
||||||
case MembershipType::Ban:
|
case Membership::Ban:
|
||||||
if (e.senderId() != e.userId()) {
|
if (e.senderId() != e.userId()) {
|
||||||
return i18n("banned a user from the room");
|
return i18n("banned a user from the room");
|
||||||
} else {
|
} else {
|
||||||
return i18n("self-banned from the room");
|
return i18n("self-banned from the room");
|
||||||
}
|
}
|
||||||
case MembershipType::Knock: {
|
case Membership::Knock: {
|
||||||
return i18n("requested an invite");
|
return i18n("requested an invite");
|
||||||
}
|
}
|
||||||
default:;
|
default:;
|
||||||
@@ -768,7 +770,7 @@ QString NeoChatRoom::eventToGenericString(const RoomEvent &evt) const
|
|||||||
[](const RoomPowerLevelsEvent &) {
|
[](const RoomPowerLevelsEvent &) {
|
||||||
return i18nc("'power level' means permission level", "changed the power levels for this room");
|
return i18nc("'power level' means permission level", "changed the power levels for this room");
|
||||||
},
|
},
|
||||||
[](const StateEventBase &e) {
|
[](const StateEvent &e) {
|
||||||
if (e.matrixType() == QLatin1String("m.room.server_acl")) {
|
if (e.matrixType() == QLatin1String("m.room.server_acl")) {
|
||||||
return i18n("changed the server access control lists for this room");
|
return i18n("changed the server access control lists for this room");
|
||||||
}
|
}
|
||||||
@@ -904,11 +906,11 @@ void NeoChatRoom::toggleReaction(const QString &eventId, const QString &reaction
|
|||||||
|
|
||||||
QStringList redactEventIds; // What if there are multiple reaction events?
|
QStringList redactEventIds; // What if there are multiple reaction events?
|
||||||
|
|
||||||
const auto &annotations = relatedEvents(evt, EventRelation::Annotation());
|
const auto &annotations = relatedEvents(evt, EventRelation::AnnotationType);
|
||||||
if (!annotations.isEmpty()) {
|
if (!annotations.isEmpty()) {
|
||||||
for (const auto &a : annotations) {
|
for (const auto &a : annotations) {
|
||||||
if (auto e = eventCast<const ReactionEvent>(a)) {
|
if (auto e = eventCast<const ReactionEvent>(a)) {
|
||||||
if (e->relation().key != reaction) {
|
if (e->key() != reaction) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -936,7 +938,10 @@ bool NeoChatRoom::containsUser(const QString &userID) const
|
|||||||
|
|
||||||
bool NeoChatRoom::canSendEvent(const QString &eventType) const
|
bool NeoChatRoom::canSendEvent(const QString &eventType) const
|
||||||
{
|
{
|
||||||
auto plEvent = getCurrentState<RoomPowerLevelsEvent>();
|
auto plEvent = currentState().get<RoomPowerLevelsEvent>();
|
||||||
|
if (!plEvent) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
auto pl = plEvent->powerLevelForEvent(eventType);
|
auto pl = plEvent->powerLevelForEvent(eventType);
|
||||||
auto currentPl = plEvent->powerLevelForUser(localUser()->id());
|
auto currentPl = plEvent->powerLevelForUser(localUser()->id());
|
||||||
|
|
||||||
@@ -945,7 +950,10 @@ bool NeoChatRoom::canSendEvent(const QString &eventType) const
|
|||||||
|
|
||||||
bool NeoChatRoom::canSendState(const QString &eventType) const
|
bool NeoChatRoom::canSendState(const QString &eventType) const
|
||||||
{
|
{
|
||||||
auto plEvent = getCurrentState<RoomPowerLevelsEvent>();
|
auto plEvent = currentState().get<RoomPowerLevelsEvent>();
|
||||||
|
if (!plEvent) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
auto pl = plEvent->powerLevelForState(eventType);
|
auto pl = plEvent->powerLevelForState(eventType);
|
||||||
auto currentPl = plEvent->powerLevelForUser(localUser()->id());
|
auto currentPl = plEvent->powerLevelForUser(localUser()->id());
|
||||||
|
|
||||||
@@ -965,7 +973,11 @@ bool NeoChatRoom::isInvite() const
|
|||||||
|
|
||||||
bool NeoChatRoom::isUserBanned(const QString &user) const
|
bool NeoChatRoom::isUserBanned(const QString &user) const
|
||||||
{
|
{
|
||||||
return getCurrentState<RoomMemberEvent>(user)->membership() == MembershipType::Ban;
|
auto roomMemberEvent = currentState().get<RoomMemberEvent>(user);
|
||||||
|
if (!roomMemberEvent) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return roomMemberEvent->membership() == Membership::Ban;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString NeoChatRoom::htmlSafeDisplayName() const
|
QString NeoChatRoom::htmlSafeDisplayName() const
|
||||||
@@ -980,7 +992,11 @@ void NeoChatRoom::deleteMessagesByUser(const QString &user, const QString &reaso
|
|||||||
|
|
||||||
QString NeoChatRoom::joinRule() const
|
QString NeoChatRoom::joinRule() const
|
||||||
{
|
{
|
||||||
return getCurrentState<JoinRulesEvent>()->joinRule();
|
auto joinRulesEvent = currentState().get<JoinRulesEvent>();
|
||||||
|
if (joinRulesEvent) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
return joinRulesEvent->joinRule();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NeoChatRoom::setJoinRule(const QString &joinRule)
|
void NeoChatRoom::setJoinRule(const QString &joinRule)
|
||||||
@@ -1114,7 +1130,10 @@ void NeoChatRoom::setUserPowerLevel(const QString &userID, const int &powerLevel
|
|||||||
|
|
||||||
int NeoChatRoom::getUserPowerLevel(const QString &userId) const
|
int NeoChatRoom::getUserPowerLevel(const QString &userId) const
|
||||||
{
|
{
|
||||||
auto powerLevelEvent = getCurrentState<RoomPowerLevelsEvent>();
|
auto powerLevelEvent = currentState().get<RoomPowerLevelsEvent>();
|
||||||
|
if (!powerLevelEvent) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return powerLevelEvent->powerLevelForUser(userId);
|
return powerLevelEvent->powerLevelForUser(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,9 +37,12 @@ void PollHandler::setRoom(NeoChatRoom *room)
|
|||||||
connect(room, &NeoChatRoom::aboutToAddNewMessages, this, [this](Quotient::RoomEventsRange events) {
|
connect(room, &NeoChatRoom::aboutToAddNewMessages, this, [this](Quotient::RoomEventsRange events) {
|
||||||
for (const auto &event : events) {
|
for (const auto &event : events) {
|
||||||
if (event->is<PollEndEvent>()) {
|
if (event->is<PollEndEvent>()) {
|
||||||
auto pl = m_room->getCurrentState<RoomPowerLevelsEvent>();
|
auto plEvent = m_room->currentState().get<RoomPowerLevelsEvent>();
|
||||||
auto userPl = pl->powerLevelForUser(event->senderId());
|
if (!plEvent) {
|
||||||
if (event->senderId() == (*m_room->findInTimeline(m_pollStartEventId))->senderId() || userPl >= pl->redact()) {
|
continue;
|
||||||
|
}
|
||||||
|
auto userPl = plEvent->powerLevelForUser(event->senderId());
|
||||||
|
if (event->senderId() == (*m_room->findInTimeline(m_pollStartEventId))->senderId() || userPl >= plEvent->redact()) {
|
||||||
m_hasEnded = true;
|
m_hasEnded = true;
|
||||||
m_endedTimestamp = event->originTimestamp();
|
m_endedTimestamp = event->originTimestamp();
|
||||||
Q_EMIT hasEndedChanged();
|
Q_EMIT hasEndedChanged();
|
||||||
@@ -78,9 +81,12 @@ void PollHandler::checkLoadRelations()
|
|||||||
connect(job, &BaseJob::success, this, [this, job]() {
|
connect(job, &BaseJob::success, this, [this, job]() {
|
||||||
for (const auto &event : job->chunk()) {
|
for (const auto &event : job->chunk()) {
|
||||||
if (event->is<PollEndEvent>()) {
|
if (event->is<PollEndEvent>()) {
|
||||||
auto pl = m_room->getCurrentState<RoomPowerLevelsEvent>();
|
auto plEvent = m_room->currentState().get<RoomPowerLevelsEvent>();
|
||||||
auto userPl = pl->powerLevelForUser(event->senderId());
|
if (!plEvent) {
|
||||||
if (event->senderId() == (*m_room->findInTimeline(m_pollStartEventId))->senderId() || userPl >= pl->redact()) {
|
continue;
|
||||||
|
}
|
||||||
|
auto userPl = plEvent->powerLevelForUser(event->senderId());
|
||||||
|
if (event->senderId() == (*m_room->findInTimeline(m_pollStartEventId))->senderId() || userPl >= plEvent->redact()) {
|
||||||
m_hasEnded = true;
|
m_hasEnded = true;
|
||||||
m_endedTimestamp = event->originTimestamp();
|
m_endedTimestamp = event->originTimestamp();
|
||||||
Q_EMIT hasEndedChanged();
|
Q_EMIT hasEndedChanged();
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2020 Carl Schwan <carlschwan@kde.org>
|
|
||||||
// SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <Quotient/events/eventcontent.h>
|
|
||||||
#include <Quotient/events/roomevent.h>
|
|
||||||
|
|
||||||
namespace Quotient
|
|
||||||
{
|
|
||||||
/// Sticker messages are specialised image messages that are displayed without
|
|
||||||
/// controls (e.g. no "download" link, or light-box view on click, as would be
|
|
||||||
/// displayed for for m.image events).
|
|
||||||
class StickerEvent : public RoomEvent
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
#ifdef QUOTIENT_07
|
|
||||||
QUO_EVENT(StickerEvent, "m.sticker")
|
|
||||||
#else
|
|
||||||
DEFINE_EVENT_TYPEID("m.sticker", StickerEvent)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
explicit StickerEvent(const QJsonObject &obj);
|
|
||||||
|
|
||||||
/// \brief A textual representation or associated description of the
|
|
||||||
/// sticker image.
|
|
||||||
///
|
|
||||||
/// This could be the alt text of the original image, or a message to
|
|
||||||
/// accompany and further describe the sticker.
|
|
||||||
QString body() const;
|
|
||||||
|
|
||||||
/// \brief Metadata about the image referred to in url including a
|
|
||||||
/// thumbnail representation.
|
|
||||||
const EventContent::ImageContent &image() const;
|
|
||||||
|
|
||||||
/// \brief The URL to the sticker image. This must be a valid mxc:// URI.
|
|
||||||
QUrl url() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
EventContent::ImageContent m_imageContent;
|
|
||||||
};
|
|
||||||
REGISTER_EVENT_TYPE(StickerEvent)
|
|
||||||
}
|
|
||||||
@@ -19,6 +19,8 @@ TrayIcon::TrayIcon(QObject *parent)
|
|||||||
connect(&WindowController::instance(), &WindowController::windowChanged, this, [this] {
|
connect(&WindowController::instance(), &WindowController::windowChanged, this, [this] {
|
||||||
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
#if QT_VERSION > QT_VERSION_CHECK(6, 0, 0)
|
||||||
setAssociatedWindow(WindowController::instance().window());
|
setAssociatedWindow(WindowController::instance().window());
|
||||||
|
#else
|
||||||
|
Q_UNUSED(this);
|
||||||
#endif
|
#endif
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user