Автоматически отмечает просмотренные серии сериалов и фильмы в MyShows во время просмотра в IINA.
- Определяет текущую серию, отправляя имя файла в MyShows API
- Если прямой поиск не дал результата, парсит имя файла (название сериала + номер сезона/серии)
- Отмечает серию как просмотренную, когда воспроизведение достигает настраиваемого порога (по умолчанию: 70%)
- Показывает сообщение на экране при отметке серии
- Откройте IINA → Настройки → Плагины и нажмите Установить с GitHub
- Введите
amiv1/iina-plugin-myshowsи нажмите Установить - Плагин покажет запрашиваемые разрешения — нажмите Установить ещё раз
- MyShows появится в списке установленных плагинов — нажмите на него
- Откройте вкладку Настройки и введите данные вашего аккаунта MyShows
- Если видео уже открыто, переоткройте его или перезапустите IINA
- Сеть: для обращений к MyShows API (аутентификация и управление просмотром)
- Показывать сообщения на экране: для отображения уведомления при отметке эпизода, если включено в настройках
- Плагин аутентифицируется напрямую в MyShows, отправляя учётные данные на
https://myshows.me/api/sessionи получая bearer-токен. - При загрузке видеофайла плагин извлекает имя файла и отправляет его в MyShows API (
shows.SearchByFile) - Если API не смог найти серию, плагин парсит имя файла в поисках названия сериала и номера сезона/серии (например,
S01E03или1x03) и выполняет поиск черезshows.Search+shows.GetById - После определения серии, каждые 5 секунд отслеживается прогресс воспроизведения
- Когда прогресс достигает заданного порога, вызывается
manage.CheckEpisodeдля отметки эпизода как просмотренного
sequenceDiagram
participant IINA
participant Player as Plugin (player)
participant Global as Plugin (global)
participant API as MyShows API
IINA->>Player: File loaded
Player->>Global: Search for episode by filename
alt Not authenticated yet
Global->>API: Authenticate with username & password (POST /api/session)
API-->>Global: Bearer token
end
Global->>API: Look up episode by filename
API-->>Global: Episode ID or empty
alt Episode not found by filename
Global->>Global: Parse show name, season & episode from filename
Global->>API: Search show by name
API-->>Global: List of matching shows
Global->>API: Get full episode list for best match
API-->>Global: Show with all episodes
Global->>Global: Match by season & episode number
end
alt Episode identified
Global-->>Player: Episode found
loop Every N seconds while playing
Player->>Player: Check playback progress
end
Player->>Global: Mark as watched
Global->>API: Mark episode as watched
API-->>Global: OK
Global-->>Player: Marked successfully
Player->>IINA: Show OSD confirmation
else Episode not identified
Global-->>Player: Episode not found, do nothing
end
# Установить зависимости
npm install
# Собрать проект
npm run build
# Запустить тесты
npm test
# Создать коммит в формате conventional commits (используется для автоматического версионирования)
npm run commitРелизы автоматизированы через semantic-release. Коммиты в ветке main, соответствующие формату Conventional Commits, автоматически запускают обновление версии, сборку, упаковку плагина и создание GitHub-релиза.
| Тип коммита | Тип версии |
|---|---|
fix: |
Патч (1.0.x) |
feat: |
Минорная (1.x.0) |
feat!: / BREAKING CHANGE |
Мажорная (x.0.0) |