|
18 | 18 | from plexapi.server import PlexServer |
19 | 19 |
|
20 | 20 |
|
| 21 | +def _has_markwatched_tag(item): |
| 22 | + collections = item.show().collections if item.type == 'episode' else item.collections |
| 23 | + tags = [c.tag.lower() for c in collections] |
| 24 | + return 'markwatched' in tags |
| 25 | + |
| 26 | + |
| 27 | +def _get_title(item): |
| 28 | + if item.type == 'episode': |
| 29 | + return f'{item.grandparentTitle} {item.seasonEpisode}' |
| 30 | + return item.title |
| 31 | + |
| 32 | + |
| 33 | +def _iter_items(search): |
| 34 | + for item in search: |
| 35 | + if item.type in ['show']: |
| 36 | + for episode in item.episodes(): |
| 37 | + yield episode |
| 38 | + break |
| 39 | + yield item |
| 40 | + |
| 41 | + |
21 | 42 | if __name__ == '__main__': |
22 | 43 | datestr = lambda: datetime.now().strftime('%Y-%m-%d %H:%M:%S') |
23 | | - print('%s Starting plex-markwatched script..' % datestr()) |
| 44 | + print(f'{datestr()} Starting plex-markwatched script..') |
24 | 45 | plex = PlexServer() |
25 | 46 | for section in plex.library.sections(): |
26 | | - if section.type in ('show',): # ('movie', 'artist', 'show'): |
27 | | - for item in section.search(collection='markwatched'): |
28 | | - for episode in item.episodes(): |
29 | | - if not episode.isWatched: |
30 | | - print('%s Marking %s watched.' % (datestr(), episode.title)) |
31 | | - item.markWatched() |
| 47 | + print(f'{datestr()} Checking {section.title} for unwatched items..') |
| 48 | + for item in _iter_items(section.search(collection='markwatched')): |
| 49 | + if not item.isWatched: |
| 50 | + print(f'{datestr()} Marking {_get_title(item)} watched.') |
| 51 | + item.markWatched() |
| 52 | + # Check all OnDeck items |
| 53 | + print(f'{datestr()} Checking OnDeck for unwatched items..') |
| 54 | + for item in plex.library.onDeck(): |
| 55 | + if not item.isWatched and _has_markwatched_tag(item): |
| 56 | + print(f'{datestr()} Marking {_get_title(item)} watched.') |
| 57 | + item.markWatched() |
0 commit comments