From c8b7a0a7718dee76dda6e2d9434b7d831495f160 Mon Sep 17 00:00:00 2001 From: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> Date: Thu, 29 Jul 2021 16:10:39 -0400 Subject: [PATCH] swarm: track read-only status for a conversation If all other members have left the conversation, set a flag to indicate a read-only status to be consumed by the UI. Change-Id: I737688e52a2e28b30fb2f1a74ca5167c9c72911f https://git.jami.net/savoirfairelinux/jami-client-qt/-/issues/475 --- src/api/conversation.h | 1 + src/conversationmodel.cpp | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/api/conversation.h b/src/api/conversation.h index ebaa06ff..fad439b5 100644 --- a/src/api/conversation.h +++ b/src/api/conversation.h @@ -86,6 +86,7 @@ struct Info Mode mode = Mode::NON_SWARM; bool needsSyncing = false; bool isRequest = false; + bool readOnly = false; }; } // namespace conversation diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp index bb97a279..d1d03dc5 100644 --- a/src/conversationmodel.cpp +++ b/src/conversationmodel.cpp @@ -2482,13 +2482,17 @@ ConversationModelPimpl::slotConversationMemberEvent(const QString& accountId, const VectorMapStringString& members = ConfigurationManager::instance().getConversationMembers(linked.owner.id, conversationId); VectorString uris; - + VectorString membersRemaining; for (auto& member : members) { uris.append(member["uri"]); + if (member["role"] != "left") + membersRemaining.append(member["uri"]); } conversation.participants = uris; + conversation.readOnly = membersRemaining == VectorString(1, linked.owner.profileInfo.uri); invalidateModel(); - emit linked.modelChanged(); + Q_EMIT linked.modelChanged(); + Q_EMIT linked.conversationUpdated(conversationId); Q_EMIT linked.dataChanged(indexOf(conversationId)); } @@ -2722,6 +2726,7 @@ ConversationModelPimpl::addSwarmConversation(const QString& convId) conversation.uid = convId; conversation.accountId = linked.owner.id; QString lastRead; + VectorString membersRemaining; for (auto& member : members) { // this check should be removed once all usage of participants replaced by // peersForConversation. We should have ourself in participants list @@ -2733,7 +2738,10 @@ ConversationModelPimpl::addSwarmConversation(const QString& convId) lastRead = member["lastDisplayed"]; } conversation.lastDisplayedMessageUid.emplace(member["uri"], member["lastDisplayed"]); + if (member["role"] != "left") + membersRemaining.append(member["uri"]); } + conversation.readOnly = membersRemaining == VectorString(1, accountURI); conversation.participants = participants; conversation.mode = mode; conversation.unreadMessages = ConfigurationManager::instance() -- GitLab