feat: retry конвертации (2 попытки) при failed/error
- polling-цикл: при status failed/error — retry (до 2 раз) - логирование каждого retry - после исчерпания retry — текущее поведение (кнопка 'Перезаказать')
This commit is contained in:
@@ -85,10 +85,34 @@ fun DetailsScreen(
|
|||||||
mirrorStatus = runCatching { app.mirror.mirrorByItem(item.Id) }.getOrNull()
|
mirrorStatus = runCatching { app.mirror.mirrorByItem(item.Id) }.getOrNull()
|
||||||
mirrorJob = runCatching { app.mirror.list(limit = 500).firstOrNull { it.itemId == item.Id } }.getOrNull()
|
mirrorJob = runCatching { app.mirror.list(limit = 500).firstOrNull { it.itemId == item.Id } }.getOrNull()
|
||||||
loading = false
|
loading = false
|
||||||
while (mirrorStatus?.status == "processing" || mirrorStatus?.status == "queued") {
|
var retryCount = 0
|
||||||
|
while (true) {
|
||||||
|
when (mirrorStatus?.status) {
|
||||||
|
"processing", "queued" -> {
|
||||||
delay(3_000)
|
delay(3_000)
|
||||||
mirrorStatus = runCatching { app.mirror.mirrorByItem(item.Id) }.getOrNull()
|
mirrorStatus = runCatching { app.mirror.mirrorByItem(item.Id) }.getOrNull()
|
||||||
mirrorJob = runCatching { app.mirror.list(limit = 500).firstOrNull { it.itemId == 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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user