library: keep the cached bio on an empty refresh

This commit is contained in:
austinried
2026-10-19 13:14:08 +00:00
parent b379a22517
commit 98398ab2fe
2 changed files with 22 additions and 1 deletions
@@ -367,8 +367,11 @@ class LibraryRepository(
artistId: String, artistId: String,
): Result<Unit> = ): Result<Unit> =
try { try {
val biography = normalizeBiography(sourceRepository.artistBiography(sourceId, artistId)) val fetched = normalizeBiography(sourceRepository.artistBiography(sourceId, artistId))
val current = db.libraryDao().artistBioOnce(sourceId, artistId) val current = db.libraryDao().artistBioOnce(sourceId, artistId)
// An empty response can mean the metadata provider is temporarily down, so keep the
// cached biography instead of erasing it.
val biography = fetched ?: current?.biography
if (current == null || current.biography != biography) { if (current == null || current.biography != biography) {
db.libraryDao().upsertArtistBio(ArtistBio(sourceId, artistId, biography)) db.libraryDao().upsertArtistBio(ArtistBio(sourceId, artistId, biography))
} }
@@ -311,6 +311,24 @@ class LibraryRepositoryTest {
} }
} }
@Test
fun anEmptyRefreshKeepsTheStoredBio() =
runBlocking {
withSource { server ->
val sourceId = sourceRepository.activeSourceIdOnce()!!
db.libraryDao().upsertArtistBio(ArtistBio(sourceId, "ar1", "Kept"))
server.enqueue(
MockResponse().setBody(
"<subsonic-response status=\"ok\"><artistInfo2/></subsonic-response>",
),
)
assertTrue(repository.refreshArtistBio(sourceId, "ar1").isSuccess)
assertEquals("Kept", repository.artistBio(sourceId, "ar1").first()?.biography)
}
}
@Test @Test
fun aFailedRefreshKeepsTheStoredBio() = fun aFailedRefreshKeepsTheStoredBio() =
runBlocking { runBlocking {