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:
Aditya Wasan 2021-02-05 15:00:23 +05:30
parent 9ce33bba75
commit 0fcf584b01
No known key found for this signature in database
GPG key ID: 6D6DF3BF15DE79B5
4 changed files with 32 additions and 8 deletions

View file

@ -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
}

View file

@ -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)
}
}

View file

@ -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) {