Files
chronicle.nixg.ru/telegram-archiver/TODO_NEXT.md
T

238 lines
8.2 KiB
Markdown
Raw 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.
# 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*