mirror of
https://github.com/tapframe/NuvioStreaming.git
synced 2026-07-29 15:49:30 +00:00
feat(debrid): add cache check before publishing stream
This commit is contained in:
parent
f33a513b1c
commit
2a9f523ccb
3 changed files with 45 additions and 10 deletions
|
|
@ -6,6 +6,21 @@ import com.nuvio.app.features.streams.StreamDebridCacheStatus
|
|||
import com.nuvio.app.features.streams.StreamItem
|
||||
|
||||
object LocalDebridAvailabilityService {
|
||||
fun hasPendingCacheCheck(
|
||||
groups: List<AddonStreamGroup>,
|
||||
eligibleGroupIds: Set<String>? = null,
|
||||
): Boolean {
|
||||
cacheCheckAccount() ?: return false
|
||||
return groups
|
||||
.filter { group -> eligibleGroupIds == null || group.addonId in eligibleGroupIds }
|
||||
.any { group ->
|
||||
group.streams.any { stream ->
|
||||
stream.localAvailabilityHash() != null &&
|
||||
stream.debridCacheStatus?.state !in FINAL_CACHE_STATES
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun markChecking(
|
||||
groups: List<AddonStreamGroup>,
|
||||
eligibleGroupIds: Set<String>? = null,
|
||||
|
|
|
|||
|
|
@ -271,15 +271,26 @@ object PlayerStreamsRepository {
|
|||
}
|
||||
}
|
||||
|
||||
fun launchDebridAvailability(group: AddonStreamGroup) {
|
||||
if (group.addonId !in installedAddonIds || group.streams.isEmpty()) return
|
||||
fun publishStreamGroupAfterCacheCheck(group: AddonStreamGroup) {
|
||||
if (group.addonId !in installedAddonIds || group.streams.isEmpty()) {
|
||||
publishStreamGroup(presentDebridGroup(group))
|
||||
return
|
||||
}
|
||||
|
||||
val eligibleGroupIds = setOf(group.addonId)
|
||||
val shouldWaitForCacheCheck = LocalDebridAvailabilityService.hasPendingCacheCheck(
|
||||
groups = listOf(group),
|
||||
eligibleGroupIds = eligibleGroupIds,
|
||||
)
|
||||
if (!shouldWaitForCacheCheck) {
|
||||
publishStreamGroup(presentDebridGroup(group))
|
||||
return
|
||||
}
|
||||
|
||||
val checkingGroup = LocalDebridAvailabilityService.markChecking(
|
||||
groups = listOf(group),
|
||||
eligibleGroupIds = eligibleGroupIds,
|
||||
).firstOrNull() ?: group
|
||||
publishStreamGroup(checkingGroup)
|
||||
|
||||
val availabilityJob = launch {
|
||||
val availabilityGroup = LocalDebridAvailabilityService.annotateCachedAvailability(
|
||||
|
|
@ -360,8 +371,7 @@ object PlayerStreamsRepository {
|
|||
}
|
||||
repeat(jobs.size) {
|
||||
val result = completions.receive()
|
||||
publishStreamGroup(result)
|
||||
launchDebridAvailability(result)
|
||||
publishStreamGroupAfterCacheCheck(result)
|
||||
}
|
||||
for (availabilityJob in debridAvailabilityJobs) {
|
||||
availabilityJob.join()
|
||||
|
|
|
|||
|
|
@ -278,15 +278,26 @@ object StreamsRepository {
|
|||
}
|
||||
}
|
||||
|
||||
fun launchDebridAvailability(group: AddonStreamGroup) {
|
||||
if (group.addonId !in installedAddonIds || group.streams.isEmpty()) return
|
||||
fun publishAddonGroupAfterCacheCheck(group: AddonStreamGroup) {
|
||||
if (group.addonId !in installedAddonIds || group.streams.isEmpty()) {
|
||||
publishAddonGroup(presentDebridGroup(group))
|
||||
return
|
||||
}
|
||||
|
||||
val eligibleGroupIds = setOf(group.addonId)
|
||||
val shouldWaitForCacheCheck = LocalDebridAvailabilityService.hasPendingCacheCheck(
|
||||
groups = listOf(group),
|
||||
eligibleGroupIds = eligibleGroupIds,
|
||||
)
|
||||
if (!shouldWaitForCacheCheck) {
|
||||
publishAddonGroup(presentDebridGroup(group))
|
||||
return
|
||||
}
|
||||
|
||||
val checkingGroup = LocalDebridAvailabilityService.markChecking(
|
||||
groups = listOf(group),
|
||||
eligibleGroupIds = eligibleGroupIds,
|
||||
).firstOrNull() ?: group
|
||||
publishAddonGroup(checkingGroup)
|
||||
|
||||
val availabilityJob = launch {
|
||||
val availabilityGroup = LocalDebridAvailabilityService.annotateCachedAvailability(
|
||||
|
|
@ -481,8 +492,7 @@ object StreamsRepository {
|
|||
when (val completion = completions.receive()) {
|
||||
is StreamLoadCompletion.Addon -> {
|
||||
val result = completion.group
|
||||
publishAddonGroup(result)
|
||||
launchDebridAvailability(result)
|
||||
publishAddonGroupAfterCacheCheck(result)
|
||||
}
|
||||
|
||||
is StreamLoadCompletion.PluginScraper -> {
|
||||
|
|
|
|||
Loading…
Reference in a new issue