diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt index da0e18a2..ee50f56e 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/LobstersPagingSource.kt @@ -16,11 +16,13 @@ import dagger.assisted.AssistedInject import dev.msfjarvis.claw.android.viewmodel.ReadPostsRepository import dev.msfjarvis.claw.android.viewmodel.SavedPostsRepository import dev.msfjarvis.claw.core.injection.IODispatcher +import dev.msfjarvis.claw.database.local.SavedPost import dev.msfjarvis.claw.model.LobstersPost import dev.msfjarvis.claw.model.UIPost import dev.msfjarvis.claw.model.toUIPost import java.io.IOException import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.flow.first import kotlinx.coroutines.withContext class LobstersPagingSource @@ -31,8 +33,16 @@ constructor( private val savedPostsRepository: SavedPostsRepository, private val readPostsRepository: ReadPostsRepository, ) : PagingSource() { + private lateinit var savedPosts: List + private lateinit var readPosts: List override suspend fun load(params: LoadParams): LoadResult { + if (!::savedPosts.isInitialized) { + savedPosts = savedPostsRepository.savedPosts.first().map(SavedPost::shortId) + } + if (!::readPosts.isInitialized) { + readPosts = readPostsRepository.readPosts.first() + } val page = params.key ?: STARTING_PAGE_INDEX return when (val result = withContext(ioDispatcher) { remoteFetcher.getItemsAtPage(page) }) { is Success -> @@ -43,8 +53,8 @@ constructor( it .toUIPost() .copy( - isSaved = savedPostsRepository.isPostSaved(it.shortId), - isRead = readPostsRepository.isPostRead(it.shortId), + isSaved = savedPosts.contains(it.shortId), + isRead = readPosts.contains(it.shortId), ) }, prevKey = if (page == STARTING_PAGE_INDEX) null else page - 1, diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/SearchPagingSource.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/SearchPagingSource.kt index 57519df7..35ec2204 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/SearchPagingSource.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/paging/SearchPagingSource.kt @@ -18,10 +18,12 @@ import dev.msfjarvis.claw.android.viewmodel.ReadPostsRepository import dev.msfjarvis.claw.android.viewmodel.SavedPostsRepository import dev.msfjarvis.claw.api.LobstersSearchApi import dev.msfjarvis.claw.core.injection.IODispatcher +import dev.msfjarvis.claw.database.local.SavedPost import dev.msfjarvis.claw.model.UIPost import dev.msfjarvis.claw.model.toUIPost import java.io.IOException import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.flow.first import kotlinx.coroutines.withContext /** @@ -39,8 +41,16 @@ constructor( private val savedPostsRepository: SavedPostsRepository, private val readPostsRepository: ReadPostsRepository, ) : PagingSource() { + private lateinit var savedPosts: List + private lateinit var readPosts: List override suspend fun load(params: LoadParams): LoadResult { + if (!::savedPosts.isInitialized) { + savedPosts = savedPostsRepository.savedPosts.first().map(SavedPost::shortId) + } + if (!::readPosts.isInitialized) { + readPosts = readPostsRepository.readPosts.first() + } val searchQuery = queryProvider() // If there is no query, we don't need to call the API at all. if (searchQuery.isEmpty()) { @@ -60,8 +70,8 @@ constructor( it .toUIPost() .copy( - isSaved = savedPostsRepository.isPostSaved(it.shortId), - isRead = readPostsRepository.isPostRead(it.shortId), + isSaved = savedPosts.contains(it.shortId), + isRead = readPosts.contains(it.shortId), ) }, prevKey = if (page == STARTING_PAGE_INDEX) null else page - 1, diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ReadPostsRepository.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ReadPostsRepository.kt index de236c31..2b5606a1 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ReadPostsRepository.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/ReadPostsRepository.kt @@ -25,8 +25,4 @@ constructor( suspend fun markRead(postId: String) { withContext(dbDispatcher) { readPostsQueries.markRead(postId) } } - - suspend fun isPostRead(shortId: String): Boolean { - return withContext(dbDispatcher) { readPostsQueries.isPostRead(shortId).executeAsOne() } - } } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt index 15ee0728..9e8e9ba9 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/viewmodel/SavedPostsRepository.kt @@ -45,10 +45,6 @@ constructor( } } - suspend fun isPostSaved(postId: String): Boolean { - return withContext(dbDispatcher) { savedPostQueries.isPostSaved(postId).executeAsOne() } - } - private companion object { private const val TAG = "SavedPostsRepository" } diff --git a/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/ReadPosts.sq b/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/ReadPosts.sq index b40f7b98..5b2f4ea8 100644 --- a/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/ReadPosts.sq +++ b/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/ReadPosts.sq @@ -2,13 +2,6 @@ CREATE TABLE IF NOT EXISTS ReadPosts( id TEXT NOT NULL PRIMARY KEY ); -isPostRead: -SELECT EXISTS( - SELECT 1 - FROM ReadPosts - WHERE id = ? -) AS isRead; - selectAllPosts: SELECT * FROM ReadPosts; diff --git a/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/SavedPost.sq b/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/SavedPost.sq index b31bea9f..84dec796 100644 --- a/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/SavedPost.sq +++ b/database/core/src/main/sqldelight/dev/msfjarvis/claw/database/local/SavedPost.sq @@ -14,13 +14,6 @@ CREATE TABLE IF NOT EXISTS SavedPost( description TEXT NOT NULL DEFAULT "" ); -isPostSaved: -SELECT EXISTS( - SELECT 1 - FROM SavedPost - WHERE shortId = ? -) AS isSaved; - insertOrReplacePost: INSERT OR REPLACE INTO SavedPost