aboutsummaryrefslogtreecommitdiff
path: root/lib/room.cpp
diff options
context:
space:
mode:
authorAlexey Rusakov <Kitsune-Ral@users.sf.net>2021-07-24 20:56:50 +0200
committerAlexey Rusakov <Kitsune-Ral@users.sf.net>2021-07-24 20:56:50 +0200
commitcddf3c6a2ab7481e5816ca7632b9f919efa0ac40 (patch)
tree036840ccd377d58717c2a6552652708c91d293b1 /lib/room.cpp
parentf340d73ae5dac0d0cfee732aabbd5222c7be16dd (diff)
downloadlibquotient-cddf3c6a2ab7481e5816ca7632b9f919efa0ac40.tar.gz
libquotient-cddf3c6a2ab7481e5816ca7632b9f919efa0ac40.zip
Wrap SyncRoomData counters into Omittables
Also: introduce a merge(T1&, const Omittable<T2>&) that does pretty much the same as Omittable<T1>::merge(const Omittable<T2>&) except it works on non-omittables as the left/first operand. The change removes the need for a clumsy -2 fallback in unreadCount, and makes the logic loading those counters cleaner along the way.
Diffstat (limited to 'lib/room.cpp')
-rw-r--r--lib/room.cpp16
1 files changed, 7 insertions, 9 deletions
diff --git a/lib/room.cpp b/lib/room.cpp
index 54c67c2f..076fd8c8 100644
--- a/lib/room.cpp
+++ b/lib/room.cpp
@@ -1570,20 +1570,18 @@ void Room::updateData(SyncRoomData&& data, bool fromCache)
roomChanges |= processEphemeralEvent(move(ephemeralEvent));
// See https://github.com/quotient-im/libQuotient/wiki/unread_count
- if (data.unreadCount != -2 && data.unreadCount != d->unreadMessages) {
- qCDebug(MESSAGES) << "Setting unread_count to" << data.unreadCount;
- d->unreadMessages = data.unreadCount;
+ if (merge(d->unreadMessages, data.unreadCount)) {
+ qCDebug(MESSAGES) << "Loaded unread_count:" << *data.unreadCount //
+ << "in" << objectName();
emit unreadMessagesChanged(this);
}
- if (data.highlightCount != d->highlightCount) {
- d->highlightCount = data.highlightCount;
+ if (merge(d->highlightCount, data.highlightCount))
emit highlightCountChanged();
- }
- if (data.notificationCount != d->notificationCount) {
- d->notificationCount = data.notificationCount;
+
+ if (merge(d->notificationCount, data.notificationCount))
emit notificationCountChanged();
- }
+
if (roomChanges != Change::NoChange) {
d->updateDisplayname();
emit changed(roomChanges);