diff --git a/src/api/conversation.h b/src/api/conversation.h index ebaa06ffb53d617b97210992423a080f1491c469..fad439b5d82c913f8d17573b04e14e9ef6966c5a 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 bb97a27988d7b52cf2e3e366dcf4113f66c140ef..d1d03dc5e90ef11ec59bcb2484106e37f70e3138 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()