feat: fix meta retry logic

This commit is contained in:
tapframe 2026-04-13 00:38:10 +05:30
parent 81cd7933eb
commit 3dad199b6f
2 changed files with 19 additions and 8 deletions

View file

@ -217,12 +217,13 @@ object MetaDetailsRepository {
id: String,
includeMdbList: Boolean,
): MetaDetails? {
val baseUrl = manifest.transportUrl
.substringBefore("?")
.removeSuffix("/manifest.json")
val url = "$baseUrl/meta/$type/$id.json"
return try {
TmdbSettingsRepository.ensureLoaded()
val baseUrl = manifest.transportUrl
.substringBefore("?")
.removeSuffix("/manifest.json")
val url = "$baseUrl/meta/$type/$id.json"
log.d { "Fetching meta from: $url" }
val payload = httpGetText(url)
log.d { "Raw payload length=${payload.length}, first 500 chars: ${payload.take(500)}" }
@ -254,7 +255,7 @@ object MetaDetailsRepository {
enriched
} catch (e: Throwable) {
if (e is CancellationException) throw e
log.e(e) { "Failed to fetch/parse meta from ${manifest.transportUrl}" }
log.e(e) { "Failed to fetch/parse meta from $url (manifest=${manifest.transportUrl})" }
null
}
}

View file

@ -27,6 +27,7 @@ import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.layout.statusBars
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme
@ -140,7 +141,7 @@ fun MetaDetailsScreen(
PlayerSettingsRepository.ensureLoaded()
PlayerSettingsRepository.uiState
}.collectAsStateWithLifecycle()
val needsFreshLoad = displayedMeta == null && !uiState.isLoading
var autoLoadAttempted by remember(type, id) { mutableStateOf(false) }
var selectedEpisodeForActions by remember(type, id) { mutableStateOf<MetaVideo?>(null) }
val commentsEnabled by remember {
TraktCommentsSettings.ensureLoaded()
@ -186,8 +187,11 @@ fun MetaDetailsScreen(
isCommentsLoading = false
}
LaunchedEffect(type, id, needsFreshLoad) {
if (needsFreshLoad) MetaDetailsRepository.load(type, id)
LaunchedEffect(type, id, displayedMeta, uiState.isLoading, autoLoadAttempted) {
if (!autoLoadAttempted && displayedMeta == null && !uiState.isLoading) {
autoLoadAttempted = true
MetaDetailsRepository.load(type, id)
}
}
Box(
@ -221,6 +225,12 @@ fun MetaDetailsScreen(
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
Spacer(modifier = Modifier.height(8.dp))
Button(
onClick = { MetaDetailsRepository.load(type, id) },
) {
Text("Retry")
}
}
}