#107 Random selector has been added
This commit is contained in:
parent
34f161de22
commit
769acfff01
@ -84,6 +84,7 @@ optional arguments:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
import random
|
||||||
import requests
|
import requests
|
||||||
import argparse
|
import argparse
|
||||||
import operator
|
import operator
|
||||||
@ -155,7 +156,7 @@ def selectors():
|
|||||||
'popularTv': 'Most Popular TV Shows ({days} days)',
|
'popularTv': 'Most Popular TV Shows ({days} days)',
|
||||||
'popularMovies': 'Most Popular Movies ({days} days)',
|
'popularMovies': 'Most Popular Movies ({days} days)',
|
||||||
'custom':'{custom} Playlist',
|
'custom':'{custom} Playlist',
|
||||||
'random': '{count} Random Playlist'
|
'random': '{count} Random {libraries} Playlist'
|
||||||
}
|
}
|
||||||
|
|
||||||
return selections
|
return selections
|
||||||
@ -259,7 +260,7 @@ def sort_by_dates(video, date_type):
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
def get_content(libraries, jbop, filters=None, search=None):
|
def get_content(libraries, jbop, filters=None, search=None, limit=None):
|
||||||
"""Get all movies or episodes from LIBRARY_NAME
|
"""Get all movies or episodes from LIBRARY_NAME
|
||||||
|
|
||||||
Parameters
|
Parameters
|
||||||
@ -301,6 +302,7 @@ def get_content(libraries, jbop, filters=None, search=None):
|
|||||||
child_lst += list(set(filter_lst) & set(search_lst))
|
child_lst += list(set(filter_lst) & set(search_lst))
|
||||||
|
|
||||||
elif library_type == 'show':
|
elif library_type == 'show':
|
||||||
|
# Decisions to stack filter and search
|
||||||
if keyword:
|
if keyword:
|
||||||
for show in plex_library.all():
|
for show in plex_library.all():
|
||||||
for episode in show.episodes(**keyword):
|
for episode in show.episodes(**keyword):
|
||||||
@ -317,33 +319,44 @@ def get_content(libraries, jbop, filters=None, search=None):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
play_lst = child_lst
|
play_lst = child_lst
|
||||||
|
|
||||||
else:
|
else:
|
||||||
for library in libraries.keys():
|
for library in libraries.keys():
|
||||||
for child in plex.library.sectionByID(library).all():
|
plex_library = plex.library.sectionByID(library)
|
||||||
if child.type == 'movie':
|
library_type = plex_library.type
|
||||||
if sort_by_dates(child, jbop):
|
if jbop == 'random' and library_type == 'movie':
|
||||||
item_date = sort_by_dates(child, jbop)
|
child_lst += [movie.ratingKey for movie in random.sample((plex_library.all()), limit)]
|
||||||
child_lst += item_date
|
elif jbop == 'random' and library_type == 'show':
|
||||||
elif child.type == 'show':
|
all_eps = [eps for show in plex_library.all() for eps in show.episodes()]
|
||||||
for episode in child.episodes():
|
child_lst += [show.ratingKey for show in random.sample((all_eps), limit)]
|
||||||
if sort_by_dates(episode, jbop):
|
else:
|
||||||
item_date = sort_by_dates(episode, jbop)
|
for child in plex_library.all():
|
||||||
|
if child.type == 'movie':
|
||||||
|
if sort_by_dates(child, jbop):
|
||||||
|
item_date = sort_by_dates(child, jbop)
|
||||||
child_lst += item_date
|
child_lst += item_date
|
||||||
else:
|
elif child.type == 'show':
|
||||||
pass
|
for episode in child.episodes():
|
||||||
|
if sort_by_dates(episode, jbop):
|
||||||
# Sort by original air date, oldest first
|
item_date = sort_by_dates(episode, jbop)
|
||||||
# todo-me move sorting and add more sorting options
|
child_lst += item_date
|
||||||
aired_lst = sorted(child_lst, key=operator.itemgetter(1))
|
else:
|
||||||
|
pass
|
||||||
# Remove date used for sorting
|
# check if sort_by_dates was used
|
||||||
play_lst = [x[0] for x in aired_lst]
|
if isinstance(child_lst[0], list):
|
||||||
|
# Sort by original air date, oldest first
|
||||||
|
# todo-me move sorting and add more sorting options
|
||||||
|
aired_lst = sorted(child_lst, key=operator.itemgetter(1))
|
||||||
|
|
||||||
|
# Remove date used for sorting
|
||||||
|
play_lst = [x[0] for x in aired_lst]
|
||||||
|
else:
|
||||||
|
play_lst = child_lst
|
||||||
|
|
||||||
return play_lst
|
return play_lst
|
||||||
|
|
||||||
|
|
||||||
def build_playlist(jbop, libraries=None, days=None, top=None, filters=None, search=None):
|
def build_playlist(jbop, libraries=None, days=None, top=None, filters=None, search=None, limit=None):
|
||||||
"""
|
"""
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
@ -403,6 +416,14 @@ def build_playlist(jbop, libraries=None, days=None, top=None, filters=None, sear
|
|||||||
filters_title = ' '.join(filters.values()).capitalize()
|
filters_title = ' '.join(filters.values()).capitalize()
|
||||||
title = filters_title + ' ' + search_title
|
title = filters_title + ' ' + search_title
|
||||||
title = selectors()['custom'].format(custom=title)
|
title = selectors()['custom'].format(custom=title)
|
||||||
|
|
||||||
|
elif jbop == 'random':
|
||||||
|
try:
|
||||||
|
keys_list = get_content(libraries, jbop, filters, search, limit)
|
||||||
|
except TypeError as e:
|
||||||
|
print("Libraries are not defined for {}. Use --libraries.".format(jbop))
|
||||||
|
exit("Error: {}".format(e))
|
||||||
|
title = selectors()['random'].format(count=limit, libraries='/'.join(libraries.values()))
|
||||||
|
|
||||||
elif jbop == 'popularTv':
|
elif jbop == 'popularTv':
|
||||||
home_stats = get_home_stats(days, top)
|
home_stats = get_home_stats(days, top)
|
||||||
@ -679,14 +700,17 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
if libraries:
|
if libraries:
|
||||||
keys_list, title = build_playlist(opts.jbop, libraries, opts.days, opts.top, filters, search)
|
keys_list, title = build_playlist(opts.jbop, libraries, opts.days, opts.top, filters, search, opts.limit)
|
||||||
else:
|
else:
|
||||||
print('This function requires libraries to be listed.')
|
print('This function requires libraries to be listed.')
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
# Check if limit exist and if it's greater than the pulled list of rating keys
|
# Check if limit exist and if it's greater than the pulled list of rating keys
|
||||||
if opts.limit and len(keys_list) > int(opts.limit):
|
if opts.limit and len(keys_list) > int(opts.limit):
|
||||||
keys_list = keys_list[:opts.limit]
|
if opts.jbop == 'random':
|
||||||
|
keys_list = random.sample((keys_list), opts.limit)
|
||||||
|
else:
|
||||||
|
keys_list = keys_list[:opts.limit]
|
||||||
|
|
||||||
# Setting custom name if provided
|
# Setting custom name if provided
|
||||||
if opts.name:
|
if opts.name:
|
||||||
|
Loading…
Reference in New Issue
Block a user