From 905ddb01d36a2bc65104589a0127b08e1ade1b23 Mon Sep 17 00:00:00 2001 From: Josiah Campbell <9521010+jocmp@users.noreply.github.com> Date: Sun, 5 Jan 2025 15:09:12 -0600 Subject: [PATCH] Add filter param to refresh func --- capy/src/main/java/com/jocmp/capy/Account.kt | 5 +++-- capy/src/main/java/com/jocmp/capy/AccountDelegate.kt | 2 +- .../com/jocmp/capy/accounts/LocalAccountDelegate.kt | 3 ++- .../capy/accounts/feedbin/FeedbinAccountDelegate.kt | 3 ++- .../jocmp/capy/accounts/reader/BuildReaderDelegate.kt | 3 +++ .../capy/accounts/reader/ReaderAccountDelegate.kt | 5 ++++- .../jocmp/capy/accounts/LocalAccountDelegateTest.kt | 5 +++-- .../accounts/feedbin/FeedbinAccountDelegateTest.kt | 7 ++++--- .../capy/accounts/reader/ReaderAccountDelegateTest.kt | 10 ++++++---- 9 files changed, 28 insertions(+), 15 deletions(-) diff --git a/capy/src/main/java/com/jocmp/capy/Account.kt b/capy/src/main/java/com/jocmp/capy/Account.kt index 4b77bac4..133a75b5 100644 --- a/capy/src/main/java/com/jocmp/capy/Account.kt +++ b/capy/src/main/java/com/jocmp/capy/Account.kt @@ -54,6 +54,7 @@ data class Account( ) Source.FRESHRSS, Source.READER -> buildReaderDelegate( + source = source, database = database, path = cacheDirectory, preferences = preferences @@ -124,11 +125,11 @@ data class Account( ) } - suspend fun refresh(): Result { + suspend fun refresh(filter: ArticleFilter = ArticleFilter.default()): Result { return try { val cutoffDate = preferences.autoDelete.get().cutoffDate() - val result = delegate.refresh(cutoffDate = cutoffDate) + val result = delegate.refresh(filter, cutoffDate = cutoffDate) if (cutoffDate != null) { articleRecords.deleteOldArticles(before = cutoffDate) diff --git a/capy/src/main/java/com/jocmp/capy/AccountDelegate.kt b/capy/src/main/java/com/jocmp/capy/AccountDelegate.kt index 818bff6e..8edf22be 100644 --- a/capy/src/main/java/com/jocmp/capy/AccountDelegate.kt +++ b/capy/src/main/java/com/jocmp/capy/AccountDelegate.kt @@ -4,7 +4,7 @@ import com.jocmp.capy.accounts.AddFeedResult import java.time.ZonedDateTime interface AccountDelegate { - suspend fun refresh(cutoffDate: ZonedDateTime? = null): Result + suspend fun refresh(filter: ArticleFilter, cutoffDate: ZonedDateTime? = null): Result suspend fun markRead(articleIDs: List): Result diff --git a/capy/src/main/java/com/jocmp/capy/accounts/LocalAccountDelegate.kt b/capy/src/main/java/com/jocmp/capy/accounts/LocalAccountDelegate.kt index 5de1f974..053864e3 100644 --- a/capy/src/main/java/com/jocmp/capy/accounts/LocalAccountDelegate.kt +++ b/capy/src/main/java/com/jocmp/capy/accounts/LocalAccountDelegate.kt @@ -1,6 +1,7 @@ package com.jocmp.capy.accounts import com.jocmp.capy.AccountDelegate +import com.jocmp.capy.ArticleFilter import com.jocmp.capy.Feed import com.jocmp.capy.common.TimeHelpers.nowUTC import com.jocmp.capy.common.TimeHelpers.published @@ -32,7 +33,7 @@ class LocalAccountDelegate( private val articleRecords = ArticleRecords(database) private val taggingRecords = TaggingRecords(database) - override suspend fun refresh(cutoffDate: ZonedDateTime?): Result { + override suspend fun refresh(filter: ArticleFilter, cutoffDate: ZonedDateTime?): Result { refreshFeeds(cutoffDate) return Result.success(Unit) diff --git a/capy/src/main/java/com/jocmp/capy/accounts/feedbin/FeedbinAccountDelegate.kt b/capy/src/main/java/com/jocmp/capy/accounts/feedbin/FeedbinAccountDelegate.kt index 8ad46d1d..016076e8 100644 --- a/capy/src/main/java/com/jocmp/capy/accounts/feedbin/FeedbinAccountDelegate.kt +++ b/capy/src/main/java/com/jocmp/capy/accounts/feedbin/FeedbinAccountDelegate.kt @@ -1,6 +1,7 @@ package com.jocmp.capy.accounts.feedbin import com.jocmp.capy.AccountDelegate +import com.jocmp.capy.ArticleFilter import com.jocmp.capy.Feed import com.jocmp.capy.accounts.AddFeedResult import com.jocmp.capy.accounts.FeedOption @@ -41,7 +42,7 @@ internal class FeedbinAccountDelegate( private val feedRecords = FeedRecords(database) private val taggingRecords = TaggingRecords(database) - override suspend fun refresh(cutoffDate: ZonedDateTime?): Result { + override suspend fun refresh(filter: ArticleFilter, cutoffDate: ZonedDateTime?): Result { return try { val since = articleRecords.maxUpdatedAt().toString() diff --git a/capy/src/main/java/com/jocmp/capy/accounts/reader/BuildReaderDelegate.kt b/capy/src/main/java/com/jocmp/capy/accounts/reader/BuildReaderDelegate.kt index 3b1d772f..fc31dbcd 100644 --- a/capy/src/main/java/com/jocmp/capy/accounts/reader/BuildReaderDelegate.kt +++ b/capy/src/main/java/com/jocmp/capy/accounts/reader/BuildReaderDelegate.kt @@ -2,11 +2,13 @@ package com.jocmp.capy.accounts.reader import com.jocmp.capy.AccountDelegate import com.jocmp.capy.AccountPreferences +import com.jocmp.capy.accounts.Source import com.jocmp.capy.db.Database import com.jocmp.readerclient.GoogleReader import java.net.URI internal fun buildReaderDelegate( + source: Source, database: Database, path: URI, preferences: AccountPreferences @@ -14,6 +16,7 @@ internal fun buildReaderDelegate( val httpClient = ReaderOkHttpClient.forAccount(path, preferences) return ReaderAccountDelegate( + source = source, database = database, googleReader = GoogleReader.create( client = httpClient, diff --git a/capy/src/main/java/com/jocmp/capy/accounts/reader/ReaderAccountDelegate.kt b/capy/src/main/java/com/jocmp/capy/accounts/reader/ReaderAccountDelegate.kt index 858d5fad..47e6c08d 100644 --- a/capy/src/main/java/com/jocmp/capy/accounts/reader/ReaderAccountDelegate.kt +++ b/capy/src/main/java/com/jocmp/capy/accounts/reader/ReaderAccountDelegate.kt @@ -1,8 +1,10 @@ package com.jocmp.capy.accounts.reader import com.jocmp.capy.AccountDelegate +import com.jocmp.capy.ArticleFilter import com.jocmp.capy.Feed import com.jocmp.capy.accounts.AddFeedResult +import com.jocmp.capy.accounts.Source import com.jocmp.capy.accounts.ValidationError import com.jocmp.capy.accounts.feedbin.FeedbinAccountDelegate.Companion.MAX_CREATE_UNREAD_LIMIT import com.jocmp.capy.accounts.withErrorHandling @@ -35,6 +37,7 @@ import java.time.ZonedDateTime import java.util.concurrent.atomic.AtomicReference internal class ReaderAccountDelegate( + private val source: Source, private val database: Database, private val googleReader: GoogleReader, ) : AccountDelegate { @@ -43,7 +46,7 @@ internal class ReaderAccountDelegate( private val feedRecords = FeedRecords(database) private val taggingRecords = TaggingRecords(database) - override suspend fun refresh(cutoffDate: ZonedDateTime?): Result { + override suspend fun refresh(filter: ArticleFilter, cutoffDate: ZonedDateTime?): Result { return withErrorHandling { val since = articleRecords.maxUpdatedAt().toEpochSecond() diff --git a/capy/src/test/java/com/jocmp/capy/accounts/LocalAccountDelegateTest.kt b/capy/src/test/java/com/jocmp/capy/accounts/LocalAccountDelegateTest.kt index 213171ea..036f4d0f 100644 --- a/capy/src/test/java/com/jocmp/capy/accounts/LocalAccountDelegateTest.kt +++ b/capy/src/test/java/com/jocmp/capy/accounts/LocalAccountDelegateTest.kt @@ -1,6 +1,7 @@ package com.jocmp.capy.accounts import com.jocmp.capy.AccountDelegate +import com.jocmp.capy.ArticleFilter import com.jocmp.capy.InMemoryDatabaseProvider import com.jocmp.capy.db.Database import com.jocmp.capy.fixtures.FeedFixture @@ -93,7 +94,7 @@ class LocalAccountDelegateTest { FeedFixture(database).create(feedID = channel.link!!) - delegate.refresh() + delegate.refresh(ArticleFilter.default()) val articlesCount = database .articlesQueries @@ -117,7 +118,7 @@ class LocalAccountDelegateTest { FeedFixture(database).create(feedID = channel.link!!) - delegate.refresh(cutoffDate = ZonedDateTime.of(2024, 5, 1, 8, 0, 0, 0, ZoneOffset.UTC)) + delegate.refresh(ArticleFilter.default(), cutoffDate = ZonedDateTime.of(2024, 5, 1, 8, 0, 0, 0, ZoneOffset.UTC)) val articlesCount = database .articlesQueries diff --git a/capy/src/test/java/com/jocmp/capy/accounts/feedbin/FeedbinAccountDelegateTest.kt b/capy/src/test/java/com/jocmp/capy/accounts/feedbin/FeedbinAccountDelegateTest.kt index f6be149a..4391103f 100644 --- a/capy/src/test/java/com/jocmp/capy/accounts/feedbin/FeedbinAccountDelegateTest.kt +++ b/capy/src/test/java/com/jocmp/capy/accounts/feedbin/FeedbinAccountDelegateTest.kt @@ -1,6 +1,7 @@ package com.jocmp.capy.accounts.feedbin import com.jocmp.capy.AccountDelegate +import com.jocmp.capy.ArticleFilter import com.jocmp.capy.ArticleStatus import com.jocmp.capy.InMemoryDatabaseProvider import com.jocmp.capy.accounts.AddFeedResult @@ -115,7 +116,7 @@ class FeedbinAccountDelegateTest { ) }.returns(Response.success(entries)) - delegate.refresh() + delegate.refresh(ArticleFilter.default()) val articles = database .articlesQueries @@ -145,7 +146,7 @@ class FeedbinAccountDelegateTest { val networkError = SocketTimeoutException("Sorry networked charlie") coEvery { feedbin.subscriptions() }.throws(networkError) - val result = delegate.refresh() + val result = delegate.refresh(ArticleFilter.default()) assertEquals(result, Result.failure(networkError)) } @@ -213,7 +214,7 @@ class FeedbinAccountDelegateTest { ) }.returns(Response.success(emptyList())) - delegate.refresh() + delegate.refresh(ArticleFilter.default()) val starredArticles = ArticleRecords(database) .byStatus diff --git a/capy/src/test/java/com/jocmp/capy/accounts/reader/ReaderAccountDelegateTest.kt b/capy/src/test/java/com/jocmp/capy/accounts/reader/ReaderAccountDelegateTest.kt index 1f9125d8..681d1842 100644 --- a/capy/src/test/java/com/jocmp/capy/accounts/reader/ReaderAccountDelegateTest.kt +++ b/capy/src/test/java/com/jocmp/capy/accounts/reader/ReaderAccountDelegateTest.kt @@ -1,9 +1,11 @@ package com.jocmp.capy.accounts.reader import com.jocmp.capy.AccountDelegate +import com.jocmp.capy.ArticleFilter import com.jocmp.capy.ArticleStatus import com.jocmp.capy.InMemoryDatabaseProvider import com.jocmp.capy.accounts.AddFeedResult +import com.jocmp.capy.accounts.Source import com.jocmp.capy.articles.UnreadSortOrder import com.jocmp.capy.db.Database import com.jocmp.capy.fixtures.FeedFixture @@ -105,7 +107,7 @@ class ReaderAccountDelegateTest { feedFixture = FeedFixture(database) googleReader = mockk() - delegate = ReaderAccountDelegate(database, googleReader) + delegate = ReaderAccountDelegate(source = Source.FRESHRSS, database, googleReader) } @Test @@ -117,7 +119,7 @@ class ReaderAccountDelegateTest { stubStarred() stubReadingList(itemRefs) - delegate.refresh() + delegate.refresh(ArticleFilter.default()) val articles = database .articlesQueries @@ -189,7 +191,7 @@ class ReaderAccountDelegateTest { googleReader.streamItemsContents(starredItems.map { it.hexID }, postToken = postToken) }.returns(Response.success(StreamItemsContentsResult(starredItems))) - delegate.refresh() + delegate.refresh(ArticleFilter.default()) val starredArticles = ArticleRecords(database) .byStatus @@ -213,7 +215,7 @@ class ReaderAccountDelegateTest { val networkError = SocketTimeoutException("Sorry networked charlie") coEvery { googleReader.subscriptionList() }.throws(networkError) - val result = delegate.refresh() + val result = delegate.refresh(ArticleFilter.default()) assertEquals(result, Result.failure(networkError)) }