mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-18 00:57:02 +05:30
src: make LobstersRepository a singleton
Earlier both LobstersViewModel and LobstersPagingSource were getting a different instance of LobstersRepository. This lead to cache issues where LobstersPagingSource filled the cache but it was not available to the LobstersViewModel. Signed-off-by: Aditya Wasan <adityawasan55@gmail.com>
This commit is contained in:
parent
9ce33bba75
commit
0fcf584b01
4 changed files with 32 additions and 8 deletions
|
@ -7,9 +7,8 @@ import kotlinx.coroutines.Dispatchers
|
|||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.withContext
|
||||
import javax.inject.Inject
|
||||
|
||||
class LobstersRepository @Inject constructor(
|
||||
class LobstersRepository constructor(
|
||||
private val lobstersApi: LobstersApi,
|
||||
private val lobstersDatabase: LobstersDatabase,
|
||||
) {
|
||||
|
@ -39,7 +38,7 @@ class LobstersRepository @Inject constructor(
|
|||
val posts = getAllPosts()
|
||||
|
||||
posts.forEach {
|
||||
savedPostsCache.putIfAbsent(it.short_id, it)
|
||||
savedPostsCache[it.short_id] = it
|
||||
}
|
||||
_isCacheReady.value = true
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package dev.msfjarvis.lobsters.injection
|
||||
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import dev.msfjarvis.lobsters.data.api.LobstersApi
|
||||
import dev.msfjarvis.lobsters.data.repo.LobstersRepository
|
||||
import dev.msfjarvis.lobsters.database.LobstersDatabase
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
object RepositoryModule {
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
fun provideLobstersRepository(
|
||||
lobstersApi: LobstersApi,
|
||||
lobstersDatabase: LobstersDatabase
|
||||
): LobstersRepository {
|
||||
return LobstersRepository(lobstersApi, lobstersDatabase)
|
||||
}
|
||||
}
|
|
@ -11,6 +11,7 @@ import dev.msfjarvis.lobsters.data.remote.LobstersPagingSource
|
|||
import dev.msfjarvis.lobsters.data.repo.LobstersRepository
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
@ -27,11 +28,11 @@ class LobstersViewModel @Inject constructor(
|
|||
}.flow.cachedIn(viewModelScope)
|
||||
|
||||
init {
|
||||
viewModelScope.launch {
|
||||
lobstersRepository.isCacheReady.onEach {
|
||||
lobstersRepository.isCacheReady.onEach { ready ->
|
||||
if (ready) {
|
||||
_savedPosts.value = lobstersRepository.getAllPostsFromCache()
|
||||
}
|
||||
}
|
||||
}.launchIn(viewModelScope)
|
||||
}
|
||||
|
||||
fun toggleSave(post: LobstersPost) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue