Pika — это персональный агрегатор для просмотра аниме.
Приложение собирает информацию о тайтлах и эпизодах из различных источников и объединяет их в единый интерфейс, позволяя удобно искать аниме, выбирать эпизоды, озвучку и качество, а затем запускать просмотр через встроенный плеер.
Проект создаётся как личный инструмент, ориентированный на удобство, модульность и расширяемость.
Pika — это не просто парсер сайтов, а платформа, которая:
- агрегирует информацию
- объединяет данные из разных источников
- хранит нормализованный каталог
- предоставляет API
- позволяет запускать воспроизведение выбранного эпизода
Главная цель — собрать всё в одном месте с удобным интерфейсом.
- единый интерфейс для просмотра
- модульная архитектура
- независимые источники
- быстрый и удобный поиск
- централизованный каталог
- расширяемость
Проект строится на экосистеме .NET.
Основной стек:
- .NET
- C#
- ASP.NET Core
- Avalonia UI
- SQLite / PostgreSQL
- Entity Framework Core
Проект находится в стадии разработки.
Начальная версия сосредоточена на:
- архитектуре
- модели данных
- базовом API
- первом источнике
- desktop клиенте
Посмотреть текущий статус можно в файле
This project is licensed under the MIT License — see the LICENSE file for details.
Приложение должно делать 2 вещи:
- Каталог
- Понять:
- что это за аниме;
- какие у него сезоны, фильмы, OVA, specials;
- какие есть эпизоды;
- как это красиво показать пользователю.
- Просмотр
- Понять:
- где этот эпизод можно открыть;
- какие есть варианты качества;
- какие есть озвучки;
- как передать это в плеер.
И вот это важно:
каталог и просмотр — это не одно и то же.
- Каталог — это “что существует”.
- Просмотр — это “что можно открыть прямо сейчас”.
Это один из главных архитектурных принципов проекта.
Думаем о проекта следующем образом (может быть все поменяется)
Это Avalonia-приложение.
Оно нужно для:
- поиска;
- открытия карточек;
- просмотра списков эпизодов;
- выбора качества/озвучки;
- запуска плеера;
- отображения истории просмотра;
Что desktop НЕ должен делать:
- не должен сам парсить сайты;
- не должен быть главным местом хранения данных;
- не должен содержать тяжелую логику синхронизации;
То есть desktop — это лицо приложения, а не его мозг.
Это ASP.NET Core API.
Это центральная точка системы. Именно оно отвечает на вопросы клиента:
- найди аниме;
- отдай карточку;
- отдай список эпизодов;
- отдай историю;
- подготовь варианты просмотра;
API — это мозг и диспетчер.
Оно:
- принимает запросы от desktop;
- берет данные из базы;
- решает, когда запускать обновление;
- отдает готовые ответы клиенту;
Это фоновый сервис.
Он нужен, чтобы делать тяжелую работу отдельно от UI и API.
Например:
- ходить по источникам;
- обновлять карточки;
- обновлять эпизоды;
- синхронизировать каталог;
- проверять, живы ли источники;
- чистить кэш;
Почему worker нужен отдельно
Потому что иначе:
- API начнет тормозить;
- desktop начнет зависать;
- вся система станет неустойчивой.
Worker — это “работник на фоне”.
Это память проекта.
В ней нужно хранить:
- тайтлы;
- альтернативные названия;
- сезоны / фильмы / OVA / specials;
- эпизоды;
- связи с источниками;
- историю просмотра;
- кэш поиска;
- состояние синхронизации.
База — это то место, где твоя система собирает все в единый порядок.
Это модули для конкретных источников.
Один источник = один адаптер.
Например, коннектор умеет:
- искать тайтлы на источнике;
- получать страницу тайтла;
- получать список эпизодов;
- получать варианты просмотра;
- резолвить playback-сессию;
Это очень важно держать отдельно, потому что именно эта часть чаще всего ломается.
Это внутренняя логика проекта.
Тут находятся основные сущности.
Это “язык”, на котором говорят все части системы.
Это слой сценариев.
Он отвечает на вопросы:
-
как искать аниме;
-
как открыть карточку;
-
как обновить данные;
-
как получить варианты просмотра;
-
как сохранить прогресс просмотра;
-
То есть domain — это “что существует”,
-
а application — это “что система умеет делать”.
Это технический слой.
Тут:
- EF Core;
- работа с базой;
- HTTP-клиенты;
- кэш;
- файловая система;
- логирование;
- реализация репозиториев;
Если просто: infrastructure = “техническая кухня”.
Необходим для исследовательской работы, до начала реализации Clean Architecture
[User]
|
v
[Desktop UI]
|
v
[API]
| \
| \
| -> [Database]
|
-> [Worker / jobs]
|
v
[Connectors]
|
v
[External sources]
pika/
│
├─ src/
│ │
│ ├─ Pika.Desktop/ # Avalonia UI приложение
│ │
│ ├─ Pika.Api/ # ASP.NET Core API
│ │
│ ├─ Pika.Worker/ # Background worker
│ │
│ ├─ Pika.Core/ # Domain + application logic
│ │
│ ├─ Pika.Infrastructure/ # Database, HTTP, кеш, файловая система
│ │
│ ├─ Pika.Connectors/ # Источники (парсеры сайтов)
│ │
│ ├─ Pika.Sandbox/ # Проект для тестов (полигон)
│ │
│ └─ Pika.Playback.Mpv/ # Проект для интеграции бекенда libmpv
│
├─ docs/
│ └─ ai/
│ ├─ project-context.md
│ └─ current-status.md
│
├─ tests/
│ ├─ Pika.Core.Tests/
│ ├─ Pika.Api.Tests/
│ └─ Pika.Connectors.Tests/
│
├─ .gitignore
├─ README.md
└─ pika.sln