@ -3958,8 +3958,10 @@ class AddShows(Home):
else :
results [ cur_tvid ] [ tv_src_id ] = cur_result . copy ( )
results [ cur_tvid ] [ tv_src_id ] [ ' direct_id ' ] = \
( cur_tvid in ids_to_search and tv_src_id == ids_to_search . get ( cur_tvid ) ) or \
( TVINFO_TVDB == cur_tvid and ids_to_search . get ( TVINFO_TVDB_SLUG ) == cur_result . get ( ' slug ' ) )
( cur_tvid in ids_to_search and ids_to_search . get ( cur_tvid )
and tv_src_id == ids_to_search . get ( cur_tvid ) ) or \
( TVINFO_TVDB == cur_tvid and cur_result . get ( ' slug ' ) and
ids_to_search . get ( TVINFO_TVDB_SLUG ) == cur_result . get ( ' slug ' ) ) or False
if results [ cur_tvid ] [ tv_src_id ] [ ' direct_id ' ] or \
any ( ids_to_search [ si ] == cur_result . get ( ' ids ' , { } ) [ si ] for si in ids_to_search ) :
ids_search_used . update ( { k : v for k , v in iteritems ( cur_result . get ( ' ids ' , { } ) )
@ -4003,14 +4005,18 @@ class AddShows(Home):
+ ( ' ' , ' &lid= %s ' % sickbeard . TVInfoAPI ( ) . config [ ' langabbv_to_id ' ] [ lang ] ) [ TVINFO_TVDB == tvid ] ,
int ( show [ ' id ' ] ) ,
show [ ' seriesname ' ] , helpers . xhtml_escape ( show [ ' seriesname ' ] ) , show [ ' firstaired ' ] ,
show . get ( ' network ' , ' ' ) or ' ' , show . get ( ' genres ' , ' ' ) or ' ' ,
( isinstance ( show [ ' firstaired ' ] , string_types )
and SGDatetime . sbfdate ( dateutil . parser . parse ( show [ ' firstaired ' ] ) ) or ' ' ) ,
show . get ( ' network ' , ' ' ) or ' ' , show . get ( ' genres ' , ' ' ) or ' ' , # 11 - 12
show . get ( ' language ' , ' ' ) , show . get ( ' language_country_code ' ) or ' ' , # 13 - 14
re . sub ( r ' ([,.!][^,.!]*?)$ ' , ' ... ' ,
re . sub ( r ' ([.!?])(?= \ w) ' , r ' \ 1 ' ,
helpers . xhtml_escape ( ( show . get ( ' overview ' , ' ' ) or ' ' ) [ : 250 : ] . strip ( ) ) ) ) ,
self . _make_search_image_url ( tvid , show ) , # 13
( show [ ' direct_id ' ] and 100 )
or self . get_uw_ratio ( term , show [ ' seriesname ' ] , show . get ( ' aliases ' , [ ] ) ) ,
None , None , None , None , None , None , None , None , None , # 15 - 23
helpers . xhtml_escape ( ( show . get ( ' overview ' , ' ' ) or ' ' ) [ : 250 : ] . strip ( ) ) ) ) , # 15
self . _make_search_image_url ( tvid , show ) , # 16
100 - ( ( show [ ' direct_id ' ] and 100 )
or self . get_uw_ratio ( term , show [ ' seriesname ' ] , show . get ( ' aliases ' ) or [ ] ,
show . get ( ' language_country_code ' ) or ' ' ) ) ,
None , None , None , None , None , None , None , None , None , # 18 - 26
show [ ' direct_id ' ] , show . get ( ' rename_suggest ' )
] for show in itervalues ( shows ) ] for tvid , shows in iteritems ( results ) ] )
@ -4021,67 +4027,48 @@ class AddShows(Home):
return data if not final_sort else sorted ( data , reverse = False , key = lambda _x : _x [ sortby_index ] )
def sort_newest ( data_result , is_last_sort , combine ) :
return sort_date ( data_result , is_last_sort , 16 , as_combined = combine )
return sort_date ( data_result , is_last_sort , 19 , as_combined = combine )
def sort_oldest ( data_result , is_last_sort , combine ) :
return sort_date ( data_result , is_last_sort , 18 , False , combine )
return sort_date ( data_result , is_last_sort , 2 1, False , combine )
def sort_date ( data_result , is_last_sort , idx_sort , reverse = True , as_combined = False ) :
idx_aired = 9
combined = final_order (
idx_sort + 1 ,
sorted ( data_result , reverse = reverse , key = lambda x : ( dateutil . parser . parse (
date_sorted = sorted ( data_result , reverse = reverse , key = lambda x : ( dateutil . parser . parse (
re . match ( r ' ^(?:19|20) \ d \ d$ ' , str ( x [ idx_aired ] ) ) and ( ' %s -12-31 ' % str ( x [ idx_aired ] ) )
or ( x [ idx_aired ] and str ( x [ idx_aired ] ) ) or ' 1900 ' ) ) ) , is_last_sort )
or ( x [ idx_aired ] and str ( x [ idx_aired ] ) ) or ' 1900 ' ) ) )
combined = final_order ( idx_sort + 1 , date_sorted , is_last_sort )
idx_src = 2
grouped = final_order (
idx_sort ,
sorted (
sorted ( combined , reverse = reverse , key = lambda x : ( dateutil . parser . parse (
re . match ( r ' ^(?:19|20) \ d \ d$ ' , str ( x [ idx_aired ] ) ) and ( ' %s -12-31 ' % str ( x [ idx_aired ] ) )
or ( x [ idx_aired ] and str ( x [ idx_aired ] ) ) or ' 1900 ' ) ) ) ,
reverse = False , key = lambda x : x [ idx_src ] ) , is_last_sort )
grouped = final_order ( idx_sort , sorted ( date_sorted , key = lambda x : x [ idx_src ] ) , is_last_sort )
return ( grouped , combined ) [ as_combined ]
def sort_az ( data_result , is_last_sort , combine ) :
return sort_zaaz ( data_result , is_last_sort , 20 , as_combined = combine )
return sort_zaaz ( data_result , is_last_sort , 23 , as_combined = combine )
def sort_za ( data_result , is_last_sort , combine ) :
return sort_zaaz ( data_result , is_last_sort , 22 , True , combine )
return sort_zaaz ( data_result , is_last_sort , 25 , True , combine )
def sort_zaaz ( data_result , is_last_sort , idx_sort , reverse = False , as_combined = False ) :
idx_title = 7
combined = final_order (
idx_sort + 1 ,
sorted (
data_result , reverse = reverse , key = lambda x : (
( remove_article ( x [ idx_title ] . lower ( ) ) , x [ idx_title ] . lower ( ) ) [ sickbeard . SORT_ARTICLE ] ) ) ,
is_last_sort )
zaaz_sorted = sorted ( data_result , reverse = reverse , key = lambda x : (
( remove_article ( x [ idx_title ] . lower ( ) ) , x [ idx_title ] . lower ( ) ) [ sickbeard . SORT_ARTICLE ] ) )
combined = final_order ( idx_sort + 1 , zaaz_sorted , is_last_sort )
idx_src = 2
grouped = final_order (
idx_sort ,
sorted (
combined , reverse = reverse , key = lambda x : (
x [ idx_src ] ,
( remove_article ( x [ idx_title ] . lower ( ) ) , x [ idx_title ] . lower ( ) ) [ sickbeard . SORT_ARTICLE ] ) ) ,
is_last_sort )
grouped = final_order ( idx_sort , sorted ( zaaz_sorted , key = lambda x : x [ idx_src ] ) , is_last_sort )
return ( grouped , combined ) [ as_combined ]
def sort_rel ( data_result , is_last_sort , as_combined ) :
idx_rel_sort , idx_rel = 14 , 14
idx_rel_sort , idx_rel = 17 , 17
idx_title = 7
combined = final_order (
idx_rel_sort + 1 ,
sorted ( data_result , reverse = True , key = lambda x : ( x [ idx_rel ] , x [ idx_title ] ) ) , is_last_sort )
idx_src = 2
grouped = final_order ( # grouped
idx_rel_sort ,
sorted ( combined , reverse = True , key = lambda x : ( x [ idx_src ] , x [ idx_rel ] , x [ idx_title ] ) ) , is_last_sort )
rel_sorted = sorted ( data_result , key = lambda x : ( x [ idx_rel ] , x [ idx_title ] , x [ idx_src ] ) )
combined = final_order ( idx_rel_sort + 1 , rel_sorted , is_last_sort )
grouped = final_order ( idx_rel_sort , sorted ( rel_sorted , key = lambda x : ( x [ idx_src ] ) ) , is_last_sort )
return ( grouped , combined ) [ as_combined ]
@ -4117,16 +4104,31 @@ class AddShows(Home):
return img_url
@classmethod
def get_uw_ratio ( cls , search_term , showname , aliases ) :
def get_uw_ratio ( cls , search_term , showname , aliases , lang = None ) :
search_term = decode_str ( search_term , errors = ' replace ' )
showname = decode_str ( showname , errors = ' replace ' )
s = fuzz . UWRatio ( search_term , showname )
# check aliases and give them a little lower score
for a in aliases :
ns = fuzz . UWRatio ( search_term , a ) - 1
if ns > s :
lower_alias = 0
for cur_alias in aliases or [ ] :
ns = fuzz . UWRatio ( search_term , cur_alias )
if ( ns - 1 ) > s :
s = ns
return s
lower_alias = 1
# if lang param is supplied, add scale in order to reorder elements 1) en:lang 2) other:lang 3) alias
# this spacer behaviour may improve the original logic, but currently isn't due to lang used as off switch
# scale = 3 will enable spacing for all use cases
scale = ( 1 , 3 ) [ None is not lang ]
score_scale = ( s * scale )
if score_scale :
score_scale - = lower_alias
# if lang param is supplied, and does not specify English, then lower final score
score_scale - = ( 1 , 0 ) [ None is lang or lang in ( ' gb ' , ) or not score_scale ]
return score_scale
def mass_add_table ( self , root_dir = None , hash_dir = None , * * kwargs ) :
@ -4277,14 +4279,15 @@ class AddShows(Home):
t . provided_show_dir = show_dir
t . other_shows = other_shows
t . infosrc = sickbeard . TVInfoAPI ( ) . search_sources
search_tvid = None
if use_show_name and 1 == show_name . count ( ' : ' ) : # if colon is found once
search_tvid = filter_list ( lambda x : bool ( x ) ,
[ ( ' %s : ' % sickbeard . TVInfoAPI ( _tvid ) . config [ ' slug ' ] ) in show_name and _tvid
for _tvid , _ in iteritems ( sickbeard . TVInfoAPI ( ) . search_sources ) ] )
for _tvid , _ in iteritems ( t . infosrc ) ] )
search_tvid = 1 == len ( search_tvid ) and search_tvid [ 0 ]
t . provided_tvid = search_tvid or int ( tvid or sickbeard . TVINFO_DEFAULT )
t . infosrc = sickbeard . TVInfoAPI ( ) . search_sources
t . infosrc_icons = [ sickbeard . TVInfoAPI ( cur_tvid ) . config . get ( ' icon ' ) for cur_tvid in t . infosrc ]
t . meta_lang = sickbeard . ADD_SHOWS_METALANG
t . allowlist = [ ]
t . blocklist = [ ]