Files
avandClaude Opus 4.8 bb245a90a3 Веб-UI: обзор жизненного цикла в карточке загрузки
Карточка списка на главной теперь даёт краткий обзор «от загрузки до
решения об удалении»: метка «ID:» перед идентификатором, дата добавления
(абсолютная + относительная, всегда), размер раздачи и рейтинг отдачи.
Спойлер контекста убран — контекст смотрят на /download/{id}.

Данные:
- рейтинг и общий размер — из живого снимка воркера (qbt total_size →
  worker.Live.TotalSize); размер доступен для любой раздачи в снимке;
- размер-фолбэк, когда торрента нет в qBittorrent (orphaned) — сумма
  размеров разложенных файлов: новая колонка file_link.size, layouter
  пишет размер при линковке, ридер LayoutSizeByDownload суммирует по
  странице одним запросом (дедуп по dst_path);
- дата — source_added_at → фолбэк created_at, показ в TZ сервера.

handleIndex читает снимок для всех карточек (map-lookup), рейтинг/размер
статичны на рендере (без поллинга). Миграция 0007, ER-схема обновлена.
Change download-card-lifecycle-overview влит в спеки и заархивирован.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 10:34:45 +03:00

62 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Why
Карточка загрузки в списке на главной сейчас показывает состояние, заголовок,
идентификатор и (для качающихся) прогресс. Для решения «пора ли удалять
раздачу» этого мало: пользователь удаляет по **возрасту** и по **рейтингу
отдачи**, а этих полей в обзоре нет. Одновременно карточка тратит место на
спойлер контекста, который логичнее смотреть на странице загрузки. Цель —
сделать карточку кратким обзором жизненного цикла: от загрузки до момента, когда
раздачу пора убирать.
## What Changes
- Убрать из карточки списка спойлер «контекст»; контекст остаётся доступен на
странице загрузки `/download/{id}`.
- Дописать метку `ID:` перед идентификатором загрузки — чтобы было понятно, что
за значение копируется.
- Показывать в карточке **всегда** дату добавления раздачи в формате
«`2026-06-30 · 5 дней назад`» (абсолютная + относительная). Источник — время
добавления в источник (`source_added_at`, qBittorrent `added_on`) с фолбэком
на время создания загрузки (`created_at`).
- Показывать в карточке **рейтинг отдачи** (ratio) из живого снимка воркера;
если торрента нет в qBittorrent — прочерк «—».
- Показывать в карточке **размер раздачи**: из живого снимка (общий размер
торрента), а когда торрента нет в qBittorrent — из суммарного размера
разложенных файлов.
- Расширить состав живой телеметрии общим размером раздачи (доступен для любой
раздачи в снимке, не только сидирующей).
- Раскладка при линковке SHALL сохранять размер каждого созданного файла — чтобы
фолбэк размера работал и после исчезновения торрента (`orphaned`).
Явно вне объёма: сиды/пиры, время сидирования и объём отданного в карточку не
добавляем — пользователю для решения об удалении достаточно возраста и рейтинга.
## Capabilities
### New Capabilities
Нет.
### Modified Capabilities
- `web-ui`: карточка списка получает обзорную мета-строку (ID-метка, дата
добавления всегда, размер, рейтинг); спойлер контекста уходит из карточки на
страницу загрузки.
- `live-status`: состав телеметрии дополняется общим размером раздачи, доступным
для любой раздачи в снимке (не только сидирующей).
- `file-layout`: раскладка сохраняет размер каждого разложенного файла (основа
фолбэка размера раздачи, когда торрента нет в qBittorrent).
## Impact
- `internal/qbt` — поле `TotalSize` (`json:"total_size"`) в `Torrent`.
- `internal/worker``Live.TotalSize`, проброс из `qbt.Torrent`.
- `internal/store` — колонка `file_link.size` (миграция goose), запись размера
при линковке, чтение суммарного размера разложенных файлов для карточки.
- `internal/httpapi` — новые поля `downloadView`, форматтеры даты/относительного
времени/размера/рейтинга; `handleIndex` читает живой снимок для всех карточек
списка, а не только качающихся.
- `web/templates/index.html` — мета-строка карточки (+ возможный партиал), удаление
спойлера контекста.
- `docs/specs/database.md` — обновить ER-схему (новая колонка `file_link.size`).