Skip to content

Commit d3830a1

Browse files
authored
Merge pull request #1048 from tunjid/tj/list-member-record
Move listMembers method to ListRepository
2 parents 408ddbd + 9295df3 commit d3830a1

File tree

4 files changed

+60
-57
lines changed

4 files changed

+60
-57
lines changed

data/core/src/commonMain/kotlin/com/tunjid/heron/data/repository/ProfileRepository.kt

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,6 @@ interface ProfileRepository {
115115
limit: Long,
116116
): Flow<List<Profile>>
117117

118-
fun listMembers(
119-
query: ListMemberQuery,
120-
cursor: Cursor,
121-
): Flow<CursorList<ListMember>>
122-
123118
fun followers(
124119
query: ProfilesQuery,
125120
cursor: Cursor,
@@ -218,50 +213,6 @@ internal class OfflineProfileRepository @Inject constructor(
218213
}
219214
}
220215

221-
override fun listMembers(
222-
query: ListMemberQuery,
223-
cursor: Cursor,
224-
): Flow<CursorList<ListMember>> =
225-
savedStateDataSource.singleAuthorizedSessionFlow { signedInProfileId ->
226-
combine(
227-
listDao.listMembers(
228-
listUri = query.listUri.uri,
229-
signedInUserId = signedInProfileId.id,
230-
offset = query.data.offset,
231-
limit = query.data.limit,
232-
)
233-
.map {
234-
it.map(PopulatedListMemberEntity::asExternalModel)
235-
},
236-
networkService.nextCursorFlow(
237-
currentCursor = cursor,
238-
currentRequestWithNextCursor = {
239-
getList(
240-
GetListQueryParams(
241-
list = query.listUri.uri.let(::AtUri),
242-
limit = query.data.limit,
243-
cursor = cursor.value,
244-
),
245-
)
246-
},
247-
nextCursor = GetListResponse::cursor,
248-
onResponse = {
249-
multipleEntitySaverProvider.saveInTransaction {
250-
add(list)
251-
items.forEach { listItemView ->
252-
add(
253-
listUri = list.uri.atUri.let(::ListUri),
254-
listItemView = listItemView,
255-
)
256-
}
257-
}
258-
},
259-
),
260-
::CursorList,
261-
)
262-
.distinctUntilChanged()
263-
}
264-
265216
override fun followers(
266217
query: ProfilesQuery,
267218
cursor: Cursor,

data/core/src/commonMain/kotlin/com/tunjid/heron/data/repository/RecordRepository.kt

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import app.bsky.graph.GetActorStarterPacksQueryParams
2323
import app.bsky.graph.GetActorStarterPacksResponse
2424
import app.bsky.graph.GetBlocksQueryParams
2525
import app.bsky.graph.GetBlocksResponse
26+
import app.bsky.graph.GetListQueryParams
27+
import app.bsky.graph.GetListResponse
2628
import app.bsky.graph.GetListsQueryParams
2729
import app.bsky.graph.GetListsResponse
2830
import com.atproto.repo.CreateRecordRequest
@@ -35,6 +37,7 @@ import com.tunjid.heron.data.core.models.DataQuery
3537
import com.tunjid.heron.data.core.models.FeedGenerator
3638
import com.tunjid.heron.data.core.models.FeedList
3739
import com.tunjid.heron.data.core.models.Labeler
40+
import com.tunjid.heron.data.core.models.ListMember
3841
import com.tunjid.heron.data.core.models.ProfileWithViewerState
3942
import com.tunjid.heron.data.core.models.Record
4043
import com.tunjid.heron.data.core.models.StarterPack
@@ -56,6 +59,7 @@ import com.tunjid.heron.data.database.daos.PostDao
5659
import com.tunjid.heron.data.database.daos.StarterPackDao
5760
import com.tunjid.heron.data.database.entities.PopulatedFeedGeneratorEntity
5861
import com.tunjid.heron.data.database.entities.PopulatedListEntity
62+
import com.tunjid.heron.data.database.entities.PopulatedListMemberEntity
5963
import com.tunjid.heron.data.database.entities.PopulatedStarterPackEntity
6064
import com.tunjid.heron.data.database.entities.asExternalModel
6165
import com.tunjid.heron.data.di.AppMainScope
@@ -84,6 +88,7 @@ import kotlinx.coroutines.flow.emptyFlow
8488
import kotlinx.coroutines.flow.filterNotNull
8589
import kotlinx.coroutines.flow.map
8690
import kotlinx.coroutines.flow.stateIn
91+
import sh.christian.ozone.api.AtUri
8792
import sh.christian.ozone.api.Did
8893
import sh.christian.ozone.api.Nsid
8994
import sh.christian.ozone.api.RKey
@@ -113,6 +118,11 @@ interface RecordRepository {
113118
cursor: Cursor,
114119
): Flow<CursorList<FeedList>>
115120

121+
fun listMembers(
122+
query: ListMemberQuery,
123+
cursor: Cursor,
124+
): Flow<CursorList<ListMember>>
125+
116126
fun feedGenerators(
117127
query: ProfilesQuery,
118128
cursor: Cursor,
@@ -303,6 +313,50 @@ internal class OfflineRecordRepository @Inject constructor(
303313
.distinctUntilChanged()
304314
}
305315

316+
override fun listMembers(
317+
query: ListMemberQuery,
318+
cursor: Cursor,
319+
): Flow<CursorList<ListMember>> =
320+
savedStateDataSource.singleAuthorizedSessionFlow { signedInProfileId ->
321+
combine(
322+
listDao.listMembers(
323+
listUri = query.listUri.uri,
324+
signedInUserId = signedInProfileId.id,
325+
offset = query.data.offset,
326+
limit = query.data.limit,
327+
)
328+
.map {
329+
it.map(PopulatedListMemberEntity::asExternalModel)
330+
},
331+
networkService.nextCursorFlow(
332+
currentCursor = cursor,
333+
currentRequestWithNextCursor = {
334+
getList(
335+
GetListQueryParams(
336+
list = query.listUri.uri.let(::AtUri),
337+
limit = query.data.limit,
338+
cursor = cursor.value,
339+
),
340+
)
341+
},
342+
nextCursor = GetListResponse::cursor,
343+
onResponse = {
344+
multipleEntitySaverProvider.saveInTransaction {
345+
add(list)
346+
items.forEach { listItemView ->
347+
add(
348+
listUri = list.uri.atUri.let(::ListUri),
349+
listItemView = listItemView,
350+
)
351+
}
352+
}
353+
},
354+
),
355+
::CursorList,
356+
)
357+
.distinctUntilChanged()
358+
}
359+
306360
override fun feedGenerators(
307361
query: ProfilesQuery,
308362
cursor: Cursor,

feature/list/src/commonMain/kotlin/com/tunjid/heron/list/ListViewModel.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ class ActualListViewModel(
123123
request = route.timelineRequest,
124124
scope = scope,
125125
timelineRepository = timelineRepository,
126-
profileRepository = profileRepository,
126+
recordRepository = recordRepository,
127127
authRepository = authRepository,
128128
),
129129
actions.toMutationStream(
@@ -253,7 +253,7 @@ private fun SuspendingStateHolder<State>.listMemberStateHolderMutations(
253253
request: TimelineRequest.OfList,
254254
scope: CoroutineScope,
255255
timelineRepository: TimelineRepository,
256-
profileRepository: ProfileRepository,
256+
recordRepository: RecordRepository,
257257
authRepository: AuthRepository,
258258
): Flow<Mutation<State>> = flow {
259259
val existingHolder = state().stateHolders
@@ -293,7 +293,7 @@ private fun SuspendingStateHolder<State>.listMemberStateHolderMutations(
293293
currentState = { state() },
294294
updateQueryData = { copy(data = it) },
295295
refreshQuery = { copy(data = data.reset()) },
296-
cursorListLoader = profileRepository::listMembers,
296+
cursorListLoader = recordRepository::listMembers,
297297
onNewItems = { items ->
298298
items.distinctBy(ListMember::uri)
299299
},

feature/search/src/commonMain/kotlin/com/tunjid/heron/search/SearchViewModel.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import com.tunjid.heron.data.core.models.timelineRecordUri
2626
import com.tunjid.heron.data.repository.AuthRepository
2727
import com.tunjid.heron.data.repository.ListMemberQuery
2828
import com.tunjid.heron.data.repository.MessageRepository
29-
import com.tunjid.heron.data.repository.ProfileRepository
3029
import com.tunjid.heron.data.repository.RecordRepository
3130
import com.tunjid.heron.data.repository.SearchQuery
3231
import com.tunjid.heron.data.repository.SearchRepository
@@ -91,7 +90,6 @@ class SearchViewModel(
9190
messageRepository: MessageRepository,
9291
recordRepository: RecordRepository,
9392
searchRepository: SearchRepository,
94-
profileRepository: ProfileRepository,
9593
timelineRepository: TimelineRepository,
9694
userDataRepository: UserDataRepository,
9795
writeQueue: WriteQueue,
@@ -119,7 +117,7 @@ class SearchViewModel(
119117
trendsMutations(searchRepository),
120118
suggestedStarterPackMutations(
121119
searchRepository = searchRepository,
122-
profileRepository = profileRepository,
120+
recordRepository = recordRepository,
123121
),
124122
suggestedFeedGeneratorMutations(
125123
searchRepository = searchRepository,
@@ -226,13 +224,13 @@ private fun trendsMutations(
226224

227225
private fun suggestedStarterPackMutations(
228226
searchRepository: SearchRepository,
229-
profileRepository: ProfileRepository,
227+
recordRepository: RecordRepository,
230228
): Flow<Mutation<State>> =
231229
searchRepository.suggestedStarterPacks()
232230
.flatMapLatest { starterPacks ->
233231
val starterPackListUris = starterPacks.mapNotNull { it.list?.uri }
234232
val listMembersFlow = starterPackListUris.map { listUri ->
235-
profileRepository.listMembers(
233+
recordRepository.listMembers(
236234
query = ListMemberQuery(
237235
listUri = listUri,
238236
data = CursorQuery.Data(

0 commit comments

Comments
 (0)