diff options
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt')
| -rw-r--r-- | app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt b/app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt index 4317073..4c74e5a 100644 --- a/app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt +++ b/app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt @@ -57,6 +57,7 @@ import kotlinx.coroutines.launch import org.terst.feedreader.data.AppDatabase import org.terst.feedreader.data.ArticleEntity import org.terst.feedreader.data.FeedEntity +import org.terst.feedreader.data.Settings import org.terst.feedreader.data.ensureStandaloneArticle import org.terst.feedreader.data.saveArticleToStash import org.terst.feedreader.data.setReaderModeEnabled @@ -96,6 +97,7 @@ fun ReaderScreen( ) { val context = LocalContext.current val db = remember { AppDatabase.get(context) } + val settings = remember { Settings(context) } val scope = rememberCoroutineScope() var previousId by remember(articleId) { mutableStateOf<String?>(null) } @@ -104,11 +106,14 @@ fun ReaderScreen( // Looked up fresh every time articleId changes (i.e. every navigation), not cached -- // always reflects the CURRENT live Unread/Older/Saved/feed ordering, so there's no // stale-snapshot state to fall out of sync with anything, on rotation or otherwise. + // sinceFetch (Settings.lastFetchAt) is what keeps a just-read article from vanishing + // out of this same list before Previous/Next can find it -- see observeUnread's comment. LaunchedEffect(articleId) { val cutoff = System.currentTimeMillis() - RECENT_WINDOW_MS + val sinceFetch = settings.lastFetchAt.first() val flow = when (feedId) { - UNREAD_FEED_ID -> db.articleDao().observeUnread(cutoff) - OLDER_FEED_ID -> db.articleDao().observeOlderUnread(cutoff) + UNREAD_FEED_ID -> db.articleDao().observeUnread(cutoff, sinceFetch) + OLDER_FEED_ID -> db.articleDao().observeOlderUnread(cutoff, sinceFetch) SAVED_FEED_ID -> db.articleDao().observeSaved() else -> db.articleDao().observeByFeed(feedId) } @@ -124,14 +129,14 @@ fun ReaderScreen( fun goToPreviousArticle() { val target = previousId ?: return scope.launch { - db.articleDao().setRead(articleId, true) + db.articleDao().setRead(articleId, true, System.currentTimeMillis()) onNavigateToArticle(target) } } fun goToNextArticle() { val target = nextId ?: return scope.launch { - db.articleDao().setRead(articleId, true) + db.articleDao().setRead(articleId, true, System.currentTimeMillis()) onNavigateToArticle(target) } } @@ -345,7 +350,7 @@ private fun ReaderContent( val a = currentArticle ?: return@DropdownMenuItem article = a.copy(isRead = false) scope.launch { - db.articleDao().setRead(a.id, false) + db.articleDao().setRead(a.id, false, null) snackbarHostState.showSnackbar("Marked unread") } } |
