Match Discover captions and catalogue collection states

This commit is contained in:
justinzeus 2026-11-05 16:50:38 +01:00
parent 7e8e232d47
commit 4b28b4f044
25 changed files with 486 additions and 74 deletions

View file

@ -44,11 +44,26 @@ class ConductarrDiscoverOperations(
}
}
override suspend fun hide(profile: String, title: DiscoverTitle): Boolean = client.mutate(TvRoutes.hide(profile,
RecommendationHideInputBody(if (title.type == "movie") RecommendationHideInputBody.MediaType.MOVIE else RecommendationHideInputBody.MediaType.TV,
title = title.title, tmdbId = title.tmdb, year = title.year?.toLong()))) is MutationResult.Success
override suspend fun hide(profile: String, title: DiscoverTitle): Boolean {
val result = client.mutate(TvRoutes.hide(profile,
RecommendationHideInputBody(if (title.type == "movie") RecommendationHideInputBody.MediaType.MOVIE else RecommendationHideInputBody.MediaType.TV,
title = title.title, tmdbId = title.tmdb, year = title.year?.toLong())))
return result is MutationResult.Success || observedHidden(profile, title) == true
}
override suspend fun restore(profile: String, title: DiscoverTitle): Boolean = client.mutate(TvRoutes.restore(profile, title.tmdb, title.mediaType())) is MutationResult.Success
override suspend fun restore(profile: String, title: DiscoverTitle): Boolean {
val result = client.mutate(TvRoutes.restore(profile, title.tmdb, title.mediaType()))
return result is MutationResult.Success || observedHidden(profile, title) == false
}
private suspend fun observedHidden(profile: String, title: DiscoverTitle): Boolean? {
return when (val result = client.read(TvRoutes.dismissals(profile), org.justinvisser.wolfskin.conductarr.ReadTrigger.FORCE).last()) {
is ReadResult.Value -> result.saved.value?.dismissals?.any {
it.tmdbId == title.tmdb && it.mediaType.name == title.mediaType().name
}
is ReadResult.Failure -> null
}
}
override suspend fun refresh(): DiscoverSnapshot = refreshSnapshot()
}
@ -56,4 +71,5 @@ private fun DiscoverTitle.mediaType(): MediaType = if (type == "movie") MediaTyp
private fun RequestReceipt.outcome(): DiscoverRequestResult = DiscoverRequestResult(
phase = if (state == RequestReceipt.State.PENDING) RequestPhase.Pending else if (state == RequestReceipt.State.RETIRED) RequestPhase.Refused else RequestPhase.Receipt,
actor = actor.name,
requester = requester,
)