47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
#
|
|
# Description: Automatically mark a multi-episode file as watched in Plex.
|
|
# Author: /u/SwiftPanda16
|
|
# Requires: plexapi
|
|
# Tautulli script trigger:
|
|
# * Notify on watched
|
|
# Tautulli script conditions:
|
|
# * Condition {1}:
|
|
# [ Media Type | is | episode ]
|
|
# * Condition {2} (optional):
|
|
# [ Username | is | username ]
|
|
# Tautulli script arguments:
|
|
# * Watched:
|
|
# --rating_key {rating_key} --filename {filename}
|
|
|
|
import argparse
|
|
import os
|
|
from plexapi.server import PlexServer
|
|
|
|
PLEX_URL = ''
|
|
PLEX_TOKEN = ''
|
|
|
|
# Environmental Variables
|
|
PLEX_URL = os.getenv('PLEX_URL', PLEX_URL)
|
|
PLEX_USER_TOKEN = os.getenv('PLEX_USER_TOKEN', PLEX_TOKEN)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--rating_key', required=True, type=int)
|
|
parser.add_argument('--filename', required=True)
|
|
opts = parser.parse_args()
|
|
|
|
plex = PlexServer(PLEX_URL, PLEX_USER_TOKEN)
|
|
|
|
for episode in plex.fetchItem(opts.rating_key).season().episodes():
|
|
if episode.ratingKey == opts.rating_key:
|
|
continue
|
|
if any(opts.filename in part.file for media in episode.media for part in media.parts):
|
|
print("Marking multi-episode file '{grandparentTitle} - S{parentIndex}E{index}' as watched.".format(
|
|
grandparentTitle=episode.grandparentTitle.encode('UTF-8'),
|
|
parentIndex=str(episode.parentIndex).zfill(2),
|
|
index=str(episode.index).zfill(2)))
|
|
episode.markWatched()
|