Правки: дата на стр. загрузки, ссылка TVDB по типу, заголовки в Telegram

- Веб-UI: под шапкой страницы загрузки — дата добавления и относительная
  давность («N дней назад»), как в карточках списка.
- Баг: ссылка-dereferrer TVDB для фильма вела на /series/; теперь строится
  по типу запроса (/movie/ либо /series/). Тест + правка спеки metadata-match.
- Telegram: заголовки уведомлений (готово/ошибка/рассинхрон) берутся из
  display_name — консистентно с веб-UI; сезон подтягивается автоматически.
- Telegram: в сообщениях об ошибке — и заголовок, и #id загрузки (ULID)
  для быстрого поиска по логам.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
av
2026-07-04 11:50:04 +03:00
co-authored by Claude Opus 4.8
parent 5d5456fa68
commit 280204db18
8 changed files with 64 additions and 32 deletions
+9
View File
@@ -4,6 +4,7 @@ import (
"errors"
"net/http"
"strconv"
"time"
"git.vakhrushev.me/av/jellybit/internal/store"
"git.vakhrushev.me/av/jellybit/internal/worker"
@@ -21,6 +22,8 @@ type downloadDetailView struct {
State string
Error string
Note string
Added string // дата добавления (source_added_at → created_at), как в списке
AddedAgo string // относительная давность («5 дней назад»); пусто — если не распарсить
CreatedAt string
UpdatedAt string
@@ -100,6 +103,12 @@ func (s *server) handleDownload(w http.ResponseWriter, r *http.Request) {
d.State == store.StateTargetMissing,
Retriable: d.State == store.StateFailed || d.State == store.StateStuck,
}
// Дата добавления рядом с шапкой (source_added_at → фолбэк created_at,
// как в порядке и карточках списка); неразбираемое время просто опускаем.
if t, ok := addedTime(d); ok {
view.Added = fmtDate(t, s.deps.Loc)
view.AddedAgo = humanizeAge(t, time.Now())
}
if rd.Recognition != nil {
view.HasPlan = len(rd.Plan.Files) > 0