Smart Torrent Storage Management
Модуль Smart Torrent Storage Management предоставляет интеллектуальное управление свободным местом на дисках медиатеки, автоматическую предзагрузку сериалов на основе активности пользователей и интерактивную очистку дисков.
Архитектура системы
Система состоит из пяти основных компонентов, взаимодействующих через SQLite БД (media.db) и Web API клиента qBittorrent:
[User Watch History] -> [WatchActivityDetector]
|
v (actively watched status)
[DiskQuotaManager] -> [TorrentPrefetchAgent] -> [qBittorrent Client]
|
v (retention / purge)
[TorrentRetentionAgent] & [InteractiveRetentionAgent]
Компоненты
1. Менеджер квот (DiskQuotaManager)
Модуль disk_quota_manager.py отвечает за мониторинг физических накопителей и расчет логических зон: * 70% Хранилище (Archive/Storage): Постоянное место для фильмов и сохраненных 1-х сезонов сериалов. * 25% Буфер загрузок (Active Downloads): Временное место для активных фоновых закачек. * 5% Неприкосновенный запас (Emergency Reserve): Предохранительный буфер. Если свободное место падает ниже 5%, все новые загрузки блокируются.
2. Детектор просмотров (WatchActivityDetector)
Модуль watch_activity_detector.py анализирует историю проигрывания:
* Читает историю из персональных JSON-профилей пользователей (user_profile_*.json).
* Если в 1-м сезоне сериала просмотрено не менее 3 серий (с прогрессом воспроизведения > 50% или флагом completed), сериал получает статус actively_watched.
3. Автоматический агент очистки (TorrentRetentionAgent)
Модуль torrent_retention_agent.py чистит неактивные сериалы:
* Для сериалов без статуса actively_watched находит все серии сезонов > 1.
* Физически удаляет файлы этих серий с диска и из БД.
* Устанавливает приоритет этих файлов в qBittorrent в значение 0 ("Do Not Download"), сохраняя раздачу в клиенте без лишнего расхода диска.
* Сохраняет пилотную серию и весь первый сезон.
4. Агент фоновой предзагрузки (TorrentPrefetchAgent)
Модуль torrent_prefetch_agent.py скачивает продолжение:
* Для сериалов со статусом actively_watched автоматически переводит файлы последующих сезонов (сезон 2 и далее) из статуса "Do Not Download" в приоритет "Normal" (1).
* Проверяет доступный лимит диска перед стартом новых закачек.
5. Интерактивный агент очистки (InteractiveRetentionAgent)
Модуль interactive_retention_agent.py готовит кандидатов на удаление:
* Ищет сериалы/фильмы, которые:
1. Полностью просмотрены (completed = True на всех сериях).
2. Не просматривались более 30 дней.
3. Брошены на середине (не просматривались > 30 дней, но не завершены).
* Позволяет администраторам подтвердить очистку через интерфейс Telegram.
Интеграция с Telegram-ботом
В Telegram-боте реализована интерактивная команда управления дисками:
* /clean — Доступна только для пользователей с ролью admin в базе данных. Выводит интерактивный список кандидатов на очистку с размером файлов на диске и причиной удаления (например, "Брошено на середине").
* При нажатии inline-кнопки 🗑️ Удалить <Название> бот обращается к InteractiveRetentionAgent, удаляет файлы, отключает закачку в qBittorrent и высылает отчет об освобожденном месте.
* Кнопка ❌ Отменить прерывает процесс очистки.
Тестирование и запуск
Для проверки работоспособности всех компонентов в режиме симуляции (Dry Run) используйте проверочный скрипт:
Скрипт проверяет дисковые лимиты, считывает профили, опрашивает qBittorrent API и имитирует шаги очистки и предзагрузки без изменения файлов.