mirror of
https://github.com/pkkid/python-plexapi
synced 2024-11-25 05:00:22 +00:00
Added keepSeason tag to keep only the latest season
This commit is contained in:
parent
34c98986ae
commit
574d023093
1 changed files with 38 additions and 15 deletions
|
@ -6,18 +6,18 @@ This comes in handy when you have a show you keep downloaded, but do not
|
|||
religiously keep every single episode that is downloaded.
|
||||
|
||||
Usage:
|
||||
Intended usage is to add one of the tags keep5', keep10, keep15, to any show
|
||||
you want to have this behaviour. Then simply add this script to run on a schedule
|
||||
and you should be all set.
|
||||
Intended usage is to add one of the tags keep5, keep10, keep15, keepSeason, to
|
||||
any show you want to have this behaviour. Then simply add this script to run on
|
||||
a schedule and you should be all set.
|
||||
|
||||
Example Crontab:
|
||||
*/5 * * * * /home/atodd/plex-autodelete.py >> /home/atodd/plex-autodelete.log 2>&1
|
||||
@daily /home/atodd/plex-autodelete.py >> /home/atodd/plex-autodelete.log 2>&1
|
||||
"""
|
||||
import os
|
||||
from datetime import datetime
|
||||
from plexapi.server import PlexServer
|
||||
|
||||
TAGS = {'keep5':5, 'keep10':10, 'keep15':15}
|
||||
TAGS = {'keep5':5, 'keep10':10, 'keep15':15, 'keepSeason':'season'}
|
||||
datestr = lambda: datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
|
||||
|
@ -28,7 +28,6 @@ def delete_episode(episode):
|
|||
filepath = mediapart.file
|
||||
print('%s Deleting %s.' % (datestr(), filepath))
|
||||
os.unlink(filepath)
|
||||
# Check the parent directory is empty
|
||||
dirname = os.path.dirname(filepath)
|
||||
if not os.listdir(dirname):
|
||||
print('%s Removing empty directory %s.' % (datestr(), dirname))
|
||||
|
@ -37,18 +36,42 @@ def delete_episode(episode):
|
|||
print('%s Error deleting %s; %s' % (datestr(), filepath, err))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print('%s Starting plex-markwatched script..' % datestr())
|
||||
def keep_episodes(show, keep):
|
||||
""" Delete all but last count episodes in show. """
|
||||
deleted = 0
|
||||
print('%s Cleaning %s to %s episodes.' % (datestr(), show.title, keep))
|
||||
sort = lambda x:x.originallyAvailableAt or x.addedAt
|
||||
items = sorted(show.episodes(), key=sort, reverse=True)
|
||||
for episode in items[keep:]:
|
||||
delete_episode(episode)
|
||||
deleted += 1
|
||||
return deleted
|
||||
|
||||
|
||||
def keep_season(show, keep):
|
||||
""" Keep only the latest season. """
|
||||
deleted = 0
|
||||
print('%s Cleaning %s to latest season.' % (datestr(), show.title))
|
||||
for season in show.seasons()[:-1]:
|
||||
for episode in season.episodes():
|
||||
delete_episode(episode)
|
||||
deleted += 1
|
||||
return deleted
|
||||
|
||||
|
||||
def auto_delete():
|
||||
print('\n%s Starting plex-autodelete script..' % datestr())
|
||||
plex = PlexServer()
|
||||
for section in plex.library.sections():
|
||||
if section.type in ('show',):
|
||||
episodes_deleted = 0
|
||||
deleted = 0
|
||||
for tag, keep in TAGS.items():
|
||||
func = keep_season if keep == 'season' else keep_episodes
|
||||
for show in section.search(collection=tag):
|
||||
print('%s Cleaning %s to %s items.' % (datestr(), show.title, keep))
|
||||
items = sorted(show.episodes(), key=lambda x:x.originallyAvailableAt or x.addedAt, reverse=True)
|
||||
for episode in items[keep:]:
|
||||
delete_episode(episode)
|
||||
episodes_deleted += 1
|
||||
if episodes_deleted:
|
||||
deleted += func(show, keep)
|
||||
if deleted:
|
||||
section.update()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
auto_delete()
|
||||
|
|
Loading…
Reference in a new issue