@@ -29,16 +29,13 @@ import im.vector.app.core.di.hiltMavericksViewModelFactory
29
29
import im.vector.app.core.platform.VectorViewModel
30
30
import im.vector.app.features.analytics.AnalyticsTracker
31
31
import im.vector.app.features.analytics.plan.Interaction
32
- import im.vector.app.features.invite.AutoAcceptInvites
33
32
import im.vector.app.features.session.coroutineScope
34
33
import im.vector.app.features.settings.VectorPreferences
35
- import kotlinx.coroutines.Dispatchers
34
+ import im.vector.app.features.spaces.notification.GetNotificationCountForSpacesUseCase
36
35
import kotlinx.coroutines.flow.combine
37
36
import kotlinx.coroutines.flow.distinctUntilChanged
38
- import kotlinx.coroutines.flow.flowOn
39
37
import kotlinx.coroutines.flow.launchIn
40
38
import kotlinx.coroutines.flow.onEach
41
- import kotlinx.coroutines.flow.sample
42
39
import kotlinx.coroutines.launch
43
40
import org.matrix.android.sdk.api.extensions.tryOrNull
44
41
import org.matrix.android.sdk.api.query.QueryStringValue
@@ -48,25 +45,22 @@ import org.matrix.android.sdk.api.session.events.model.toContent
48
45
import org.matrix.android.sdk.api.session.events.model.toModel
49
46
import org.matrix.android.sdk.api.session.getRoom
50
47
import org.matrix.android.sdk.api.session.getUserOrDefault
51
- import org.matrix.android.sdk.api.session.room.RoomSortOrder
52
48
import org.matrix.android.sdk.api.session.room.accountdata.RoomAccountDataTypes
53
49
import org.matrix.android.sdk.api.session.room.model.Membership
54
- import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
55
50
import org.matrix.android.sdk.api.session.room.spaceSummaryQueryParams
56
- import org.matrix.android.sdk.api.session.room.summary.RoomAggregateNotificationCount
57
51
import org.matrix.android.sdk.api.session.space.SpaceOrderUtils
58
52
import org.matrix.android.sdk.api.session.space.model.SpaceOrderContent
59
53
import org.matrix.android.sdk.api.session.space.model.TopLevelSpaceComparator
60
54
import org.matrix.android.sdk.api.util.toMatrixItem
61
- import org.matrix.android.sdk.flow.flow
62
55
63
56
class SpaceListViewModel @AssistedInject constructor(
64
57
@Assisted initialState : SpaceListViewState ,
65
58
private val spaceStateHandler : SpaceStateHandler ,
66
59
private val session : Session ,
67
60
private val vectorPreferences : VectorPreferences ,
68
- private val autoAcceptInvites : AutoAcceptInvites ,
69
61
private val analyticsTracker : AnalyticsTracker ,
62
+ getNotificationCountForSpacesUseCase : GetNotificationCountForSpacesUseCase ,
63
+ private val getSpacesUseCase : GetSpacesUseCase ,
70
64
) : VectorViewModel<SpaceListViewState, SpaceListAction, SpaceListViewEvents>(initialState) {
71
65
72
66
@AssistedFactory
@@ -92,39 +86,14 @@ class SpaceListViewModel @AssistedInject constructor(
92
86
copy(selectedSpace = selectedSpaceOption.orNull())
93
87
}
94
88
95
- // XXX there should be a way to refactor this and share it
96
- session.roomService().getPagedRoomSummariesLive(
97
- roomSummaryQueryParams {
98
- this .memberships = listOf (Membership .JOIN )
99
- this .spaceFilter = roomsInSpaceFilter()
100
- }, sortOrder = RoomSortOrder .NONE
101
- ).asFlow()
102
- .sample(300 )
103
- .onEach {
104
- val inviteCount = if (autoAcceptInvites.hideInvites) {
105
- 0
106
- } else {
107
- session.roomService().getRoomSummaries(
108
- roomSummaryQueryParams { this .memberships = listOf (Membership .INVITE ) }
109
- ).size
110
- }
111
- val totalCount = session.roomService().getNotificationCountForRooms(
112
- roomSummaryQueryParams {
113
- this .memberships = listOf (Membership .JOIN )
114
- this .spaceFilter = roomsInSpaceFilter()
115
- }
116
- )
117
- val counts = RoomAggregateNotificationCount (
118
- totalCount.notificationCount + inviteCount,
119
- totalCount.highlightCount + inviteCount
120
- )
89
+ getNotificationCountForSpacesUseCase.execute(roomsInSpaceFilter())
90
+ .onEach { counts ->
121
91
setState {
122
92
copy(
123
93
homeAggregateCount = counts
124
94
)
125
95
}
126
96
}
127
- .flowOn(Dispatchers .Default )
128
97
.launchIn(viewModelScope)
129
98
}
130
99
@@ -267,7 +236,7 @@ class SpaceListViewModel @AssistedInject constructor(
267
236
}
268
237
269
238
combine(
270
- session.flow().liveSpaceSummaries (params),
239
+ getSpacesUseCase.execute (params),
271
240
session.accountDataService()
272
241
.getLiveRoomAccountDataEvents(setOf (RoomAccountDataTypes .EVENT_TYPE_SPACE_ORDER ))
273
242
.asFlow()
0 commit comments