File tree Expand file tree Collapse file tree 2 files changed +21
-4
lines changed
app/src/main/java/me/ash/reader Expand file tree Collapse file tree 2 files changed +21
-4
lines changed Original file line number Diff line number Diff line change @@ -27,6 +27,7 @@ import kotlinx.coroutines.sync.Semaphore
2727import kotlinx.coroutines.sync.withPermit
2828import me.ash.reader.R
2929import me.ash.reader.domain.data.SyncLogger
30+ import me.ash.reader.domain.data.DiffMapHolder
3031import me.ash.reader.domain.model.account.Account
3132import me.ash.reader.domain.model.account.AccountType
3233import 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,
Original file line number Diff line number Diff 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 }
You can’t perform that action at this time.
0 commit comments