aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/events/accountdataevents.h1
-rw-r--r--lib/jobs/basejob.cpp3
-rw-r--r--lib/jobs/basejob.h1
-rw-r--r--lib/room.cpp5
-rw-r--r--lib/room.h2
5 files changed, 12 insertions, 0 deletions
diff --git a/lib/events/accountdataevents.h b/lib/events/accountdataevents.h
index a8df08a5..31176766 100644
--- a/lib/events/accountdataevents.h
+++ b/lib/events/accountdataevents.h
@@ -27,6 +27,7 @@
namespace Quotient {
constexpr const char* FavouriteTag = "m.favourite";
constexpr const char* LowPriorityTag = "m.lowpriority";
+constexpr const char* ServerNoticeTag = "m.server_notice";
struct TagRecord {
using order_type = Omittable<float>;
diff --git a/lib/jobs/basejob.cpp b/lib/jobs/basejob.cpp
index ec6b8375..5930e8b8 100644
--- a/lib/jobs/basejob.cpp
+++ b/lib/jobs/basejob.cpp
@@ -426,6 +426,9 @@ BaseJob::Status BaseJob::parseError(QNetworkReply* reply,
? tr("Requested room version: %1")
.arg(errorJson.value("room_version"_ls).toString())
: errorJson.value("error"_ls).toString() };
+ if (errCode == "M_CANNOT_LEAVE_SERVER_NOTICE_ROOM")
+ return { CannotLeaveRoom,
+ tr("It's not allowed to leave a server notices room") };
// Not localisable on the client side
if (errorJson.contains("error"_ls))
diff --git a/lib/jobs/basejob.h b/lib/jobs/basejob.h
index 90c20c37..68467d48 100644
--- a/lib/jobs/basejob.h
+++ b/lib/jobs/basejob.h
@@ -76,6 +76,7 @@ public:
NetworkAuthRequiredError = NetworkAuthRequired,
UserConsentRequired,
UserConsentRequiredError = UserConsentRequired,
+ CannotLeaveRoom,
UserDefinedError = 256
};
diff --git a/lib/room.cpp b/lib/room.cpp
index f70e0b0e..bee9e9cb 100644
--- a/lib/room.cpp
+++ b/lib/room.cpp
@@ -951,6 +951,11 @@ bool Room::isFavourite() const { return d->tags.contains(FavouriteTag); }
bool Room::isLowPriority() const { return d->tags.contains(LowPriorityTag); }
+bool Room::isServerNoticeRoom() const
+{
+ return d->tags.contains(ServerNoticeTag);
+}
+
bool Room::isDirectChat() const { return connection()->isDirectChat(id()); }
QList<User*> Room::directChatUsers() const
diff --git a/lib/room.h b/lib/room.h
index 8448815d..2139f28b 100644
--- a/lib/room.h
+++ b/lib/room.h
@@ -389,6 +389,8 @@ public:
bool isFavourite() const;
/// Check whether the list of tags has m.lowpriority
bool isLowPriority() const;
+ /// Check whether this room is for server notices (MSC1452)
+ bool isServerNoticeRoom() const;
/// Check whether this room is a direct chat
Q_INVOKABLE bool isDirectChat() const;