diff --git a/database/src/commonMain/kotlin/com/prof18/feedflow/database/DatabaseHelper.kt b/database/src/commonMain/kotlin/com/prof18/feedflow/database/DatabaseHelper.kt index 7918092e..0abe602d 100644 --- a/database/src/commonMain/kotlin/com/prof18/feedflow/database/DatabaseHelper.kt +++ b/database/src/commonMain/kotlin/com/prof18/feedflow/database/DatabaseHelper.kt @@ -263,15 +263,15 @@ class DatabaseHelper( } suspend fun updateFeedItemReadAndBookmarked( - isRead: Boolean, - isBookmarked: Boolean, - urlHash: String, + syncedFeedItems: List, ) = dbRef.transactionWithContext(backgroundDispatcher) { - dbRef.feedItemQueries.updateFeedItemReadAndBookmarked( - is_read = isRead, - is_bookmarked = isBookmarked, - url_hash = urlHash, - ) + syncedFeedItems.forEach { syncedFeedItem -> + dbRef.feedItemQueries.updateFeedItemReadAndBookmarked( + is_read = syncedFeedItem.isRead, + is_bookmarked = syncedFeedItem.isBookmarked, + url_hash = syncedFeedItem.id, + ) + } } suspend fun getFeedItemsForSync(): List = withContext(backgroundDispatcher) { diff --git a/shared/src/commonMain/kotlin/com/prof18/feedflow/shared/domain/feedsync/FeedSyncer.kt b/shared/src/commonMain/kotlin/com/prof18/feedflow/shared/domain/feedsync/FeedSyncer.kt index b3b5cb50..f673aa42 100644 --- a/shared/src/commonMain/kotlin/com/prof18/feedflow/shared/domain/feedsync/FeedSyncer.kt +++ b/shared/src/commonMain/kotlin/com/prof18/feedflow/shared/domain/feedsync/FeedSyncer.kt @@ -47,30 +47,26 @@ internal class FeedSyncer( } val appUrlHashes = appDatabaseHelper.getAllFeedSourceIds().toSet() - val syncFeedSources = syncedDatabaseHelper.getAllFeedSources() + if (syncFeedSources.isNotEmpty()) { - val syncedUrlHashes = mutableSetOf() - - syncFeedSources.forEach { syncedFeedSource -> - syncedUrlHashes.add(syncedFeedSource.id) - appDatabaseHelper.insertFeedSource( - listOf( - ParsedFeedSource( - id = syncedFeedSource.id, - url = syncedFeedSource.url, - title = syncedFeedSource.title, - category = syncedFeedSource.categoryId?.let { - FeedSourceCategory( - id = it.value, - title = "", // not necessary here, the caller doesn't use the name - ) - }, - logoUrl = syncedFeedSource.logoUrl, - ), - ), - ) - } + val syncedUrlHashes = syncFeedSources.map { it.id }.toSet() + appDatabaseHelper.insertFeedSource( + syncFeedSources.map { syncedFeedSource -> + ParsedFeedSource( + id = syncedFeedSource.id, + url = syncedFeedSource.url, + title = syncedFeedSource.title, + category = syncedFeedSource.categoryId?.let { + FeedSourceCategory( + id = it.value, + title = "", // not necessary here, the caller doesn't use the name + ) + }, + logoUrl = syncedFeedSource.logoUrl, + ) + }, + ) val urlHashesToDelete = appUrlHashes - syncedUrlHashes logger.d { "appUrlHash: $appUrlHashes" } @@ -105,19 +101,15 @@ internal class FeedSyncer( val syncFeedSourceCategories = syncedDatabaseHelper.getAllFeedSourceCategories() if (syncFeedSourceCategories.isNotEmpty()) { - val syncedIds = mutableSetOf() - - syncFeedSourceCategories.forEach { syncedFeedSourceCategory -> - syncedIds.add(syncedFeedSourceCategory.id) - appDatabaseHelper.insertCategories( - listOf( - FeedSourceCategory( - id = syncedFeedSourceCategory.id, - title = syncedFeedSourceCategory.title, - ), - ), - ) - } + val syncedIds = syncFeedSourceCategories.map { it.id }.toSet() + appDatabaseHelper.insertCategories( + syncFeedSourceCategories.map { syncedFeedSourceCategory -> + FeedSourceCategory( + id = syncedFeedSourceCategory.id, + title = syncedFeedSourceCategory.title, + ) + }, + ) // Sync deletions val idsToDelete = appIds - syncedIds @@ -149,13 +141,9 @@ internal class FeedSyncer( val syncFeedItems = syncedDatabaseHelper.getAllFeedItems() if (syncFeedItems.isNotEmpty()) { - syncFeedItems.forEach { syncedFeedItem -> - appDatabaseHelper.updateFeedItemReadAndBookmarked( - isRead = syncedFeedItem.isRead, - isBookmarked = syncedFeedItem.isBookmarked, - urlHash = syncedFeedItem.id, - ) - } + appDatabaseHelper.updateFeedItemReadAndBookmarked( + syncedFeedItems = syncFeedItems, + ) } val currentTimestamp = Clock.System.now().toEpochMilliseconds()