From 7ac27c7d7789d8e0dda018168958cf320449bcd4 Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Wed, 27 Sep 2023 15:54:22 +0300
Subject: [PATCH] Fix system notices in known users

---
 .../circles/core/extensions/MatrixSessionExtensions.kt     | 7 ++++++-
 .../circles/core/select_users/SelectUsersDataSource.kt     | 3 ++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt b/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt
index 821ca5a2a..4f96d07f6 100644
--- a/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt
+++ b/core/src/main/java/org/futo/circles/core/extensions/MatrixSessionExtensions.kt
@@ -40,6 +40,11 @@ fun Session.resolveUrl(
     }
 }
 
+fun Session.getUserIdsToExclude() = mutableListOf(
+    myUserId,
+    "@notices:" + getServerDomain()
+).toSet()
+
 fun Session.getServerDomain() = myUserId.substringAfter(":")
 
 fun Session.getKnownUsersFlow() =
@@ -49,7 +54,7 @@ fun Session.getKnownUsersFlow() =
             roomSummaries.forEach { summary ->
                 summary.otherMemberIds.forEach { knowUsers.add(getOrFetchUser(it)) }
             }
-            knowUsers.toList().filterNot { it.userId == myUserId }
+            knowUsers.toList().filterNot { getUserIdsToExclude().contains(it.userId) }
         }
 
 suspend fun Session.getOrFetchUser(userId: String): User =
diff --git a/core/src/main/java/org/futo/circles/core/select_users/SelectUsersDataSource.kt b/core/src/main/java/org/futo/circles/core/select_users/SelectUsersDataSource.kt
index e6652582e..7b604713a 100644
--- a/core/src/main/java/org/futo/circles/core/select_users/SelectUsersDataSource.kt
+++ b/core/src/main/java/org/futo/circles/core/select_users/SelectUsersDataSource.kt
@@ -7,6 +7,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.distinctUntilChanged
 import kotlinx.coroutines.flow.flowOn
+import org.futo.circles.core.extensions.getUserIdsToExclude
 import org.futo.circles.core.mapping.toUserListItem
 import org.futo.circles.core.model.CirclesUserSummary
 import org.futo.circles.core.model.HeaderItem
@@ -33,7 +34,7 @@ class SelectUsersDataSource @Inject constructor(
     private val room = session?.getRoom(roomId ?: "")
 
     private val existingMembersIds = mutableListOf<String>().apply {
-        session?.myUserId?.let { add(it)}
+        addAll(session?.getUserIdsToExclude() ?: emptySet())
         addAll(room?.membershipService()?.getRoomMembers(
             roomMemberQueryParams {
                 memberships = listOf(Membership.JOIN, Membership.INVITE, Membership.BAN)
-- 
GitLab