Browse Source

Fix search results sorting.

Add language flag to TVmaze search result items.
Change Add shows/Search results first aired dates to UI date format setting.
Change reinstate "expand results" and display more prominently.
Change improve the search progress text.
tags/release_0.25.1
JackDandy 4 years ago
parent
commit
546b0a37b9
  1. 5
      CHANGES.md
  2. 6
      gui/slick/interfaces/default/home_newShow.tmpl
  3. 149
      gui/slick/js/newShow.js
  4. 13
      lib/api_tvmaze/tvmaze_api.py
  5. 105
      sickbeard/webserve.py

5
CHANGES.md

@ -86,6 +86,8 @@
* Fix handling of card filters and sort states
* Add view paused "Only" to Daily Schedule
* Add return paused "Only" to API
* Change Add shows/Search results first aired dates to UI date format setting
* Change improve the search progress text
[develop changelog]
@ -107,6 +109,9 @@
* Change add language field to TVMaze search results
* Change set TVMaze network to webchannel if no network is found
* Change add TVMaze runtime, type, schedule, status, official site
* Fix search results sorting
* Add language flag to TVmaze search result items
* Change reinstate "expand results" and display more prominently
### 0.24.16 (2021-08-28 16:05:00 UTC)

6
gui/slick/interfaces/default/home_newShow.tmpl

@ -42,7 +42,7 @@
<h1 class="title">$title</h1>
#end if
<span class="preload-image" style="position:absolute;top:-999px" src="$sbRoot/images/loading32#echo ('', '-dark')['dark' == $sg_str('THEME_NAME', 'dark')]#.gif" width="32" height="32" border="0"></span>
<span class="bfr" style="position:absolute;top:-999px"><img src="$sbRoot/images/loading32#echo ('', '-dark')['dark' == $sg_str('THEME_NAME', 'dark')]#.gif">#for $cur_icon in $infosrc_icons#<img src="$sbRoot/images/$cur_icon">#end for#</span>
<div id="newShowPortal">
@ -117,9 +117,7 @@
<span class="pull-right grey-text" style="font-size:smaller"><b>*</b>SickGear is en, language is used for show/episode lists</span>
</p>
<div id="search-results" style="height: 100%"></div>
<div id="more-results" style="display:none"><a href="#">More results...</a></div>
<div id="search-results-buffer" style="display:none"></div>
<div id="search-results" class="collapsed" style="height: 100%"></div>
#end if
</div>

149
gui/slick/js/newShow.js

