From 639c0395c2149bb5edc1af0753b6406c8b268d71 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Thu, 17 Dec 2020 08:11:16 -0500 Subject: [PATCH 01/13] addressing #253 starting work on adding last_played --- utility/media_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index c4f1216..3ec4ad7 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -54,7 +54,7 @@ if not TAUTULLI_APIKEY: VERIFY_SSL = False -SELECTOR = ['watched', 'unwatched', 'transcoded', 'rating', 'size'] +SELECTOR = ['watched', 'unwatched', 'transcoded', 'rating', 'size', 'last_played'] ACTIONS = ['delete', 'move', 'archive', 'optimize', 'show'] OPERATORS = { '>': lambda v, q: v > q, '>=': lambda v, q: v >= q, From ebfbc51f72b0b7f4f8c097aee9f13cf9f458a2b6 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Fri, 18 Dec 2020 08:37:59 -0500 Subject: [PATCH 02/13] initial work for adding last_played. --- utility/media_manager.py | 66 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index 3ec4ad7..ac7d2a9 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -54,7 +54,7 @@ if not TAUTULLI_APIKEY: VERIFY_SSL = False -SELECTOR = ['watched', 'unwatched', 'transcoded', 'rating', 'size', 'last_played'] +SELECTOR = ['watched', 'unwatched', 'transcoded', 'rating', 'size', 'lastPlayed'] ACTIONS = ['delete', 'move', 'archive', 'optimize', 'show'] OPERATORS = { '>': lambda v, q: v > q, '>=': lambda v, q: v >= q, @@ -231,7 +231,8 @@ class Tautulli(object): payload = {} return self._call_api('get_libraries', payload) - def get_library_media_info(self, section_id, start, length, unwatched=None, date=None, order_column=None): + def get_library_media_info(self, section_id, start, length, unwatched=None, date=None, order_column=None, + last_played=None): """Call Tautulli's get_library_media_info api endpoint.""" payload = {'section_id': section_id} if start: @@ -248,6 +249,8 @@ class Tautulli(object): elif unwatched and date: return [d for d in library_stats['data'] if d['play_count'] is None and (float(d['added_at'])) < date] + elif last_played and date: + return [d for d in library_stats['data'] if d['play_count'] is not None] else: return [d for d in library_stats['data']] @@ -313,6 +316,42 @@ def plex_deletion(items, libraries, toggleDeletion): plex._allowMediaDeletion(False) +def last_played_work(sectionID, date=None): + """ + Parameters + ---------- + sectionID (int): Library key + date (float): Epoch time + + Returns + ------- + last_played_lst (list): List of Metdata objects of last played items + """ + count = 25 + start = 0 + last_played_lst = [] + while True: + + # Getting all watched history + tt_history = tautulli_server.get_library_media_info(section_id=sectionID, + start=start, length=count, last_played=True, + date=date, order_column='last_played') + + if all([tt_history]): + start += count + for item in tt_history: + _meta = tautulli_server.get_metadata(item['rating_key']) + metadata = Metadata(_meta) + if (float(item['last_played'])) < date: + metadata.last_played = item['last_played'] + last_played_lst.append(metadata) + elif not all([tt_history]): + break + start += count + + return last_played_lst + + def unwatched_work(sectionID, date=None): """ Parameters @@ -541,6 +580,7 @@ if __name__ == '__main__': all_sections = [] watched_lst = [] unwatched_lst = [] + last_played_lst = [] size_lst = [] user_lst = [] transcode_lst = [] @@ -632,6 +672,28 @@ if __name__ == '__main__': if opts.action == "delete": plex_deletion(watched_by_all, libraries, opts.toggleDeletion) + + if opts.select == "lastPlayed": + if libraries: + for _library in libraries: + print("Checking library: '{}' watch statuses...".format(_library.title)) + last_played_lst += last_played_work(sectionID=_library.key, date=date) + + if opts.action == "show": + print("The following items were last played before {}".format(opts.date)) + sizes = [] + for item in last_played_lst: + added_at = datetime.datetime.utcfromtimestamp(float(item.added_at)).strftime("%Y-%m-%d") + last_played = datetime.datetime.utcfromtimestamp(float(item.last_played)).strftime("%Y-%m-%d") + size = int(item.file_size) if item.file_size else '' + sizes.append(size) + print(u"\t{} added {} and last played {}\tSize: {}\n\t\tFile: {}".format( + item.title, added_at, last_played, sizeof_fmt(size), item.file)) + total_size = sum(sizes) + print("Total size: {}".format(sizeof_fmt(total_size))) + + if opts.action == "delete": + plex_deletion(last_played_lst, libraries, opts.toggleDeletion) if opts.select in ["size", "rating", "transcoded"]: if opts.selectValue: From 06589274bf45c37eb7e8cf0254b79d7c21bf9545 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 20 Dec 2020 15:51:18 -0500 Subject: [PATCH 03/13] update the metadata when pulling from history. Get the items metadata instead of just the history attributes --- utility/media_manager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utility/media_manager.py b/utility/media_manager.py index ac7d2a9..5846931 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -461,6 +461,8 @@ def watched_work(user, sectionID=None, ratingKey=None): if user.watch.get(metadata.rating_key): user.watch.get(metadata.rating_key).watched_status += 1 else: + _meta = tautulli_server.get_metadata(metadata.rating_key) + metadata = Metadata(_meta) user.watch.update({metadata.rating_key: metadata}) continue From ce8610d0ed6227bf7ef50ac72d0b125681f93a7b Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 20 Dec 2020 15:57:38 -0500 Subject: [PATCH 04/13] add action_show function to route all action calls of show --- utility/media_manager.py | 65 ++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index 5846931..f0789ff 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -520,6 +520,41 @@ def transcode_work(sectionID, operator, value): return transcoding_lst +def action_show(items, selector, date, users=None): + sizes = [] + + print("{} item(s) have been found.".format(len(items))) + if selector == 'lastPlayed': + print("The following items were last played before {}".format(date)) + elif selector == 'watched': + print("The following items were watched by {}".format(", ".join([user.name for user in users]))) + else: + print("The following items were added before {}".format(date)) + + for item in items: + if selector == 'watched': + item = users[0].watch[item] + added_at = datetime.datetime.utcfromtimestamp(float(item.added_at)).strftime("%Y-%m-%d") + size = int(item.file_size) if item.file_size else 0 + sizes.append(size) + + if selector == 'lastPlayed': + last_played = datetime.datetime.utcfromtimestamp(float(item.last_played)).strftime("%Y-%m-%d") + print(u"\t{} added {} and last played {}\tSize: {}\n\t\tFile: {}".format( + item.title, added_at, last_played, sizeof_fmt(size), item.file)) + + elif selector == 'transcoded': + print(u"\t{} added {}\tSize: {}\tTransocded: {} time(s)\n\t\tFile: {}".format( + item.title, added_at, file_size, item.transcode_count, item.file)) + + else: + print(u"\t{} added {}\tSize: {}\n\t\tFile: {}".format( + item.title, added_at, sizeof_fmt(size), item.file)) + + total_size = sum(sizes) + print("Total size: {}".format(sizeof_fmt(total_size))) + + if __name__ == '__main__': session = Connection().session @@ -625,16 +660,7 @@ if __name__ == '__main__': unwatched_lst += unwatched_work(sectionID=_library.key, date=date) if opts.action == "show": - print("The following items were added before {}".format(opts.date)) - sizes = [] - for item in unwatched_lst: - added_at = datetime.datetime.utcfromtimestamp(float(item.added_at)).strftime("%Y-%m-%d") - size = int(item.file_size) if item.file_size else '' - sizes.append(size) - print(u"\t{} added {}\tSize: {}\n\t\tFile: {}".format( - item.title, added_at, sizeof_fmt(size), item.file)) - total_size = sum(sizes) - print("Total size: {}".format(sizeof_fmt(total_size))) + action_show(unwatched_lst, opts.select, opts.date) if opts.action == "delete": plex_deletion(unwatched_lst, libraries, opts.toggleDeletion) @@ -642,7 +668,7 @@ if __name__ == '__main__': if opts.select == "watched": if libraries: for user in user_lst: - print(("Finding watched items from user: {}",format(user.name))) + print("Finding watched items from user: {}".format(user.name)) for _library in libraries: print("Checking library: '{}' watch statuses...".format(_library.title)) watched_work(user=user, sectionID=_library.key) @@ -667,10 +693,7 @@ if __name__ == '__main__': watched_by_all = list(set(watched_by_all)) if opts.action == "show": - print("The following items were watched by {}".format(", ".join([user.name for user in user_lst]))) - for watched in watched_by_all: - metadata = user_lst[0].watch[watched] - print(u" {}".format(metadata.full_title)) + action_show(watched_by_all, opts.select, opts.date, user_lst) if opts.action == "delete": plex_deletion(watched_by_all, libraries, opts.toggleDeletion) @@ -682,17 +705,7 @@ if __name__ == '__main__': last_played_lst += last_played_work(sectionID=_library.key, date=date) if opts.action == "show": - print("The following items were last played before {}".format(opts.date)) - sizes = [] - for item in last_played_lst: - added_at = datetime.datetime.utcfromtimestamp(float(item.added_at)).strftime("%Y-%m-%d") - last_played = datetime.datetime.utcfromtimestamp(float(item.last_played)).strftime("%Y-%m-%d") - size = int(item.file_size) if item.file_size else '' - sizes.append(size) - print(u"\t{} added {} and last played {}\tSize: {}\n\t\tFile: {}".format( - item.title, added_at, last_played, sizeof_fmt(size), item.file)) - total_size = sum(sizes) - print("Total size: {}".format(sizeof_fmt(total_size))) + action_show(last_played_lst, opts.select, opts.date) if opts.action == "delete": plex_deletion(last_played_lst, libraries, opts.toggleDeletion) From 7f20da0ca9b8a868998aebe4a751e925e79edea5 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 20 Dec 2020 15:58:30 -0500 Subject: [PATCH 05/13] Correction for when history may pull ratingKeys as None, this causes errors later on. --- utility/media_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index f0789ff..2ff80e1 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -687,7 +687,7 @@ if __name__ == '__main__': watched_work(user=user, ratingKey=opts.ratingKey) # Find all items watched by all users - all_watched = [key for user in user_lst for key in user.watch.keys()] + all_watched = [key for user in user_lst for key in user.watch.keys() if key is not None] counts = Counter(all_watched) watched_by_all = [id for id in all_watched if counts[id] >= len(user_lst)] watched_by_all = list(set(watched_by_all)) From 0125865124126cdb030bb39ac6c15a7f2d62647f Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 20 Dec 2020 16:05:33 -0500 Subject: [PATCH 06/13] adding try/except for addressing #253 --- utility/media_manager.py | 47 +++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index 2ff80e1..f2f00a8 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -530,29 +530,32 @@ def action_show(items, selector, date, users=None): print("The following items were watched by {}".format(", ".join([user.name for user in users]))) else: print("The following items were added before {}".format(date)) - - for item in items: - if selector == 'watched': - item = users[0].watch[item] - added_at = datetime.datetime.utcfromtimestamp(float(item.added_at)).strftime("%Y-%m-%d") - size = int(item.file_size) if item.file_size else 0 - sizes.append(size) - if selector == 'lastPlayed': - last_played = datetime.datetime.utcfromtimestamp(float(item.last_played)).strftime("%Y-%m-%d") - print(u"\t{} added {} and last played {}\tSize: {}\n\t\tFile: {}".format( - item.title, added_at, last_played, sizeof_fmt(size), item.file)) - - elif selector == 'transcoded': - print(u"\t{} added {}\tSize: {}\tTransocded: {} time(s)\n\t\tFile: {}".format( - item.title, added_at, file_size, item.transcode_count, item.file)) - - else: - print(u"\t{} added {}\tSize: {}\n\t\tFile: {}".format( - item.title, added_at, sizeof_fmt(size), item.file)) - - total_size = sum(sizes) - print("Total size: {}".format(sizeof_fmt(total_size))) + for item in items: + try: + if selector == 'watched': + item = users[0].watch[item] + added_at = datetime.datetime.utcfromtimestamp(float(item.added_at)).strftime("%Y-%m-%d") + size = int(item.file_size) if item.file_size else 0 + sizes.append(size) + + if selector == 'lastPlayed': + last_played = datetime.datetime.utcfromtimestamp(float(item.last_played)).strftime("%Y-%m-%d") + print(u"\t{} added {} and last played {}\tSize: {}\n\t\tFile: {}".format( + item.title, added_at, last_played, sizeof_fmt(size), item.file)) + + elif selector == 'transcoded': + print(u"\t{} added {}\tSize: {}\tTransocded: {} time(s)\n\t\tFile: {}".format( + item.title, added_at, file_size, item.transcode_count, item.file)) + + else: + print(u"\t{} added {}\tSize: {}\n\t\tFile: {}".format( + item.title, added_at, sizeof_fmt(size), item.file)) + + total_size = sum(sizes) + print("Total size: {}".format(sizeof_fmt(total_size))) + except TypeError as e: + print("Item: {} caused the following error: {}".format(item.rating_key, e)) if __name__ == '__main__': From 12eb897ad0e65c9690086057203a87563efe8b4d Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 20 Dec 2020 16:41:32 -0500 Subject: [PATCH 07/13] indention corrections --- utility/media_manager.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index f2f00a8..2e8c1a1 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -546,17 +546,17 @@ def action_show(items, selector, date, users=None): elif selector == 'transcoded': print(u"\t{} added {}\tSize: {}\tTransocded: {} time(s)\n\t\tFile: {}".format( - item.title, added_at, file_size, item.transcode_count, item.file)) + item.title, added_at, sizeof_fmt(size), item.transcode_count, item.file)) else: print(u"\t{} added {}\tSize: {}\n\t\tFile: {}".format( item.title, added_at, sizeof_fmt(size), item.file)) - total_size = sum(sizes) - print("Total size: {}".format(sizeof_fmt(total_size))) except TypeError as e: print("Item: {} caused the following error: {}".format(item.rating_key, e)) + total_size = sum(sizes) + print("Total size: {}".format(sizeof_fmt(total_size))) if __name__ == '__main__': From 37aab68400600910e9da5acadafc747fbc11c75d Mon Sep 17 00:00:00 2001 From: blacktwin Date: Sun, 20 Dec 2020 16:43:38 -0500 Subject: [PATCH 08/13] clean up show actions for reminder of selectors --- utility/media_manager.py | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index 2e8c1a1..7f33a02 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -734,15 +734,7 @@ if __name__ == '__main__': size_lst += size_work(sectionID=_library.key, operator=op, value=size, episodes=opts.episodes) if opts.action == "show": - sizes = [] - for item in size_lst: - added_at = datetime.datetime.utcfromtimestamp(float(item.added_at)).strftime("%Y-%m-%d") - size = int(item.file_size) if item.file_size else 0 - sizes.append(size) - print(u"\t{} added {}\tSize: {}\n\t\tFile: {}".format( - item.title, added_at, sizeof_fmt(size), item.file)) - total_size = sum(sizes) - print("Total size: {}".format(sizeof_fmt(total_size))) + action_show(size_lst, opts.select, opts.date) else: print("Size must end with one of these notations: {}".format(", ".join(UNTIS.keys()))) pass @@ -757,10 +749,4 @@ if __name__ == '__main__': transcode_lst += transcoded_lst if opts.action == "show": - print("{} item(s) have been found.".format(len(transcode_lst))) - for item in transcode_lst: - added_at = datetime.datetime.utcfromtimestamp(float(item.added_at)).strftime("%Y-%m-%d") - size = int(item.file_size) if item.file_size else 0 - file_size = sizeof_fmt(size) - print(u"\t{} added {}\tSize: {}\tTransocded: {} time(s)\n\t\tFile: {}".format( - item.title, added_at, file_size, item.transcode_count, item.file)) \ No newline at end of file + action_show(transcode_lst, opts.select, opts.date) \ No newline at end of file From 3421661e222ab97b3355c48b004298ae4c35e0fa Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 21 Dec 2020 13:27:59 -0500 Subject: [PATCH 09/13] adding try/except for addressing #273 --- utility/media_manager.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index 7f33a02..24a4ec1 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -33,6 +33,7 @@ import re from collections import Counter from plexapi.server import PlexServer from plexapi.server import CONFIG +from plexapi.exceptions import NotFound from requests import Session from requests.adapters import HTTPAdapter from requests.exceptions import RequestException @@ -301,12 +302,15 @@ def plex_deletion(items, libraries, toggleDeletion): print("The following items were added before {} and marked for deletion.".format(opts.date)) for item in items: - if isinstance(item, int): - plex_item = plex.fetchItem(item) - else: - plex_item = plex.fetchItem(int(item.rating_key)) - plex_item.delete() - print("Item: {} was deleted".format(plex_item.title)) + try: + if isinstance(item, int): + plex_item = plex.fetchItem(item) + else: + plex_item = plex.fetchItem(int(item.rating_key)) + plex_item.delete() + print("Item: {} was deleted".format(plex_item.title)) + except NotFound: + print("Item: {} may already have been deleted.".format(item)) for _library in libraries: section = plex.library.sectionByID(_library.key) print("Emptying Trash from library {}".format(_library.title)) From 592029cee393e47336d76eb56f152f6b191600a4 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 6 Jan 2021 13:17:21 -0500 Subject: [PATCH 10/13] additional exception for previously deleted items. --- utility/media_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index 24a4ec1..0e79bed 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -309,7 +309,7 @@ def plex_deletion(items, libraries, toggleDeletion): plex_item = plex.fetchItem(int(item.rating_key)) plex_item.delete() print("Item: {} was deleted".format(plex_item.title)) - except NotFound: + except (NotFound, AttributeError): print("Item: {} may already have been deleted.".format(item)) for _library in libraries: section = plex.library.sectionByID(_library.key) From 0aa5abd6c8ebdc01ea15ba34720f460cbf695e5f Mon Sep 17 00:00:00 2001 From: blacktwin Date: Wed, 6 Jan 2021 16:12:12 -0500 Subject: [PATCH 11/13] adding check for str and removing AttributeError --- utility/media_manager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index 0e79bed..21e81d8 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -305,11 +305,13 @@ def plex_deletion(items, libraries, toggleDeletion): try: if isinstance(item, int): plex_item = plex.fetchItem(item) + elif isinstance(item, str): + plex_item = plex.fetchItem(int(item)) else: plex_item = plex.fetchItem(int(item.rating_key)) plex_item.delete() print("Item: {} was deleted".format(plex_item.title)) - except (NotFound, AttributeError): + except NotFound: print("Item: {} may already have been deleted.".format(item)) for _library in libraries: section = plex.library.sectionByID(_library.key) From a238742b1b81d0e830f3856eefa45f9e348e9805 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Tue, 2 Feb 2021 01:25:51 -0500 Subject: [PATCH 12/13] addressing #279 --date can now accept YYYY-MM-DD or X days --- utility/media_manager.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index 21e81d8..574f143 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -534,6 +534,8 @@ def action_show(items, selector, date, users=None): print("The following items were last played before {}".format(date)) elif selector == 'watched': print("The following items were watched by {}".format(", ".join([user.name for user in users]))) + elif selector == 'unwatched': + print("The following items were added before {} and are unwatched".format(date)) else: print("The following items were added before {}".format(date)) @@ -630,12 +632,21 @@ if __name__ == '__main__': size_lst = [] user_lst = [] transcode_lst = [] + date_format = '' - if opts.date: - date = time.mktime(time.strptime(opts.date, "%Y-%m-%d")) - else: + # Check for days or date format + if opts.date and opts.date.isdigit(): + days = datetime.date.today() - datetime.timedelta(int(opts.date)) + date = time.mktime(days.timetuple()) + elif opts.date is None: date = None - + else: + date = time.mktime(time.strptime(opts.date, "%Y-%m-%d")) + + if date: + days = (datetime.datetime.utcnow() - datetime.datetime.fromtimestamp(date)) + date_format = time.strftime("%Y-%m-%d", time.localtime(date)) + date_format = '{} ({} days)'.format(date_format, days.days) # Create a Tautulli instance tautulli_server = Tautulli(Connection(url=TAUTULLI_URL.rstrip("/"), apikey=TAUTULLI_APIKEY, @@ -669,7 +680,7 @@ if __name__ == '__main__': unwatched_lst += unwatched_work(sectionID=_library.key, date=date) if opts.action == "show": - action_show(unwatched_lst, opts.select, opts.date) + action_show(unwatched_lst, opts.select, date_format) if opts.action == "delete": plex_deletion(unwatched_lst, libraries, opts.toggleDeletion) @@ -702,7 +713,7 @@ if __name__ == '__main__': watched_by_all = list(set(watched_by_all)) if opts.action == "show": - action_show(watched_by_all, opts.select, opts.date, user_lst) + action_show(watched_by_all, opts.select, date_format, user_lst) if opts.action == "delete": plex_deletion(watched_by_all, libraries, opts.toggleDeletion) @@ -714,7 +725,7 @@ if __name__ == '__main__': last_played_lst += last_played_work(sectionID=_library.key, date=date) if opts.action == "show": - action_show(last_played_lst, opts.select, opts.date) + action_show(last_played_lst, opts.select, date_format) if opts.action == "delete": plex_deletion(last_played_lst, libraries, opts.toggleDeletion) @@ -755,4 +766,4 @@ if __name__ == '__main__': transcode_lst += transcoded_lst if opts.action == "show": - action_show(transcode_lst, opts.select, opts.date) \ No newline at end of file + action_show(transcode_lst, opts.select, date_format) \ No newline at end of file From e55c7db5da7e188ff43a4cb51992229bb9492533 Mon Sep 17 00:00:00 2001 From: blacktwin Date: Mon, 22 Mar 2021 10:40:42 -0400 Subject: [PATCH 13/13] EOF --- utility/media_manager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utility/media_manager.py b/utility/media_manager.py index 574f143..22decb4 100644 --- a/utility/media_manager.py +++ b/utility/media_manager.py @@ -766,4 +766,5 @@ if __name__ == '__main__': transcode_lst += transcoded_lst if opts.action == "show": - action_show(transcode_lst, opts.select, date_format) \ No newline at end of file + action_show(transcode_lst, opts.select, date_format) +