Skip to content

Commit

Permalink
Add filter param to refresh func
Browse files Browse the repository at this point in the history
  • Loading branch information
jocmp committed Jan 7, 2025
1 parent b4015ba commit 905ddb0
Show file tree
Hide file tree
Showing 9 changed files with 28 additions and 15 deletions.
5 changes: 3 additions & 2 deletions capy/src/main/java/com/jocmp/capy/Account.kt
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ data class Account(
)

Source.FRESHRSS, Source.READER -> buildReaderDelegate(
source = source,
database = database,
path = cacheDirectory,
preferences = preferences
Expand Down Expand Up @@ -124,11 +125,11 @@ data class Account(
)
}

suspend fun refresh(): Result<Unit> {
suspend fun refresh(filter: ArticleFilter = ArticleFilter.default()): Result<Unit> {
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)
Expand Down
2 changes: 1 addition & 1 deletion capy/src/main/java/com/jocmp/capy/AccountDelegate.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import com.jocmp.capy.accounts.AddFeedResult
import java.time.ZonedDateTime

interface AccountDelegate {
suspend fun refresh(cutoffDate: ZonedDateTime? = null): Result<Unit>
suspend fun refresh(filter: ArticleFilter, cutoffDate: ZonedDateTime? = null): Result<Unit>

suspend fun markRead(articleIDs: List<String>): Result<Unit>

Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -32,7 +33,7 @@ class LocalAccountDelegate(
private val articleRecords = ArticleRecords(database)
private val taggingRecords = TaggingRecords(database)

override suspend fun refresh(cutoffDate: ZonedDateTime?): Result<Unit> {
override suspend fun refresh(filter: ArticleFilter, cutoffDate: ZonedDateTime?): Result<Unit> {
refreshFeeds(cutoffDate)

return Result.success(Unit)
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -41,7 +42,7 @@ internal class FeedbinAccountDelegate(
private val feedRecords = FeedRecords(database)
private val taggingRecords = TaggingRecords(database)

override suspend fun refresh(cutoffDate: ZonedDateTime?): Result<Unit> {
override suspend fun refresh(filter: ArticleFilter, cutoffDate: ZonedDateTime?): Result<Unit> {
return try {
val since = articleRecords.maxUpdatedAt().toString()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@ 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
): AccountDelegate {
val httpClient = ReaderOkHttpClient.forAccount(path, preferences)

return ReaderAccountDelegate(
source = source,
database = database,
googleReader = GoogleReader.create(
client = httpClient,
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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 {
Expand All @@ -43,7 +46,7 @@ internal class ReaderAccountDelegate(
private val feedRecords = FeedRecords(database)
private val taggingRecords = TaggingRecords(database)

override suspend fun refresh(cutoffDate: ZonedDateTime?): Result<Unit> {
override suspend fun refresh(filter: ArticleFilter, cutoffDate: ZonedDateTime?): Result<Unit> {
return withErrorHandling {
val since = articleRecords.maxUpdatedAt().toEpochSecond()

Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -93,7 +94,7 @@ class LocalAccountDelegateTest {

FeedFixture(database).create(feedID = channel.link!!)

delegate.refresh()
delegate.refresh(ArticleFilter.default())

val articlesCount = database
.articlesQueries
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -115,7 +116,7 @@ class FeedbinAccountDelegateTest {
)
}.returns(Response.success(entries))

delegate.refresh()
delegate.refresh(ArticleFilter.default())

val articles = database
.articlesQueries
Expand Down Expand Up @@ -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))
}
Expand Down Expand Up @@ -213,7 +214,7 @@ class FeedbinAccountDelegateTest {
)
}.returns(Response.success(emptyList()))

delegate.refresh()
delegate.refresh(ArticleFilter.default())

val starredArticles = ArticleRecords(database)
.byStatus
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -105,7 +107,7 @@ class ReaderAccountDelegateTest {
feedFixture = FeedFixture(database)
googleReader = mockk()

delegate = ReaderAccountDelegate(database, googleReader)
delegate = ReaderAccountDelegate(source = Source.FRESHRSS, database, googleReader)
}

@Test
Expand All @@ -117,7 +119,7 @@ class ReaderAccountDelegateTest {
stubStarred()
stubReadingList(itemRefs)

delegate.refresh()
delegate.refresh(ArticleFilter.default())

val articles = database
.articlesQueries
Expand Down Expand Up @@ -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
Expand All @@ -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))
}
Expand Down

0 comments on commit 905ddb0

Please sign in to comment.