Add TODO_NEXT.md — приоритизированный список задач для продолжения работы

This commit is contained in:
2026-03-06 22:19:15 +03:00
parent 8339af9b13
commit f3f76e94fd
+237
View File
@@ -0,0 +1,237 @@
# Telegram Archiver — Список задач для продолжения работы
**Дата:** 6 марта 2026 г.
**Статус:** Phase 0 MVP завершён, 992 поста заархивировано
---
## 🔴 Высокий приоритет (критичные баги)
### 0.10 — Посты без index.md
**Проблема:** Пост 987 — в папке только mp3 файл, index.md отсутствует.
**Что сделать:**
- [ ] Проверять наличие index.md после записи
- [ ] Создавать минимальный front-matter даже если текст пуст
- [ ] Логировать ошибки записи
**Файлы:** `app/archiver.py`
---
### 0.13 — Временная зона (GMT+3 Москва)
**Проблема:** `date: '2026-01-18T08:11:24+00:00'` — UTC вместо Москвы.
**Что сделать:**
- [ ] Конвертировать время: `date.astimezone(ZoneInfo('Europe/Moscow'))`
- [ ] Сохранять с offset +03:00
**Файлы:** `app/archiver.py`
---
### 0.15 — Размер файла = 0 во front-matter
**Проблема:** `size: 0` вместо реального размера.
**Что сделать:**
- [ ] Брать размер из атрибутов Telegram: `doc.size`
- [ ] Либо проверять после записи: `Path(filepath).stat().st_size`
**Файлы:** `app/telethon_client.py`, `app/archiver.py`
---
### 0.21 — Resume прерванной архивации
**Проблема:** 2 часа на 1000 постов — при обрыве начинать заново.
**Что сделать:**
- [ ] Сохранять `last_message_id` в файл состояния
- [ ] Добавить флаг `--resume` для продолжения
- [ ] При старте проверять последний ID
**Файлы:** `app/main.py`, `app/archiver.py`
---
## 🟡 Средний приоритет (улучшения)
### 0.9 — Прямые ссылки на посты
**Проблема:** Нет ссылок на оригинальные посты для репостов.
**Что сделать:**
- [ ] Для репостов: `original_post_url: https://t.me/channel/123`
- [ ] Для канала: `channel_url: https://t.me/dedinit`
- [ ] Для поста: `post_url: https://t.me/dedinit/1234`
**Файлы:** `app/archiver.py`
---
### 0.12 — Отчёт о неуспешно скачанных файлах
**Проблема:** Файлы по таймауту пропускаются без информации для дозагрузки.
**Что сделать:**
- [ ] Создавать `to_download_later.md` со списком URL
- [ ] Сохранять `message_id` и `media_id`
- [ ] Добавить команду `--resume-downloads`
**Файлы:** `app/archiver.py`, `app/main.py`
---
### 0.14 — Прямые ссылки на файлы
**Проблема:** При таймауте нет ссылки для дозагрузки.
**Что сделать:**
- [ ] Сохранять `download_url` во front-matter (временная ссылка)
- [ ] Для дозагрузки переподключаться к Telegram
- [ ] Запрашивать файл по ID через API
**Файлы:** `app/telethon_client.py`
---
### 0.16 — Расширенный front-matter
**Проблема:** Нет ссылок на канал, автора, оригинальный пост.
**Что сделать:**
```yaml
author: Дед in АйТи
author_username: "@dedinit"
channel_title: "Дед in АйТи"
channel_username: "@dedinit"
channel_url: "https://t.me/dedinit"
post_url: "https://t.me/dedinit/1234"
original_post_url: "https://t.me/otherchannel/987"
```
**Файлы:** `app/models.py`, `app/archiver.py`
---
## 🟢 Низкий приоритет (оптимизации)
### 0.11 — Видео-кружки и .bin файлы
**Проблема:** Пост 988 — видео-кружок сохранился как `.bin`.
**Что сделать:**
- [ ] Определять тип по MIME: `video/mp4` → `.mp4`
- [ ] Переименовывать после скачивания
- [ ] Опционально: конвертировать через ffmpeg
**Файлы:** `app/telethon_client.py`
---
### 0.17 — Многопоточное скачивание медиа
**Идея:** Скачивать медиафайлы параллельно (3-5 потоков).
**Что сделать:**
- [ ] Создать очередь на скачивание
- [ ] Запускать 3-5 корутин через `asyncio.gather()`
- [ ] Соблюдать rate limits (паузы)
**Ожидаемое ускорение:** в 2-3 раза
**Файлы:** `app/telethon_client.py`, `app/archiver.py`
---
### 0.18 — Валидация скачанных файлов
**Проблема:** Нет проверки целостности файлов.
**Что сделать:**
- [ ] Проверять размер после скачивания
- [ ] Проверять magic bytes
- [ ] Логировать битые файлы в `corrupted.md`
**Файлы:** `app/archiver.py`
---
### 0.19 — Очередь на скачивание + многопоточность
**Идея:** Разделить на 2 прохода: сбор URL → загрузка.
**Что сделать:**
- [ ] Первый проход: собрать все `download_url`
- [ ] Сохранить в `queue.json`
- [ ] Второй проход: загружать параллельно
**Файлы:** `app/archiver.py`, `app/main.py`
---
## 🔵 Долгий приоритет (фичи для Hugo)
### 0.20 — Аудио-файлы для Hugo
**Проблема:** Голосовые сообщения без метаданных.
**Что сделать:**
- [ ] Извлекать длительность: `doc.attributes.duration`
- [ ] Сохранять во front-matter: `duration: 45`
- [ ] Для Hugo: shortcode с wavesurfer.js
**Файлы:** `app/telethon_client.py`, `app/archiver.py`
---
### 0.22 — Формат тегов для Hugo
**Проблема:** Сейчас список YAML, Hugo предпочитает inline.
**Что сделать:**
- [ ] Изменить формат: `tags: ["tag1", "tag2"]`
- [ ] Протестировать в Hugo
**Файлы:** `app/archiver.py`
---
### 0.23 — Обработка трансляций
**Проблема:** Посты 122, 120 — трансляции без текста.
**Что сделать:**
- [ ] Изучить `message.media` для трансляций
- [ ] Сохранять метаданные во front-matter
- [ ] Создавать index.md с информацией
**Файлы:** `app/archiver.py`
---
### 0.24 — Голосовые сообщения
**Проблема:** Голосовухи как `.bin` или `.ogg`.
**Что сделать:**
- [ ] Определять по MIME: `audio/ogg` → `.ogg`
- [ ] Извлекать длительность
- [ ] Сохранять: `duration: 45, size: 127359`
**Файлы:** `app/telethon_client.py`
---
## 📋 План на следующую сессию
### Рекомендуется начать с:
1. **0.21** — Resume (критично для длинных каналов)
2. **0.13** — Временная зона (важно для корректности)
3. **0.15** — Размер файлов (простое исправление)
4. **0.10** — Посты без index.md (критичный баг)
### Затем:
5. **0.9, 0.16** — Ссылки на посты (важно для навигации)
6. **0.12, 0.14** — Отчёт о таймаутах (удобство)
7. **0.17, 0.19** — Многопоточность (производительность)
---
## 🎯 Глобальные цели
- [ ] Завершить Phase 0 (исправить все баги)
- [ ] Перейти к Phase 1 (лендинг + GitHub)
- [ ] Подготовить к продакшену
---
*Документ создан: 6 марта 2026 г.*
*Следующее обновление: после исправления задач 0.10, 0.13, 0.15, 0.21*