Структура проекта
Проект состоит из нескольких ключевых компонентов, каждый из которых отвечает за определённую задачу в системе. Все классы и файлы в проекте организованы для удобства работы и масштабируемости.
Классы и файлы
Файл config.ts
Конфигурационный файл, который содержит переменные и константы, используемые в проекте.
CURRENCY_DIR: Директория для хранения изображений валют.
CURRENCY_URL: URL-адрес для скачивания изображений валют.
MASTER_SYNC_INTERVAL: Интервал для синхронизации плейлиста (в миллисекундах).
LOG: Логер для вывода информации, ошибок и отладочных сообщений.
STORAGE: Директория для хранения скачанных данных.
Класс
Logдля логированияФункция
systemдля вызова команд из CLI
MediaFile
Класс для представления медиафайла с его MD5 хешем и размером.
Item
Класс, представляющий элемент (Item), который является медиафайлом с дополнительной информацией. Он включает URL для скачивания, продолжительность, и методы для скачивания и управления файлами. Наследуется от класса MediaFile.
Основные методы:
download(): Скачивание видео по URL. Проверяет, достаточно ли места на диске для скачивания и загружен ли файл.maxSize(): Вычисление максимального размера файла, который можно скачать, основываясь на свободном месте на диске.
Playlist
Класс для представления плейлиста, который содержит медиафайлы. Позволяет читать, генерировать и конвертировать плейлист в формат m3u.
Основные методы:
read(): Читает данные из файла плейлиста.needsNoInterruption(): Проверяет, нужно ли прерывать воспроизведение плейлиста.generate(): Генерирует новый плейлист на основе данных.
Manager
Класс для управления плейлистом и воспроизведением медиа.
Основные методы:
start(): Запускает воспроизведение плейлиста. Записывает M3U плейлист в файл, чтобы плеер мог его подхватить.stop(): Останавливает воспроизведение. Удаляет плейлист, чтобы остановить плеер.playFile(): Воспроизводит файл. Если файл не существует, выбрасывает исключение.
Master
Класс, представляющий Мастер-файл - основной объект, который содержит плейлист и метаданные для файлов. Плейлист может быть загружен как локально, так и удаленно, а также синхронизирован с дисковым хранилищем.
Основные методы:
current(): Возвращает текущий мастер-объект (удалённый или локальный).sync(): Синхронизирует локальные данные с мастер-файлом.save(): Сохраняет локальные изменения в мастер-файл.getPlaylistDuration(): Возвращает общую длительность плейлиста.
Player
Класс плеера, который управляет воспроизведением видео и взаимодействием с пользователем.
Основные методы:
call(): Запускает плеер и начинает воспроизведение видео.
PlaylistGenerator
Класс для генерации нового плейлиста. Синхронизирует мастер-файл, генерирует новый плейлист, и запускает проигрыватель.
Основные методы:
run(): Основной метод для запуска генерации плейлиста. Сначала синхронизирует мастер-файл, затем генерирует новый плейлист и запускает проигрыватель с новым плейлистом.
Currency
Класс для загрузки изображений валют (USD, EUR, BTC). Проверяет наличие директории для хранения изображений, скачивает изображения валют по URL и сохраняет их в нужную папку.
Основные методы:
download(): Скачивает изображения валют (USD, EUR, BTC).downloadCurrency(type: string): Скачивает изображение валюты по типу (USD, EUR, BTC).
CurrencyShow
Класс для отображения валютных изображений на экране. Проверяет наличие изображений валют и выводит их на экран с определенной периодичностью.
Основные методы:
show(): Отображает валютные изображения (USD, EUR, BTC) в цикле на экране.execWithTimeout(): Запускает команду с таймаутом для отображения изображения.