@ -67,11 +67,15 @@ $(document).ready(function () {
var elTvDatabase = $('#provided-tvid'),
elInfosrcLang = $('#infosrc-lang-select'),
tvsrcName = elTvDatabase.find('option:selected').text(),
tvSearchSrc = 0 < tvsrcName.length ? ' on <span class="boldest">' + elTvDatabase.find('option:selected').attr('data-name') + '</span>' : '';
$('#search-results').empty().html('<img id="searchingAnim" src="' + sbRoot + '/images/loading32' + themeSpinner + '.gif" height="32" width="32" />'
+ ' searching <span class="boldest">' + cleanseText(elNameToSearch.val(), !0) + '</span>'
+ tvSearchSrc + ' in ' + elInfosrcLang.val()
tvSearchSrc = 0 < tvsrcName.length
? ' <span class="boldest">' + elTvDatabase.find('option:selected').attr('data-name') + '</span>'
: '';
$('#search-results').empty().html('<img id="searchingAnim" src="' + sbRoot + '/images/loading32' + themeSpinner + '.gif" height="32" width="32">'
+ ' searching '
+ tvSearchSrc
+ ' in <em>lang:' + elInfosrcLang.val() + '</em> <span' + htmlFlag(elInfosrcLang.val()).replace('.png)"', '.png);display:inline-block;width:16px;height:11px;margin:-2px 3px 0 0;vertical-align:middle"') + '></span>'
+ ' for <span class="boldest">' + cleanseText(elNameToSearch.val(), !0) + '</span>'
+ '...');
searchRequestXhr = $.ajax({
@ -88,14 +92,15 @@ $(document).ready(function () {
},
success: function (data) {
var resultStr = '', attrs = '', checked = !1, rowType, row = 0, srcState = '',
resultItem, resultStrBuffer = '', nBufferSize = 9999, nBuffer = 0, nAll = 0;
resultItem, nBuffer = 0, nBufferSize = 20, nAll = 0;
if (null === data.results || 0 === data.results.length) {
resultStr += '<span class="boldest">Sorry, no results found. Try a different search.</span>';
} else {
var n = 0, result = {
SrcName: n, isInDB: ++n, SrcId: ++n, SrcDBId: ++n, SrcSlug: ++n, SrcUrl: ++n, ShowID: ++n,
Title: ++n, TitleHtml: ++n, Aired: ++n, Network: ++n, Genre: ++n, Overview: ++n, ImgUrl: ++n,
Title: ++n, TitleHtml: ++n, Aired: ++n, AiredStr: ++n, Network: ++n, Genre: ++n,
Language: ++n, LanguageCC: ++n, Overview: ++n, ImgUrl: ++n,
RelSort: ++n, RelCombined : ++n, NewestAired: ++n, NewestCombined: ++n,
OldestAired: ++n, OldestCombined: ++n, AzSort: ++n, AzCombined : ++n, ZaSort: ++n, ZaCombined: ++n,
DirectIdMatch: ++n, RenameSuggest: ++n
@ -114,7 +119,7 @@ $(document).ready(function () {
var today = new Date();
showstartdate = '&nbsp;<span class="stepone-result-date">('
+ (startDate > today ? 'will debut' : 'started')
+ ': ' + item[result.Aired] + ')</span>';
+ ': ' + item[result.AiredStr] + ')</span>';
}
srcState = [
@ -140,9 +145,12 @@ $(document).ready(function () {
+ '<a'
+ ' class="stepone-result-title"'
+ ' title="<div style=\'color: rgb(66, 139, 202)\'>' + cleanseText(item[result.TitleHtml], !0) + '</div>'
+ (0 < item[result.LanguageCC].length && 'gb' !== item[result.LanguageCC]
? '<div style=\'font-weight:bold;font-size:0.9em;color:#888\'><em>Language: <span' + htmlFlag(item[result.LanguageCC]).replace('.png)"', '.png);display:inline-block;width:16px;height:11px;margin:-2px 3px 0 0;vertical-align:middle"').replace(/"/g, "'") + '></span>'
+ item[result.Language] + '</em></div>' : '')
+ (0 < item[result.Genre].length ? '<div style=\'font-weight:bold\'>(<em>' + item[result.Genre] + '</em>)</div>' : '')
+ (0 < item[result.Network].length ? '<div style=\'font-weight:bold;font-size:0.9em;color:#888\'><em>' + item[result.Network] + '</em></div>' : '')
+ '<img style=\'max-height:150px;float:right;margin-left:3px\' src=\'/' + item[result.ImgUrl] + '\'>'
+ (item[result.ImgUrl] && '<img style=\'max-height:150px;float:right;margin-left:3px\' src=\'/' + item[result.ImgUrl] + '\'>' || '')
+ (0 < item[result.Overview].length ? '<p style=\'margin:0 0 2px\'>' + item[result.Overview] + '</p>' : '')
+ '<span style=\'float:right;clear:both\'>Click for more</span>'
+ '"'
@ -153,26 +161,23 @@ $(document).ready(function () {
+ ('' === srcState ? ''
: '&nbsp;<span class="stepone-result-db grey-text">' + '[' + srcState + ']' + '</span>')
+ '</div>' + "\n";
if (nBuffer < nBufferSize || item[result.isInDB]) {
resultStr += resultItem;
if (!1 === item[result.isInDB])
nBuffer++;
} else {
resultStrBuffer += resultItem;
}
resultStr += resultItem;
if(item[result.isInDB])
nBufferSize++;
if ((nBuffer < nBufferSize) || item[result.isInDB])
nBuffer++;
nAll++;
});
}
var selAttr = 'selected="selected" ',
selClass = 'selected-text',
classAttrSel = 'class="' + selClass + '" ',
useBuffer = nBufferSize < nAll,
defSortby = /^az/.test(config.resultsSortby) || /^za/.test(config.resultsSortby) || /^newest/.test(config.resultsSortby) || /^oldest/.test(config.resultsSortby) ? '': classAttrSel + selAttr;
$('#search-results').html(
$('#search-results').addClass('collapsed').html(
'<fieldset>' + "\n" + '<legend class="legendStep" style="margin-bottom: 15px">'
+ '<span id="count"></span>'
+ '<span style="float:right;height:32px;line-height:1">'
+ '<span style="float:right;height:32px;line-height:1"><span id="results-expander" style="margin-right:10px"></span>'
+ '<select id="results-sortby" class="form-control form-control-inline input-sm">'
+ '<optgroup label="Sort by">'
+ '<option ' + (/^az/.test(config.resultsSortby) ? classAttrSel + selAttr : '') + 'value="az">A to Z</option>'
@ -192,25 +197,32 @@ $(document).ready(function () {
+ '</div>'
+ '</fieldset>'
);
if (useBuffer) {
$('#search-results-buffer').html(resultStrBuffer);
$('#more-results').show();
$('#more-results a').on('click', function(e, d) {
e.preventDefault();
$('#more-results').hide();
$('#search-results #count').text(nAll + ' search result' + (1 === nAll ? '' : 's') + '...');
$('#search-results-buffer .results-item').appendTo('#holder');
container$.isotope( 'reloadItems' ).isotope(
{sortBy: $('#results-sortby').find('option:not([value$="top"],[value$="group"]).selected-text').val()});
myform.loadsection(0);
});
$('#search-results #count').text((nBuffer + ' / ' + nAll)
+ ' search result' + (1 === nBuffer ? '' : 's') + '...');
} else {
$('#search-results #count').text((0 < nBuffer ? nBuffer + (useBuffer ? ' / ' + nAll : '') : 'No')
+ ' search result' + (1 === nAll ? '' : 's') + '...');
function displayCount(){
$('#count').html((nAll > nBufferSize ? nBuffer + ' of ' + nAll : (0 < nAll ? nAll : 'No'))
+ ' result' + (1 === nAll ? '' : 's') + '...');
}
displayCount();
var defaultExpander = '<i class="sgicon-arrowdown" style="margin-right:-8px; font-size:12px"></i>expand list'
$('#results-expander').html((nAll > nBufferSize ? ' <span id="more-results" style="display:none;font-size: 0.7em">[<a href="#" style="text-decoration:none">' + defaultExpander + '</a>]</span>' : ''));
$('#more-results').show();
$('#more-results a').on('click', function(e, d) {
e.preventDefault();
var results$ = $('#search-results'), displayAction = '';
if (results$.hasClass('collapsed')){
displayAction = '<i class="sgicon-arrowup" style="margin-right:4px; font-size:12px"></i>collapse list';
results$.removeClass('collapsed');
$('#count').html('All ' + nAll + ' result' + (1 === nAll ? '' : 's'));
} else {
displayAction = defaultExpander;
results$.addClass('collapsed');
displayCount();
}
$('#more-results').find('a').html(displayAction);
container$.isotope('updateSortData');
updateResults();
myform.loadsection(0);
});
var container$ = $('#holder'),
sortbySelect$ = $('#results-sortby'),
@ -218,34 +230,53 @@ $(document).ready(function () {
return ($('#results-sortby').find('option[value$="notop"]').hasClass(selClass)
? (1000 > value ? value + 1000 : value)
: (1000 > value ? value : value - 1000))}),
fx = {filterData: function(){
var results$ = $('#search-results');
if (results$.hasClass('collapsed')){
var itemElem = this, number = getAttr(itemElem, 'sort-' + results$.find('option:not([value$="top"],[value$="group"]).' + selClass).val());
number -= number >= 1000 ? 1000 : 0;
return (number < nBufferSize ) || !!getAttr(itemElem, 'indb');
}
return !0;
}},
getAttr = (function(itemElem, attr){
var number = $(itemElem).attr('data-' + attr);
return ('undefined' !== typeof(number)) && parseInt(number, 10) || 0;
}),
getData = (function(itemElem, sortby){
var position = parseInt($(itemElem).attr('data-sort-' + sortby +
($('#results-sortby').find('option[value$="ingroup"]').hasClass(selClass) ? '' : '-combined')));
return (!$(itemElem).attr('data-indb')) ? position : reOrder(position);
var position = getAttr(itemElem, 'sort-' + sortby +
($('#results-sortby').find('option[value$="ingroup"]').hasClass(selClass) ? '' : '-combined'));
return (!!getAttr(itemElem, 'indb') ? reOrder(position) : position);
});
sortbySelect$.find('.' + selClass).each(function(){
$(this).html('> ' + $(this).html());
});
container$.isotope({
itemSelector: '.results-item',
sortBy: sortbySelect$.find('option:not([value$="top"],[value$="group"]).' + selClass).val(),
layoutMode: 'masonry',
getSortData: {
az: function(itemElem){ return getData(itemElem, 'az'); },
za: function(itemElem){ return getData(itemElem, 'za'); },
newest: function(itemElem){ return getData(itemElem, 'newest'); },
oldest: function(itemElem){ return getData(itemElem, 'oldest'); },
rel: function(itemElem){ return getData(itemElem, 'rel'); }
}
}).on('arrangeComplete', function(event, items){
$(items).each(function(i, item){
if (1 === i % 2){
$(item.element).addClass('alt');
function updateResults(){
$('.results-item').removeClass('alt');
container$.isotope({
itemSelector: '.results-item',
sortBy: sortbySelect$.find('option:not([value$="top"],[value$="group"]).' + selClass).val(),
layoutMode: 'masonry',
filter: fx['filterData'],
getSortData: {
az: function(itemElem){ return getData(itemElem, 'az'); },
za: function(itemElem){ return getData(itemElem, 'za'); },
newest: function(itemElem){ return getData(itemElem, 'newest'); },
oldest: function(itemElem){ return getData(itemElem, 'oldest'); },
rel: function(itemElem){ return getData(itemElem, 'rel'); }
}
}).on('arrangeComplete', function(event, items){
$(items).each(function(i, item){
if (1 === i % 2){
$(item.element).addClass('alt');
}
});
});
});
}
container$.isotope(); // must init first
updateResults();
sortbySelect$.on('change', function(){
var selectedSort = String($(this).val()), sortby = selectedSort, curSortby$, curSel$, newSel$;
@ -264,8 +295,8 @@ $(document).ready(function () {
$('.results-item[data-indb="1"]').each(function(){
$(this).attr(sortby, reOrder(parseInt($(this).attr(sortby), 10)));
});
$('.results-item').removeClass('alt');
container$.isotope('updateSortData').isotope({sortBy: sortby});
container$.isotope('updateSortData');
updateResults();
config.resultsSortby = sortby +
($(this).find('option[value$="notop"]').hasClass(selClass) ? ' notop' : '') +
@ -402,7 +433,7 @@ $(document).ready(function () {
}
updateAniGrouplist(showName);
var sample_text = '<p>Adding show <span class="show-name">' + cleanseText(showName, !0) + '</span>'
+ (!showName.length ? 'into<br />' : '<br />into' + (!config.folder.length ? '' : ' user location'))
+ (!showName.length ? 'into<br>' : '<br>into' + (!config.folder.length ? '' : ' user location'))
+ ' <span class="show-dest">';
// if we have a root dir selected, figure out the path

13
lib/api_tvmaze/tvmaze_api.py

@ -11,8 +11,10 @@ import logging
import re
import requests
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# noinspection PyProtectedMember
from tornado._locale_data import LOCALE_NAMES
from _23 import filter_iter
from six import integer_types, iteritems, string_types
@ -142,10 +144,17 @@ class TvMaze(TVInfoBase):
def _search_show(self, name=None, ids=None, **kwargs):
def _make_result_dict(s):
language = s.language.lower()
language_country_code = None
for cur_locale in iteritems(LOCALE_NAMES):
if language in cur_locale[1]['name_en'].lower():
language_country_code = cur_locale[0].split('_')[1].lower()
break
return {'seriesname': s.name, 'id': s.id, 'firstaired': s.premiered,
'network': (s.network and s.network.name) or (s.web_channel and s.web_channel.name),
'genres': isinstance(s.genres, list) and ', '.join(g.lower() for g in s.genres) or s.genres,
'overview': s.summary, 'language': s.language, 'runtime': s.average_runtime or s.runtime,
'overview': s.summary, 'language': s.language, 'language_country_code': language_country_code,
'runtime': s.average_runtime or s.runtime,
'type': s.type, 'schedule': s.schedule, 'status': s.status, 'official_site': s.official_site,
'aliases': [a.name for a in s.akas], 'image': s.image and s.image.get('original'),
'ids': TVInfoIDs(

105
sickbeard/webserve.py

@ -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, 21, 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 = []

Loading…
Cancel
Save