feat: retry конвертации (2 попытки) при failed/error

- polling-цикл: при status failed/error — retry (до 2 раз)
- логирование каждого retry
- после исчерпания retry — текущее поведение (кнопка 'Перезаказать')
This commit is contained in:
Hermes Agent
2026-08-21 11:54:48 +03:00
parent a434d5bb12
commit cbcd22f09c
@@ -85,10 +85,34 @@ fun DetailsScreen(
mirrorStatus = runCatching { app.mirror.mirrorByItem(item.Id) }.getOrNull()
mirrorJob = runCatching { app.mirror.list(limit = 500).firstOrNull { it.itemId == item.Id } }.getOrNull()
loading = false
while (mirrorStatus?.status == "processing" || mirrorStatus?.status == "queued") {
delay(3_000)
mirrorStatus = runCatching { app.mirror.mirrorByItem(item.Id) }.getOrNull()
mirrorJob = runCatching { app.mirror.list(limit = 500).firstOrNull { it.itemId == item.Id } }.getOrNull()
var retryCount = 0
while (true) {
when (mirrorStatus?.status) {
"processing", "queued" -> {
delay(3_000)
mirrorStatus = runCatching { app.mirror.mirrorByItem(item.Id) }.getOrNull()
mirrorJob = runCatching { app.mirror.list(limit = 500).firstOrNull { it.itemId == item.Id } }.getOrNull()
retryCount = 0
}
"done" -> {
break
}
"failed", "error" -> {
if (retryCount < 2) {
retryCount++
log("mirror", "конвертация упала, retry $retryCount/2 для ${item.Id}")
runCatching { app.mirror.createMirror(item.Id) }
.onSuccess { refreshKey++ }
.onFailure { e -> log("mirror", "retry $retryCount не удался: ${e.message}") }
delay(5_000)
} else {
break
}
}
else -> {
break
}
}
}
}