Skip to content

Commit 574d023

Browse files
committed
Added keepSeason tag to keep only the latest season
1 parent 34c9898 commit 574d023

File tree

1 file changed

+38
-15
lines changed

1 file changed

+38
-15
lines changed

tools/plex-autodelete.py

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@
66
religiously keep every single episode that is downloaded.
77
88
Usage:
9-
Intended usage is to add one of the tags keep5', keep10, keep15, to any show
10-
you want to have this behaviour. Then simply add this script to run on a schedule
11-
and you should be all set.
9+
Intended usage is to add one of the tags keep5, keep10, keep15, keepSeason, to
10+
any show you want to have this behaviour. Then simply add this script to run on
11+
a schedule and you should be all set.
1212
1313
Example Crontab:
14-
*/5 * * * * /home/atodd/plex-autodelete.py >> /home/atodd/plex-autodelete.log 2>&1
14+
@daily /home/atodd/plex-autodelete.py >> /home/atodd/plex-autodelete.log 2>&1
1515
"""
1616
import os
1717
from datetime import datetime
1818
from plexapi.server import PlexServer
1919

20-
TAGS = {'keep5':5, 'keep10':10, 'keep15':15}
20+
TAGS = {'keep5':5, 'keep10':10, 'keep15':15, 'keepSeason':'season'}
2121
datestr = lambda: datetime.now().strftime('%Y-%m-%d %H:%M:%S')
2222

2323

@@ -28,7 +28,6 @@ def delete_episode(episode):
2828
filepath = mediapart.file
2929
print('%s Deleting %s.' % (datestr(), filepath))
3030
os.unlink(filepath)
31-
# Check the parent directory is empty
3231
dirname = os.path.dirname(filepath)
3332
if not os.listdir(dirname):
3433
print('%s Removing empty directory %s.' % (datestr(), dirname))
@@ -37,18 +36,42 @@ def delete_episode(episode):
3736
print('%s Error deleting %s; %s' % (datestr(), filepath, err))
3837

3938

40-
if __name__ == '__main__':
41-
print('%s Starting plex-markwatched script..' % datestr())
39+
def keep_episodes(show, keep):
40+
""" Delete all but last count episodes in show. """
41+
deleted = 0
42+
print('%s Cleaning %s to %s episodes.' % (datestr(), show.title, keep))
43+
sort = lambda x:x.originallyAvailableAt or x.addedAt
44+
items = sorted(show.episodes(), key=sort, reverse=True)
45+
for episode in items[keep:]:
46+
delete_episode(episode)
47+
deleted += 1
48+
return deleted
49+
50+
51+
def keep_season(show, keep):
52+
""" Keep only the latest season. """
53+
deleted = 0
54+
print('%s Cleaning %s to latest season.' % (datestr(), show.title))
55+
for season in show.seasons()[:-1]:
56+
for episode in season.episodes():
57+
delete_episode(episode)
58+
deleted += 1
59+
return deleted
60+
61+
62+
def auto_delete():
63+
print('\n%s Starting plex-autodelete script..' % datestr())
4264
plex = PlexServer()
4365
for section in plex.library.sections():
4466
if section.type in ('show',):
45-
episodes_deleted = 0
67+
deleted = 0
4668
for tag, keep in TAGS.items():
69+
func = keep_season if keep == 'season' else keep_episodes
4770
for show in section.search(collection=tag):
48-
print('%s Cleaning %s to %s items.' % (datestr(), show.title, keep))
49-
items = sorted(show.episodes(), key=lambda x:x.originallyAvailableAt or x.addedAt, reverse=True)
50-
for episode in items[keep:]:
51-
delete_episode(episode)
52-
episodes_deleted += 1
53-
if episodes_deleted:
71+
deleted += func(show, keep)
72+
if deleted:
5473
section.update()
74+
75+
76+
if __name__ == '__main__':
77+
auto_delete()

0 commit comments

Comments
 (0)