layout: непомещающееся целевое имя уводит задачу в review вместо failed

- предел длины компонента (255 байт) проверяется в BuildLinks до первой
  операции с ФС: ни каталога, ни ссылки при отказе не создаётся
- причина пустого предпросмотра считается на показе (ReviewData.PreviewError)
  и печатается в панели действий и в карточке Telegram: у задачи без
  записанной причины взять её больше неоткуда
This commit is contained in:
av
2026-08-10 12:16:44 +03:00
parent 1710e5a9d5
commit b9f0929d0c
31 changed files with 1511 additions and 17 deletions
+9
View File
@@ -400,6 +400,15 @@ func (b *Bot) handleCallback(ctx context.Context, cq *tgbotapi.CallbackQuery) {
b.send(chatID, opErr("Торрент ещё качается — дождитесь докачки", id), nil)
return
}
if errors.Is(err, layout.ErrNameTooLong) {
// Имя не помещается в файловую систему: задача штатно ушла в review,
// где название правится подсказкой. Карточку обновляем — в ней теперь
// причина.
b.answer(cq.ID, "Имя не помещается")
b.send(chatID, opErr("Целевое имя слишком длинное — задача отправлена в ревью", id), nil)
b.refreshCard(ctx, chatID, msgID, id)
return
}
if errors.Is(err, layout.ErrCollision) {
// Коллизия цели: задача штатно ушла в review с причиной — показываем
// конкретно и обновляем карточку (в ней теперь причина коллизии).