From 33a082c535fbfbfc67d54db3e2783f00c634e28e Mon Sep 17 00:00:00 2001
From: Taras Smakula <tarassmakula@gmail.com>
Date: Fri, 29 Sep 2023 14:42:06 +0300
Subject: [PATCH] Improve isCircleShared check

---
 .../futo/circles/feature/circles/CirclesDataSource.kt | 11 +++++++----
 .../circles/core/room/update/UpdateRoomDataSource.kt  |  7 +++++--
 .../circles/core/workspace/SharedCircleDataSource.kt  | 11 ++++++-----
 3 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt b/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt
index 2f5555fbc..f876fe84b 100644
--- a/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt
+++ b/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt
@@ -46,10 +46,13 @@ class CirclesDataSource @Inject constructor(
         val joinedCirclesSpaceIds = getJoinedCirclesIds()
         val joinedCircles = list.filter { isJoinedCircle(it, joinedCirclesSpaceIds) }
 
-        val sharedCircles =
-            joinedCircles.filter { joinedCircle ->
-                sharedCircleDataSource.isCircleShared(joinedCircle.roomId)
-            }
+        val sharedCirclesTimelinesIds = sharedCircleDataSource.getSharedCirclesTimelinesIds()
+        val sharedCircles = joinedCircles.filter { joinedCircle ->
+            sharedCircleDataSource.isCircleShared(
+                joinedCircle.roomId,
+                sharedCirclesTimelinesIds
+            )
+        }
         val privateCircles = joinedCircles - sharedCircles.toSet()
         val requests = getKnockRequestToSharedTimelines(joinedCircles)
 
diff --git a/core/src/main/java/org/futo/circles/core/room/update/UpdateRoomDataSource.kt b/core/src/main/java/org/futo/circles/core/room/update/UpdateRoomDataSource.kt
index 1df0a2058..04f5f0604 100644
--- a/core/src/main/java/org/futo/circles/core/room/update/UpdateRoomDataSource.kt
+++ b/core/src/main/java/org/futo/circles/core/room/update/UpdateRoomDataSource.kt
@@ -50,9 +50,12 @@ class UpdateRoomDataSource @Inject constructor(
     fun isTopicChanged(newTopic: String) = room?.roomSummary()?.topic != newTopic
 
     fun isPrivateSharedChanged(isPublic: Boolean) = room?.roomId?.let {
-        sharedCircleDataSource.isCircleShared(it) != isPublic
+        isCircleShared(it) != isPublic
     } ?: false
 
-    fun isCircleShared(circleId: String) = sharedCircleDataSource.isCircleShared(circleId)
+    fun isCircleShared(circleId: String) = sharedCircleDataSource.isCircleShared(
+        circleId,
+        sharedCircleDataSource.getSharedCirclesTimelinesIds()
+    )
 
 }
\ No newline at end of file
diff --git a/core/src/main/java/org/futo/circles/core/workspace/SharedCircleDataSource.kt b/core/src/main/java/org/futo/circles/core/workspace/SharedCircleDataSource.kt
index abf48e679..e7253a585 100644
--- a/core/src/main/java/org/futo/circles/core/workspace/SharedCircleDataSource.kt
+++ b/core/src/main/java/org/futo/circles/core/workspace/SharedCircleDataSource.kt
@@ -33,11 +33,12 @@ class SharedCircleDataSource @Inject constructor(
                     getRoomOwners(summary.roomId).map { it.userId }.contains(userId)
         }
 
-    fun isCircleShared(circleId: String): Boolean {
+    fun getSharedCirclesTimelinesIds() = getSharedCirclesSpaceId()?.let {
+        MatrixSessionProvider.currentSession?.getRoomSummary(it)?.spaceChildren?.map { it.childRoomId }
+    } ?: emptyList()
+
+    fun isCircleShared(circleId: String, sharedCirclesTimelineIds: List<String>): Boolean {
         val timelineId = getTimelineRoomFor(circleId)?.roomId
-        val sharedCirclesTimelinesIds = getSharedCirclesSpaceId()?.let {
-            MatrixSessionProvider.currentSession?.getRoomSummary(it)?.spaceChildren?.map { it.childRoomId }
-        } ?: emptyList()
-        return sharedCirclesTimelinesIds.contains(timelineId)
+        return sharedCirclesTimelineIds.contains(timelineId)
     }
 }
\ No newline at end of file
-- 
GitLab