Skip to content

Commit 51222b8

Browse files
committed
feat: integrate DiffMapHolder for improved read status management
1 parent d35c3c6 commit 51222b8

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

app/src/main/java/me/ash/reader/domain/service/GoogleReaderRssService.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import kotlinx.coroutines.sync.Semaphore
2727
import kotlinx.coroutines.sync.withPermit
2828
import me.ash.reader.R
2929
import me.ash.reader.domain.data.SyncLogger
30+
import me.ash.reader.domain.data.DiffMapHolder
3031
import me.ash.reader.domain.model.account.Account
3132
import me.ash.reader.domain.model.account.AccountType
3233
import me.ash.reader.domain.model.account.AccountType.Companion.FreshRSS
@@ -77,6 +78,7 @@ constructor(
7778
private val workManager: WorkManager,
7879
private val accountService: AccountService,
7980
private val syncLogger: SyncLogger,
81+
private val diffMapHolder: dagger.Lazy<DiffMapHolder>,
8082
) :
8183
AbstractRssRepository(
8284
articleDao,
@@ -362,10 +364,13 @@ constructor(
362364
}
363365

364366
launch {
367+
val pendingReadIds = diffMapHolder.get().diffMap.filter { !it.value.isUnread }.keys
368+
365369
val toBeUnreadLocal =
366-
localReadIds.intersect(remoteUnreadIds.await()).map {
370+
(localReadIds.intersect(remoteUnreadIds.await()).map {
367371
accountId spacerDollar it
368-
}
372+
} - pendingReadIds)
373+
369374
toBeUnreadLocal.chunked(1000).forEach {
370375
articleDao.markAsReadByIdSet(
371376
accountId = accountId,

app/src/main/java/me/ash/reader/ui/page/adaptive/ArticleListReaderViewModel.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,14 +213,26 @@ constructor(
213213
}
214214

215215
fun toggleReadStatus(articleWithFeed: ArticleWithFeed) {
216-
viewModelScope.launch(ioDispatcher) {
216+
if (diffMapHolder.checkIfUnread(articleWithFeed)) {
217+
notificationHelper.cancel(articleWithFeed.article.id)
218+
}
219+
applicationScope.launch(ioDispatcher) {
217220
diffMapHolder.updateDiff(articleWithFeed)
218221
diffMapHolder.writeDiffsToCache()
219222
}
220223
}
221224

225+
fun markAsRead(articleWithFeed: ArticleWithFeed) {
226+
notificationHelper.cancel(articleWithFeed.article.id)
227+
applicationScope.launch(ioDispatcher) {
228+
diffMapHolder.updateDiff(articleWithFeed, isUnread = false)
229+
diffMapHolder.writeDiffsToCache()
230+
}
231+
}
232+
222233
fun markAsReadList(articles: List<ArticleWithFeed>) {
223-
viewModelScope.launch(ioDispatcher) {
234+
articles.forEach { notificationHelper.cancel(it.article.id) }
235+
applicationScope.launch(ioDispatcher) {
224236
diffMapHolder.updateDiff(articleWithFeed = articles.toTypedArray(), isUnread = false)
225237
diffMapHolder.writeDiffsToCache()
226238
}

0 commit comments

Comments
 (0)