From b80e6295ff11037a91f3f04485e94e3427503631 Mon Sep 17 00:00:00 2001 From: Alhaziel01 Date: Thu, 16 Sep 2021 20:03:51 +0200 Subject: [PATCH] Fix e Migliorie a: - Ricerca Globale - InfoPlus --- channels/cinemalibero.py | 5 +- core/support.py | 83 +-- core/tmdb.py | 19 +- platformcode/infoplus.py | 13 +- resources/skins/Default/720p/GlobalSearch.xml | 529 +++++++----------- resources/skins/Default/720p/InfoPlus.xml | 58 +- resources/skins/Default/720p/Servers.xml | 16 +- resources/skins/Default/media/next.png | Bin 0 -> 2283 bytes resources/skins/Default/media/previous.png | Bin 0 -> 2294 bytes specials/globalsearch.py | 382 ++++++------- 10 files changed, 498 insertions(+), 607 deletions(-) create mode 100644 resources/skins/Default/media/next.png create mode 100644 resources/skins/Default/media/previous.png diff --git a/channels/cinemalibero.py b/channels/cinemalibero.py index 520c654c..3cabff10 100644 --- a/channels/cinemalibero.py +++ b/channels/cinemalibero.py @@ -77,8 +77,8 @@ def peliculas(item): item.title += support.typo(item.lang2, '_ [] color kod') if item.args == 'update': item.title = item.title.replace('-', ' ') - # if item.args == 'search': - # item.contentType = 'tvshow' if 'serie-' in item.url else 'movie' + if item.args == 'search': + item.contentType = 'undefined' return item @@ -123,6 +123,7 @@ def genres(item): def search(item, texto): logger.debug(item.url,texto) + item.contentType = 'undefined' texto = texto.replace(' ', '+') item.url = host + "/?s=" + texto # item.contentType = 'tv' diff --git a/core/support.py b/core/support.py index 40abaf5d..cb160bc5 100755 --- a/core/support.py +++ b/core/support.py @@ -155,14 +155,16 @@ class scrape: return self.itemlist def _scrape(self, item): - if item.itemlist: scrapingTime = time() self.itemlist = itemlistdb() self.seasons = item.allSeasons + else: for n in range(2): logger.debug('PATRON= ', self.patron) + if self.data and item.data: + item.data = '' if not self.data: page = httptools.downloadpage(item.url, headers=self.headers, ignore_response_code=True) item.url = page.url # might be a redirect @@ -230,7 +232,7 @@ class scrape: if self.numerationEnabled and inspect.stack()[1][3] not in ['find_episodes']: from platformcode import autorenumber if self.function == 'episodios': - autorenumber.start(self.itemlist, self.item) + autorenumber.start(self.itemlist, item) for i in self.itemlist: if i.contentSeason and i.contentSeason not in self.seasons: @@ -336,7 +338,7 @@ class scrape: if self.function == 'episodios': infolabels = item.infoLabels else: - infolabels = {} + infolabels = {'mediatype':item.contentType} if self.itemParams.year: infolabels['year'] = self.itemParams.year if self.itemParams.plot: @@ -447,17 +449,17 @@ class scrape: if (not self.itemParams.title or self.itemParams.title not in self.blacklist) and (self.search.lower() in self.itemParams.title.lower()): it = item.clone(title=self.itemParams.title, - fulltitle=self.itemParams.title, - show=self.itemParams.title, - infoLabels=self.itemParams.infoLabels, - contentSeason= self.itemParams.infoLabels.get('season', ''), - contentEpisodeNumber= self.itemParams.infoLabels.get('episode', ''), - grouped = self.group, - episode2 = self.itemParams.second_episode, - extraInfo = self.itemParams.extraInfo, - disable_videolibrary = not self.args.get('addVideolibrary', True), - size = self.itemParams.size, - seed = self.itemParams.seed) + fulltitle=self.itemParams.title, + show=self.itemParams.title, + infoLabels=self.itemParams.infoLabels, + contentSeason= self.itemParams.infoLabels.get('season', ''), + contentEpisodeNumber= self.itemParams.infoLabels.get('episode', ''), + grouped = self.group, + episode2 = self.itemParams.second_episode, + extraInfo = self.itemParams.extraInfo, + disable_videolibrary = not self.args.get('addVideolibrary', True), + size = self.itemParams.size, + seed = self.itemParams.seed) if self.itemParams.url: it.url = self.itemParams.url if self.function == 'episodios': it.fulltitle = it.show = self.itemParams.title @@ -899,22 +901,24 @@ def nextPage(itemlist, item, function_or_level=1, **kwargs): def pagination(itemlist, item, function_level=1): if 'channel_search' in [s[3] for s in inspect.stack()]: return itemlist - itemlistdb(itemlist) - page = item.page if item.page else 1 + + if not item.page: + item.page = 1 perpage = config.get_setting('pagination', default=20) action = function_level if type(function_level) == str else inspect.stack()[function_level][3] itlist = [] for i, it in enumerate(itemlist): - if perpage and (page - 1) * perpage > i: continue # pagination - if perpage and i >= page * perpage: break # pagination + if perpage and (item.page - 1) * perpage > i: continue # pagination + if perpage and i >= item.page * perpage: break # pagination itlist.append(it) - if len(itemlist) >= page * perpage: + if len(itemlist) >= item.page * perpage: + itemlistdb(itemlist) itlist.append( item.clone(channel=item.channel, action=action, contentType=item.contentType, title=typo(config.get_localized_string(30992), 'color kod bold'), - page=page + 1, + page=item.page + 1, total_pages=round(len(itemlist)/perpage), nextPage = True, itemlist = True, @@ -926,7 +930,7 @@ def pagination(itemlist, item, function_level=1): def season_pagination(itemlist, item, seasons, function_level=1): if 'channel_search' in [s[3] for s in inspect.stack()]: return itemlist - itemlistdb(itemlist) + action = function_level if type(function_level) == str else inspect.stack()[function_level][3] itlist = [] if itemlist and not seasons: @@ -936,8 +940,10 @@ def season_pagination(itemlist, item, seasons, function_level=1): seasons.append(it.contentSeason) if seasons: + itemlistdb(itemlist) seasons.sort() - if not item.nextSeason: item.nextSeason = 0 + if not item.nextSeason: + item.nextSeason = 0 try: current = seasons[item.nextSeason] @@ -949,22 +955,24 @@ def season_pagination(itemlist, item, seasons, function_level=1): if item.nextSeason + 1 < len(seasons): itlist.append( - item.clone(action=action, - title=typo('Stagione Successiva [{}]'.format(seasons[item.nextSeason + 1]), 'bold'), - allSeasons = seasons, - nextSeason = item.nextSeason + 1, - itemlist = True, - prevthumb = item.thumbnail, - thumbnail=thumb())) + Item(channel=item.channel, + action=action, + title=typo('Stagione Successiva [{}]'.format(seasons[item.nextSeason + 1]), 'bold'), + allSeasons = seasons, + nextSeason = item.nextSeason + 1, + itemlist = True, + prevthumb = item.thumbnail, + thumbnail=thumb())) itlist.append( - item.clone(action='gotoseason', - real_action=action, - title=typo('Vai alla stagione…', 'bold'), - allSeasons = seasons, - nextSeason = item.nextSeason + 1, - itemlist = True, - prevthumb = item.thumbnail, - thumbnail=thumb())) + Item(channel=item.channel, + action='gotoseason', + real_action=action, + title=typo('Vai alla stagione…', 'bold'), + allSeasons = seasons, + nextSeason = item.nextSeason + 1, + itemlist = True, + prevthumb = item.thumbnail, + thumbnail=thumb())) return itlist except: return itemlist @@ -1015,6 +1023,7 @@ def server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=Tru videoitem.channel = item.channel videoitem.fulltitle = item.fulltitle videoitem.show = item.show + videoitem.ch_name = channeltools.get_channel_parameters(item.channel)['title'] if not videoitem.video_urls: videoitem.thumbnail = item.thumbnail videoitem.contentType = item.contentType videoitem.infoLabels = item.infoLabels diff --git a/core/tmdb.py b/core/tmdb.py index 7beac2c5..344580f7 100644 --- a/core/tmdb.py +++ b/core/tmdb.py @@ -214,7 +214,7 @@ def set_infoLabels_itemlist(itemlist, seekTmdb=False, search_language=def_lang, logger.error(traceback.format_exc(1)) return (_i, _item, ret) - + # from core.support import dbg;dbg() # for i, item in enumerate(itemlist): # r_list.append(sub_thread(item, i, seekTmdb)) with futures.ThreadPoolExecutor() as executor: @@ -248,11 +248,11 @@ def set_infoLabels_item(item, seekTmdb=True, search_language=def_lang): def read_data(otmdb_aux): # item.infoLabels = otmdb_aux.get_infoLabels(item.infoLabels) infoLabels = otmdb_aux.get_infoLabels(item.infoLabels) - if not infoLabels['plot']: infoLabels['plot'] = otmdb_aux.get_plot('en') + if not infoLabels.get('plot'): infoLabels['plot'] = otmdb_aux.get_plot('en') item.infoLabels = infoLabels if item.infoLabels.get('thumbnail'): item.thumbnail = item.infoLabels['thumbnail'] - if item.infoLabels['fanart']: + if item.infoLabels.get('fanart'): item.fanart = item.infoLabels['fanart'] if seekTmdb: @@ -290,6 +290,7 @@ def set_infoLabels_item(item, seekTmdb=True, search_language=def_lang): if episode: # Update data read_data(otmdb_global) + item.infoLabels['mediatype'] = 'episode' if episode.get('episode_title'): item.infoLabels['title'] = episode['episode_title'] if episode.get('episode_plot'): @@ -409,11 +410,11 @@ def set_infoLabels_item(item, seekTmdb=True, search_language=def_lang): # If the search has been successful and you are not looking for a list of items, # carry out another search to expand the information if search_type == 'multi': - search_type = 'movie' if otmdb.result.get('media_type') else 'tv' + search_type = otmdb.result.get('media_type') + otmdb = Tmdb(id_Tmdb=otmdb.result.get("id"), search_type=search_type, search_language=search_language) - if otmdb is not None and otmdb.get_id(): # The search has found a valid result read_data(otmdb) @@ -427,6 +428,7 @@ def set_infoLabels_item(item, seekTmdb=True, search_language=def_lang): item.fulltitle = new_title return True # We check what type of content it is... + # from core.support import dbg;dbg() if item.contentType == 'movie': search_type = 'movie' elif item.contentType == 'undefined': # don't know @@ -977,6 +979,7 @@ class Tmdb(object): self.total_results = 1 self.total_pages = 1 self.result = ResultDictDefault(result) + self.result['media_type'] = self.search_type.replace('tv', 'tvshow') else: # No search results @@ -984,7 +987,6 @@ class Tmdb(object): logger.debug(msg) def __search(self, index_results=0, page=1): - # from core.support import dbg;dbg() self.result = ResultDictDefault() results = [] text_simple = self.search_text.lower() @@ -1044,6 +1046,8 @@ class Tmdb(object): self.total_results = total_results self.total_pages = total_pages self.result = ResultDictDefault(self.results[index_results]) + # self.result['mediatype'] = self.result['media_type'] + if not config.get_setting('tmdb_plus_info'): self.result = self.get_mpaa(self.result) return len(self.results) @@ -1649,7 +1653,8 @@ class Tmdb(object): continue if k == 'media_type': - ret_infoLabels['mediatype'] = 'tvshow' if v == 'tv' else 'movie' + # from core.support import dbg;dbg() + ret_infoLabels['mediatype'] = v if v in ['tv', 'tvshow'] else 'movie' elif k == 'overview': if origen: diff --git a/platformcode/infoplus.py b/platformcode/infoplus.py index b964199f..0fd5eda8 100644 --- a/platformcode/infoplus.py +++ b/platformcode/infoplus.py @@ -65,6 +65,7 @@ class InfoPlus(xbmcgui.WindowXML): platformtools.dialog_busy(True) if self.item: # Find Video Info + tmdb.set_infoLabels_item(self.item) self.info = self.item.infoLabels title = typo(self.info.get('title'), 'bold') @@ -83,9 +84,17 @@ class InfoPlus(xbmcgui.WindowXML): rating = self.info.get('rating', 'N/A') color = 'FFFFFFFF' if rating == 'N/A' else 'FFDB2360' if rating < 4 else 'FFD2D531' if rating < 7 else 'FF21D07A' self.listitem.setProperty('color',color) + + info = '' + if self.info.get('year'): info = str(self.info.get('year')) + if self.info.get('duration'): info = '{}[B]•[/B]{}'.format(info, self.info.get('duration')) + if self.info.get('Mpaa'): info = '{}[B]•[/B]{}'.format(info, self.info.get('Mpaa')) + self.listitem.setProperty('info',info) # Set infoLabels platformtools.set_infolabels(self.listitem, self.item) + + # Add Cast Info for cast in self.info.get('castandrole',[]): @@ -365,9 +374,9 @@ class CastWindow(xbmcgui.WindowXML): def showImages(images, position): xbmc.executebuiltin('Dialog.Close(all)') - ImagesWindow('imageWindow.xml', config.get_runtime_path(), images=images, position=position) + return ImagesWindow('imageWindow.xml', config.get_runtime_path()).start(images=images, position=position) class ImagesWindow(xbmcgui.WindowXMLDialog): - def __init__(self, *args, **kwargs): + def start(self, *args, **kwargs): self.images = [] self.position = kwargs.get('position') for i, image in enumerate(kwargs.get('images', [])): diff --git a/resources/skins/Default/720p/GlobalSearch.xml b/resources/skins/Default/720p/GlobalSearch.xml index 766277b7..d7309149 100644 --- a/resources/skins/Default/720p/GlobalSearch.xml +++ b/resources/skins/Default/720p/GlobalSearch.xml @@ -11,7 +11,6 @@ - Window Background @@ -37,32 +36,39 @@ 100% scale $INFO[Container(102).ListItem.Art(fanart)] - !String.IsEmpty(Container(102).ListItem.Art(fanart)) + !Control.IsVisible(2) + !String.IsEmpty(Container(102).ListItem.Art(fanart)) + + + Episode Fanart + 100% + 100% + scale + $INFO[Container(103).ListItem.Art(thumb)] + Control.IsVisible(2) + !String.IsEmpty(Container(103).ListItem.Art(thumb)) + + + + Title + 480 + 270 + 1000 + 30 + font13 + FFFFFFFF + 00000000 + + left + center + Conditional - Search Group Control.IsVisible(1) - - Title - 30 - 30 - 1000 - 30 - font13 - FFFFFFFF - 00000000 - Integer.IsGreater(Container(101).NumItems, 0) - left - center - - - + Search Result Group Integer.IsGreater(Container(102).NumItems, 0) - Visible 400 90 @@ -120,21 +126,6 @@ - - String.IsEmpty(Container(102).ListItem.Property(rating)) - Item Title - 0 - 0 - 840 - 60 - font13 - FFFFFFFF - 00000000 - - left - center - - Item Count 640 @@ -176,10 +167,10 @@ 10 horizontal left - + Year 30 - 45 + auto font13 ffFFFFFF 00000000 @@ -187,7 +178,7 @@ left center - + Separator 30 10 @@ -199,10 +190,10 @@ center center - + Duration 30 - 50 + auto font13 ffFFFFFF 00000000 @@ -210,7 +201,7 @@ left center - + Separator 30 10 @@ -222,10 +213,10 @@ center center - + Mpaa 30 - 60 + auto font13 ffFFFFFF 00000000 @@ -237,14 +228,14 @@ Genre - !String.isEmpty(Container(102).ListItem.Genre + !String.isEmpty(Container(102).ListItem.Genre) 0 30 600 font13 ffFFFFFF 00000000 - + right center @@ -266,11 +257,14 @@ - Conditional - Conditional - WindowClose - WindowClose - + + + + + + + + Search Results list 70 0 @@ -318,41 +312,59 @@ - - - Item Poster - 0 - 0 - 380 - 570 - $INFO[ListItem.Art(poster)] - 10 - scale - - - Item Poster - 0 - 0 - 150 - 150 - $INFO[ListItem.Property(channelthumb)] - 10 - scale - - - Item Poster - 0 - 0 - 150 - 150 - sub.png - !String.IsEmpty(ListItem.Property(sub)) - 10 - scale - - + + + Poster + 70 + 570 + 380 + Integer.IsGreater(Container(102).NumItems, 0) + + + + + + + + + + + + + + Item Poster + 0 + 0 + 380 + 570 + $INFO[Container(102).ListItem.Art(poster)] + 10 + scale + + + Item Poster + 0 + 0 + 150 + 150 + $INFO[Container(102).ListItem.Property(channelthumb)] + 10 + scale + + + Item Poster + 0 + 0 + 150 + 150 + sub.png + !String.IsEmpty(Container(102).ListItem.Property(sub)) + 10 + scale + + 100% @@ -379,7 +391,7 @@ Conditional Integer.IsGreater(Container(101).NumItems, 0) - + Chennels Bar Tab 0 575 @@ -493,37 +505,19 @@ Episodes Group Control.IsVisible(2) - - - Poster - Control.IsVisible(2) - - - - - - - - - 0 - 0 - 480 - 720 - $INFO[Container(102).ListItem.Art(poster)] - + 520 + + + + + + + + Main Title - Control.IsVisible(2) - - - - - - - - - 520 + 0 40 1150 30 @@ -535,30 +529,20 @@ - + Episodes List - Control.IsVisible(2) - - - - - - - - 110 - 520 - 700 + 50 + 640 570 - 503 - 503 + 503 300 Episode Title 0 20 - 660 + 600 60 font13 FFFFFFFF @@ -568,189 +552,111 @@ - - - Selected Background - 0 - 0 - 700 - 60 - white.png - scale + + + String.IsEmpty(ListItem.Art(thumb)) + 100% + 90 + + Selected Background + 0 + 0 + 100% + 100% + white.png + scale + + + Episode Title + 0 + 20 + 600 + 100% + font13 + FF232323 + 00000000 + left + center + + - - Episode Title - 0 - 20 - 660 - 60 - font13 - FFFFFFFF - 00000000 - left - center - + + !String.IsEmpty(ListItem.Art(thumb)) + 100% + 90 + + Selected Background + 0 + 0 + 100% + 100% + white.png + scale + + + Selected Background + 0 + 0 + 160 + 90 + $INFO[ListItem.Art(thumb)] + scale + + + Episode Title + 0 + 180 + 480 + 100% + font13 + FF232323 + 00000000 + left + center + + + + + Next Season/Page + 380 + 20 + 30 + 30 + next.png + next.png + + + Previous Season/Page + 380 + 0 + 30 + 30 + previous.png + previous.png + - - Servers Group - Control.IsVisible(3) - - Control.IsVisible(3) - - - - - - - - - Poster - 0 - 0 - 480 - 720 - $INFO[Container(102).ListItem.Art(poster)] - - - - Control.IsVisible(3) - - - - - - - - - Control.IsVisible(3) - Main Title - 520 - 40 - 1150 - 30 - font13 - FFFFFFFF - 00000000 - left - center - - - - - Control.IsVisible(3) - - - - - - - - - Servers List - 40 - 520 - 700 - 570 - 503 - 503 - 300 - - - Servers Icon - 5 - 5 - 120 - 120 - $INFO[ListItem.Art(poster)] - scale - - - Server Title - 150 - 30 - 450 - 30 - font13 - FFFFFFFF - 00000000 - left - center - - - - Channel - 150 - 60 - 450 - 30 - font13 - FFFFFFFF - 00000000 - left - center - - - - - - Selection Background - 700 - 130 - white.png - scale - - - Servers Color - 0 - 0 - 130 - 130 - white.png - scale - - - Servers Icon - 5 - 5 - 120 - 120 - $INFO[ListItem.Art(poster)] - scale - - - Server Title - 150 - 30 - 450 - 30 - font13 - FFFFFFFF - 00000000 - left - center - - - - Channel - 150 - 60 - 450 - 30 - font13 - FFFFFFFF - 00000000 - left - center - - - - - + + Poster + Control.IsVisible(2) + + + + + + + + + 0 + 0 + 480 + 720 + $INFO[Container(102).ListItem.Art(poster)] + @@ -780,7 +686,7 @@ right center Conditional - Control.IsVisible(500) + @@ -795,7 +701,7 @@ center center - Control.IsVisible(4) + Control.IsVisible(3) @@ -841,20 +747,5 @@ close.png - - - Quality Tag - 670 - 20 - 200 - 40 - font13 - FFFFFFFF - 00000000 - right - center - Control.IsVisible(3) - - diff --git a/resources/skins/Default/720p/InfoPlus.xml b/resources/skins/Default/720p/InfoPlus.xml index 7001417e..4a822471 100644 --- a/resources/skins/Default/720p/InfoPlus.xml +++ b/resources/skins/Default/720p/InfoPlus.xml @@ -113,18 +113,18 @@ Video Info Integer.IsGreater(Container(100).NumItems, 0) 0 - 261 + 311 0 30 - 300 + 100% 10 horizontal left - + Year 30 - 45 + auto font13 ffFFFFFF 00000000 @@ -132,7 +132,7 @@ left center - + Separator 30 10 @@ -144,10 +144,10 @@ center center - + Duration 30 - 50 + auto font13 ffFFFFFF 00000000 @@ -155,7 +155,7 @@ left center - + Separator 30 10 @@ -167,10 +167,10 @@ center center - + Mpaa 30 - 60 + auto font13 ffFFFFFF 00000000 @@ -178,22 +178,46 @@ left center + + Separator + 30 + 10 + font13 + ffFFFFFF + 00000000 + !String.IsEmpty(Container(100).ListItem.Status) + + center + center + + + Status + 30 + auto + font13 + ffFFFFFF + 00000000 + + left + center + - + Genre - 0 + 40 + 0 30 - 400 + 100% font13 ffFFFFFF 00000000 - right + left center Plot - 50 + 90 0 200 font13 @@ -206,7 +230,7 @@ Separator - 260 + 310 0 0.5 white.png @@ -439,7 +463,7 @@ 240 0 0.5 - white.pngù + white.png diff --git a/resources/skins/Default/720p/Servers.xml b/resources/skins/Default/720p/Servers.xml index 28cc2383..6a6a8475 100644 --- a/resources/skins/Default/720p/Servers.xml +++ b/resources/skins/Default/720p/Servers.xml @@ -99,15 +99,15 @@ Channel 150 - 60 + 65 450 30 font13 - FFFFFFFF + FFAAAAAA 00000000 left center - + @@ -115,7 +115,7 @@ Selection Background 700 130 - white.png + white.png scale @@ -143,7 +143,7 @@ 450 30 font13 - FFFFFFFF + FF232323 00000000 left center @@ -152,15 +152,15 @@ Channel 150 - 60 + 65 450 30 font13 - FFFFFFFF + FF555555 00000000 left center - + diff --git a/resources/skins/Default/media/next.png b/resources/skins/Default/media/next.png new file mode 100644 index 0000000000000000000000000000000000000000..b16f23fdac2e0af8dc57f1b44d68b7994c4a8334 GIT binary patch literal 2283 zcmb_edrVVT9Ik)}G&mJ08*|Cs6?K!e_W|W`*FtJrLVU!SG1<;-p@880$3Je{d%oZA zcfQ|uzH?4%@^Y6%M#M&lM54&d3{5`xRtQg6DEK7)`Nbs?g&JtRfj8)K2s7)HkrviO z$vjRD;2;jb@baz_~UUqAg0eP_9FDoSL%J8I>+-S!J%?Tv=jHwZQ3V z5eg3h3OFgAggj0M<0d>x*jJYTzlC80hI}D>i4r#G@*p+qq9D0UE<@q82uR_wSc!bi z;^AcQriAT0&k+bxUS2LMPmr-L8-k^#rXnbg;J6e-NZl0-PkN+`d#+HzUqeH=%`Teb zX_kS6nxu&><&`iDaA>$V<)KHbGw$K`fe?s*AeanA#)fltmS^2|mJ2W%mlJ>|B=WTN z1@j2Vgm56=m*8l25tWQkR+1mQf5p z*QbP_3!!EmtZNyt2Bn0t(cwJWLpcl@+DS2PAi5GxLZ1VT6TyIJ{;E3G0*WU1@;a(U1bf>vTj0?dDlmg>T4j^JUap|C|5SLHqnII9!M)%|drd zm~*j~QZr@ob>Z{BfVx>LUrxFxl?^Pg5>{EQG|-^}0$Yc+F_a6!WGOQF_?&V(1?qv` zP$`B=@kBkAOeCfd_(*TaD`%4@Y`d3H0ZJ$6F*yO);PQAB6J&n%RK^H{p~IdCs2NZO za7mHk$$~N{P$p$~)hDOp+l?<=CqMe4bsA9yaPe;gz{Q_2mdj)g9Oj}xgp+Z^LJDMp z$@~Fhj#99?{xNVwgR>q99QNQPa9vOgxFcNPGALGf`$eKD)il_^6E?0$^v?Fu?Ps#p zsu`Qw;d5QG)H-(or#J+=2eGar!HS@ZTtO=GFwM%*1PmK9pXQ8a>co!MYY*K$Ohx5@3}#@ z&n)0e%RYoP?+;eCo4VesGael}^U<++vAxkJ6T|Bk9%+c$J8Q4;+Tr;F5#NXB0Jr8O2k(+i%M5XZ^?>*jRs{LDJCJyF2%8{iP2sH@0-);zzTp z&Y$ZE$1_DSy;~DD?o%zcJh{`+z219h=YaI?we9sqT5Ek!Y)M?kj!x;CRY$txy0mo{ zGnS%*|F)i}T=#w9@xIvgT``?c`-2Ck&u)#pGk62tvY@zXdR0j0z9zQt%RV*7 ze0QOAdF}mKJ$9ju#ibK8lt)z5OFm3H(t^mM4Lb^W$ru?hgHG&foBg7JE-mjYPVFU)Q9qmAtjj-qWP*Ua+F2|3uHG)kQbcyw`V1;tL!F zrVCrHWO)tE#+vB(r1)mj1?#-i=;@!Qtv#y~b=i|1etK+wiOI&tuDKGn`?hk*L9Q=- U&gWU#!he)ZZLa3{qT&tz0kW9_B>(^b literal 0 HcmV?d00001 diff --git a/resources/skins/Default/media/previous.png b/resources/skins/Default/media/previous.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc9ba3e824f7dec4867556cf92b24e34edbd356 GIT binary patch literal 2294 zcmb_eYfuwc6kd5)A%mkJsI)(}3s@_&+08>@_QaoHpnQ4a{89aXhfoY>0$(3qw4XdCmbb6VST3(i=Gn82k$wnkK zC0OPnK>$0&>tUDO=HN(|9Pz{@!Ea$2Ltu{yZn5)8|nMiZH> zTs-0oMsmc$^DK#BB_$=|k~lHrG-HzFA<9vMZ1V^4W zJ!c&OnP3j+n|uYAo}J8Cqj|Bp-9D}ij#m`}B1T9ZSHjZ;I9(}AVc8VN6gdr)s+e-{ zQ644)UPuLFW1P!@G$=VD8J*VBF3Ogtr0tZ01EkB51pFB=eiAX5S-Bq*MYN~AhGnZy%F zX<{r+khnLL$DT3LrqY*L3yOwiz+R&v(`k-poTZ*AugsTIA9zRJp^f(FTTr-QuQv$Q z$r0Ac7>f*)(Nl#-{{qS}CcZ@Pq|(e_gXKt?$wUJlN@37CwAn#9VTm|NEFJGtVxd4h zP#ca)aFmGGNfOEUB$B{KYQtW6Hd>+WUX}`AI!-5%k{}yG8jDK=nqPe?V~CO9BbxBB z>0<`ul7te80y8*ZCh3LDc)Ibq`{YHRw@*)*0l9eF0OaEJ7@Nyv3LK$Eh6yL*Qwhni z2_o|vj5$id?t16I5e?3I%y-y>f$zGY9N>;{g3F-u@vTh|G^K(D4LqT7A!z>YqTOeg zD$-_bxe%SPcj2vvOi)f0wkxeTy45=dv3A0B{Jh}`nwjW+OMes($4=kh zOE=HV;fsntLX@k9%bE*2-l@tz_T=pP<1vxf!%xKrRV_GL6LuioEO^9F-U7Id<@ zM+LpdI|Dx%)X1}cPuv?uJ(1*#0xvb+6yMGGi9NKr`cO?oP3`r4S^d?Q*IlV?>>xxB zLd)CEcLfn@X!i9TahngOEjAAIwOraze|Ya8+J9|#b%DxM?H6f{PT$jtzQ6kDrRWY- zRcHD#eE7enlVu!Shx;pwxQLi&b#@$GM|E#G`BQ<_>H(0Z_r$^FKy zU>z6Ri&j+LZRwBT2Sw|Wqpp3gy$C`@>!K%ecO116i)$~2v&;;&mRAs6vk0bN@o=6}4% z0=IYj@6`Hrv+(yyWl(@|$okdBb@zML&++riY7R^qa^HV2@9s|XjqZWDHQfV&HqFD} zGZAG`5qGBVFCVOLA3Qvc|4y871ar+|~ z>-(!h(Upw@kCc@WD4Eh#r>gw)-9}4SU0)dbPYgM{$z_c?*AcYP8n{YyYvsZlZD&ja gH+v)2$lA-H;)ibOo7Lwlg}*CmRhII^qO}|U2lA{8EC2ui literal 0 HcmV?d00001 diff --git a/specials/globalsearch.py b/specials/globalsearch.py index d9ecd67d..f2228503 100644 --- a/specials/globalsearch.py +++ b/specials/globalsearch.py @@ -1,16 +1,15 @@ # -*- coding: utf-8 -*- -from logging import Logger -import threading -from core import jsontools, support -import xbmc, xbmcgui, sys, channelselector, time, os + + + +import xbmc, xbmcgui, sys, channelselector, time, threading from core.support import dbg, tmdb from core.item import Item -from core import channeltools, servertools, scrapertools +from core import channeltools, scrapertools, support from platformcode import platformtools, config, logger -from platformcode.launcher import run from threading import Thread -from platformcode.dbconverter import reload +from collections import OrderedDict if sys.version_info[0] >= 3: PY3 = True @@ -24,13 +23,9 @@ def_lang = info_language[config.get_setting("info_language", "videolibrary")] close_action = False update_lock = threading.Lock() +workers = config.get_setting('thread_number') if config.get_setting('thread_number') > 0 else None - -def set_workers(): - workers = config.get_setting('thread_number') if config.get_setting('thread_number') > 0 else None - return workers - def new_search(*args): xbmc.executebuiltin('Dialog.Close(all)') w = SearchWindow('GlobalSearch.xml', config.get_runtime_path()) @@ -53,25 +48,23 @@ FULLSCREEN = 18 # Container SEARCH = 1 EPISODES = 2 -SERVERS = 3 -NORESULTS = 4 +NORESULTS = 3 # Search MAINTITLE = 100 CHANNELS = 101 RESULTS = 102 +EPISODESLIST = 103 PROGRESS = 500 -COUNT = 501 MENU = 502 BACK = 503 CLOSE = 504 -QUALITYTAG = 505 -TAB = 506 - +TAB = 505 +NEXT = 506 +PREV = 507 # Servers -EPISODESLIST = 200 -SERVERLIST = 300 + class SearchWindow(xbmcgui.WindowXML): def start(self, item, moduleDict={}, searchActions=[], thActions=None): @@ -79,7 +72,7 @@ class SearchWindow(xbmcgui.WindowXML): self.exit = False self.item = item - self.channels = [] + self.channels = OrderedDict({'valid':[]}) self.persons = [] self.episodes = [] self.results = {} @@ -93,6 +86,11 @@ class SearchWindow(xbmcgui.WindowXML): self.items = [] self.search_threads = [] self.reload = False + self.nextAction = None + self.next = None + self.previous = None + self.FOCUS = False + if not thActions and not self.searchActions: self.thActions = Thread(target=self.getActionsThread) @@ -201,8 +199,6 @@ class SearchWindow(xbmcgui.WindowXML): it.setArt({'poster':result.get('thumbnail', noThumb), 'fanart':result.get('fanart', '')}) platformtools.set_infolabels(it, new_item) - # logger.debug(jsontools.dump(result)) - # logger.debug(new_item) color = 'FFFFFFFF' if not rating else 'FFDB2360' if rating < 4 else 'FFD2D531' if rating < 7 else 'FF21D07A' it.setProperties({'rating': str(int(rating) * 10) if rating else 100, 'color':color, 'item': new_item.tourl(), 'search': 'search'}) @@ -325,13 +321,12 @@ class SearchWindow(xbmcgui.WindowXML): self.MAINTITLE.setText('{} | {}/{} [{}"]'.format(self.mainTitle,self.count, len(self.searchActions), int(time.time() - self.time))) if percent == 100: - if len(self.channels) == 1: + if len(self.channels['valid']) or len(self.channels) == 2: self.setFocusId(RESULTS) - elif not self.results: - self.PROGRESS.setVisible(False) + elif not len(self.channels['valid']) and not len(self.channels): self.NORESULTS.setVisible(True) self.setFocusId(CLOSE) - self.channels = [] + OrderedDict({'valid':[]}) self.moduleDict = {} self.searchActions = [] @@ -342,13 +337,25 @@ class SearchWindow(xbmcgui.WindowXML): self.count = 0 Thread(target=self.timer).start() - # for searchAction in self.getActions(): - # self.search_threads.append(self.get_channel_results(searchAction)) try: - with futures.ThreadPoolExecutor(max_workers=set_workers()) as executor: + with futures.ThreadPoolExecutor(max_workers=workers) as executor: for searchAction in self.getActions(): if self.exit: return self.search_threads.append(executor.submit(self.get_channel_results, searchAction)) + for res in futures.as_completed(self.search_threads): + if res.result(): + valid, results = res.result() + self.channels['valid'].extend(valid) + + if results: + name = results[0].channel + if name not in results: + self.channels[name] = [] + self.channels[name].extend(results) + + if valid or results: + self.update() + except: import traceback logger.error(traceback.format_exc()) @@ -382,6 +389,9 @@ class SearchWindow(xbmcgui.WindowXML): valid = [] other = [] + if self.exit: + return [], [], [] + try: results, valid, other = channel_search(self.item.text) @@ -401,110 +411,79 @@ class SearchWindow(xbmcgui.WindowXML): import traceback logger.error(traceback.format_exc()) - if self.exit: - return - - update_lock.acquire() self.count += 1 - self.update(valid, other if other else results) - update_lock.release() + return valid, other if other else results def makeItem(self, item): if type(item) == str: item = Item().fromurl(item) channelParams = channeltools.get_channel_parameters(item.channel) info = item.infoLabels + + title = item.title tagline = info.get('tagline') - if 'download' in item.action or 'videolibrary' in item.action: - title = '{}{}'.format(item.title, item.contentTitle) - else: - title = '[B]{}[/B]'.format(item.contentTitle) + ('\n[I]{}[/I]'.format(tagline) if tagline else '') + if tagline == title: tagline = '' + if item.contentType == 'episode': + tagline = '' + title = '{:02d}. {}'.format(item.contentEpisodeNumber, item.contentTitle) + if item.contentSeason: + title = '{}x{}'.format(item.contentSeason, title) + if item.contentLanguage: + title = '{} [{}]'.format(title, item.contentLanguage) + if item.quality: + title = title = '{} [{}]'.format(title, item.quality) + if tagline: + title = '[B]{}[/B]'.format(title) + ('\n[I]{}[/I]'.format(tagline)) + thumb = item.thumbnail if item.thumbnail else 'Infoplus/' + item.contentType.replace('show', '') + '.png' it = xbmcgui.ListItem(title) - it.setArt({'poster':thumb, 'fanart':item.fanart}) + it.setArt({'poster':thumb, 'fanart':item.fanart, 'thumb':thumb if config.get_setting('episode_info') else ''}) platformtools.set_infolabels(it, item) - logger.debug(item) + # logger.debug(item) rating = info.get('rating') color = 'FFFFFFFF' if not rating else 'FFDB2360' if rating < 4 else 'FFD2D531' if rating < 7 else 'FF21D07A' it.setProperties({'rating': str(int(info.get('rating',10) * 10)), 'color': color, 'item': item.tourl(), 'verified': item.verified, 'channel':channelParams['title'], 'channelthumb': channelParams['thumbnail'], 'sub':'true' if 'sub' in item.contentLanguage.lower() else ''}) - if item.server: - servername = servertools.get_server_parameters(item.server.lower()).get('name', item.server) - if item. quality: servername ='{} [{}]'.format(servername, item.quality) - it.setLabel(servername) - color = scrapertools.find_single_match(item.alive, r'(FF[^\]]+)') - it.setArt({'poster': config.get_online_server_thumb(item.server)}) - - it.setProperties({'quality':'[{}]'.format(item.quality) if item.quality else '', - 'channel': channeltools.get_channel_parameters(item.channel).get('title', ''), - 'color': color if color else 'FF0082C2'}) return it - def update(self, valid, results): - if self.exit: - return + def update(self): + channels = [] + for name, value in self.channels.items(): + thumb = 'valid.png' + if name != 'valid': + thumb = channeltools.get_channel_parameters(name)['thumbnail'] + if value: + item = xbmcgui.ListItem(name) + item.setArt({'poster': thumb }) + item.setProperties({'position': '0', + 'results': str(len(value))}) + channels.append(item) - if self.item.mode != 'all' and 'valid' not in self.results: - self.results['valid'] = 0 - item = xbmcgui.ListItem('valid') - item.setArt({'poster':'valid.png'}) - item.setProperties({'position': '0', - 'results': '0'}) - self.channels.append(item) - pos = self.CHANNELS.getSelectedPosition() - self.CHANNELS.addItems(self.channels) - self.CHANNELS.selectItem(pos) - - if valid and self.CHANNELS.size(): - item = self.CHANNELS.getListItem(0) - resultsList = item.getProperty('items') - for result in valid: - resultsList += result.tourl() + '|' - item.setProperty('items', resultsList) - self.channels[0].setProperty('results', str(len(resultsList.split('|')) - 1 )) - - if self.CHANNELS.getSelectedPosition() == 0: - items = [] - for result in valid: - if result: items.append(self.makeItem(result)) - pos = self.RESULTS.getSelectedPosition() - self.RESULTS.addItems(items) - if pos < 0: - self.setFocusId(RESULTS) - pos = 0 - self.RESULTS.selectItem(pos) - - if results: - resultsList = '' - channelParams = channeltools.get_channel_parameters(results[0].channel) - name = channelParams['title'] - item = xbmcgui.ListItem(name) - item.setArt({'poster':channelParams['thumbnail']}) - item.setProperties({'position': '0', - 'results': str(len(results)) - }) - for result in results: - resultsList += result.tourl() + '|' - item.setProperties({'items': resultsList, 'results': str(len(resultsList.split('|')) - 1)}) - self.results[name] = len(self.results) - self.channels.append(item) + + if channels: pos = self.CHANNELS.getSelectedPosition() + if pos < 0: pos = 0 self.CHANNELS.reset() - self.CHANNELS.addItems(self.channels) + self.CHANNELS.addItems(channels) self.CHANNELS.selectItem(pos) - if len(self.channels) == 1: - self.setFocusId(CHANNELS) - channelResults = self.CHANNELS.getListItem(self.results[name]).getProperty('items').split('|') - items = [] - for result in channelResults: - if result: items.append(self.makeItem(result)) - self.RESULTS.reset() - self.RESULTS.addItems(items) + focus = self.getFocusId() + items = [self.makeItem(r) for r in self.channels[self.CHANNELS.getSelectedItem().getLabel()]] + subpos = self.RESULTS.getSelectedPosition() + self.RESULTS.reset() + self.RESULTS.addItems(items) + self.RESULTS.selectItem(subpos) + if not self.FOCUS: + if len(self.channels['valid']): + self.FOCUS = True + self.setFocusId(RESULTS) + elif focus not in [RESULTS]: + self.FOCUS = True + self.setFocusId(CHANNELS) def onInit(self): self.NORESULTS = self.getControl(NORESULTS) @@ -514,17 +493,18 @@ class SearchWindow(xbmcgui.WindowXML): self.mainTitle = config.get_localized_string(30993).replace('...', '') % '"%s"' % self.item.text # collect controls + self.NEXT = self.getControl(NEXT) + self.NEXT.setVisible(False) + self.PREV = self.getControl(PREV) + self.PREV.setVisible(False) self.CHANNELS = self.getControl(CHANNELS) self.RESULTS = self.getControl(RESULTS) self.PROGRESS = self.getControl(PROGRESS) - self.COUNT = self.getControl(COUNT) self.MAINTITLE = self.getControl(MAINTITLE) self.MAINTITLE.setText(self.mainTitle) self.SEARCH = self.getControl(SEARCH) self.EPISODES = self.getControl(EPISODES) self.EPISODESLIST = self.getControl(EPISODESLIST) - self.SERVERS = self.getControl(SERVERS) - self.SERVERLIST = self.getControl(SERVERLIST) self.Focus(self.focus) if self.item.mode.split('_')[0] in ['all', 'search']: @@ -543,45 +523,39 @@ class SearchWindow(xbmcgui.WindowXML): self.focus = CHANNELS self.SEARCH.setVisible(True) self.EPISODES.setVisible(False) - self.SERVERS.setVisible(False) if focusid in [EPISODES]: self.focus = focusid self.SEARCH.setVisible(False) self.EPISODES.setVisible(True) - self.SERVERS.setVisible(False) - if focusid in [SERVERS]: - self.focus = SERVERLIST - self.SEARCH.setVisible(False) - self.EPISODES.setVisible(False) - self.SERVERS.setVisible(True) def onAction(self, action): global close_action action = action.getId() focus = self.getFocusId() - if action in [CONTEXT] and focus in [RESULTS, EPISODESLIST, SERVERLIST]: + if action in [CONTEXT] and focus in [RESULTS, EPISODESLIST]: self.context() + elif focus in [EPISODESLIST] and action in [LEFT, RIGHT]: + if action in [LEFT]: + item = self.previous + if action in [RIGHT]: + item = self.next + if item: + platformtools.dialog_busy(True) + self.loadEpisodes(item) + platformtools.dialog_busy(False) + elif action in [SWIPEUP] and self.CHANNELS.isVisible(): self.setFocusId(CHANNELS) pos = self.CHANNELS.getSelectedPosition() self.CHANNELS.selectItem(pos) elif action in [LEFT, RIGHT, MOUSEMOVE] and focus in [CHANNELS] and self.CHANNELS.isVisible(): - items = [] - name = self.CHANNELS.getSelectedItem().getLabel() - subpos = int(self.CHANNELS.getSelectedItem().getProperty('position')) - channelResults = self.CHANNELS.getListItem(self.results[name]).getProperty('items').split('|') - for result in channelResults: - if result: items.append(self.makeItem(result)) - self.RESULTS.reset() - self.RESULTS.addItems(items) - self.RESULTS.selectItem(subpos) + self.channelItems() - elif (action in [DOWN] and focus in [BACK, CLOSE, MENU]) or focus not in [BACK, CLOSE, MENU, SERVERLIST, EPISODESLIST, RESULTS, CHANNELS]: - if self.SERVERS.isVisible(): self.setFocusId(SERVERLIST) - elif self.EPISODES.isVisible(): self.setFocusId(EPISODESLIST) + elif (action in [DOWN] and focus in [BACK, CLOSE, MENU]) or focus not in [BACK, CLOSE, MENU, EPISODESLIST, RESULTS, CHANNELS]: + if self.EPISODES.isVisible(): self.setFocusId(EPISODESLIST) elif self.RESULTS.isVisible() and self.RESULTS.size() > 0: self.setFocusId(RESULTS) elif self.CHANNELS.isVisible(): self.setFocusId(CHANNELS) @@ -610,17 +584,7 @@ class SearchWindow(xbmcgui.WindowXML): if self.RESULTS.getSelectedItem(): search = self.RESULTS.getSelectedItem().getProperty('search') else: search = None if control_id in [CHANNELS, TAB]: - items = [] - name = self.CHANNELS.getSelectedItem().getLabel() - subpos = int(self.CHANNELS.getSelectedItem().getProperty('position')) - channelResults = self.CHANNELS.getListItem(self.results[name]).getProperty('items').split('|') - for result in channelResults: - if result: items.append(self.makeItem(result)) - self.RESULTS.reset() - self.RESULTS.addItems(items) - self.RESULTS.selectItem(subpos) - self.CHANNELS.getSelectedItem().setProperty('position', str(subpos)) - self.setFocusId(CHANNELS) + self.channelItems() elif control_id in [BACK]: self.Back() @@ -656,6 +620,7 @@ class SearchWindow(xbmcgui.WindowXML): self.close() elif control_id in [RESULTS, EPISODESLIST]: + platformtools.dialog_busy(True) if control_id in [RESULTS]: name = self.CHANNELS.getSelectedItem().getLabel() @@ -665,84 +630,77 @@ class SearchWindow(xbmcgui.WindowXML): item_url = self.EPISODESLIST.getSelectedItem().getProperty('item') if item_url: item = Item().fromurl(item_url) + else: # no results item platformtools.dialog_busy(False) return - if item.action in ['add_movie_to_library', 'add_serie_to_library','save_download']: # special items (add to videolibrary, download ecc.) - xbmc.executebuiltin("RunPlugin(plugin://plugin.video.kod/?" + item_url + ")") + if item.action: + item.window = True + item.folder = False + xbmc.executebuiltin("RunPlugin(plugin://plugin.video.kod/?" + item.tourl() + ")") platformtools.dialog_busy(False) return - try: - self.channel = __import__('channels.%s' % item.channel, fromlist=["channels.%s" % item.channel]) - self.itemsResult = getattr(self.channel, item.action)(item) - except: - import traceback - logger.error('error importing/getting search items of ' + item.channel) - logger.error(traceback.format_exc()) - self.itemsResult = [] - - if self.itemsResult and self.itemsResult[0].action in ['play', '']: - - if config.get_setting('checklinks') and not config.get_setting('autoplay'): - self.itemsResult = servertools.check_list_links(self.itemsResult, config.get_setting('checklinks_number')) - for s in self.itemsResult: logger.debug(s) - servers = [self.makeItem(s) for s in self.itemsResult if s.server] - - if not servers: - servers = [xbmcgui.ListItem(config.get_localized_string(60347))] - servers[0].setArt({'poster': support.thumb('nofolder')}) - - self.Focus(SERVERS) - self.SERVERLIST.reset() - self.SERVERLIST.addItems(servers) - self.setFocusId(SERVERLIST) - - if config.get_setting('autoplay'): - platformtools.dialog_busy(False) - - else: - self.episodes = self.itemsResult if self.itemsResult else [] - self.itemsResult = [] - ep = [] - for item in self.episodes: - title = item.contentTitle - if item.contentEpisodeNumber: title = '{:02d}. {}'.format(item.contentEpisodeNumber, title) - if item.contentSeason: title = '{}x{}'.format(item.contentSeason, title) - - it = xbmcgui.ListItem(title) - it.setProperty('item', item.tourl()) - ep.append(it) - - if not ep: - ep = [xbmcgui.ListItem(config.get_localized_string(60347))] - ep[0].setArt({'poster', support.thumb('nofolder')}) - - self.Focus(EPISODES) - self.EPISODESLIST.reset() - self.EPISODESLIST.addItems(ep) - self.setFocusId(EPISODESLIST) + self.loadEpisodes(item) platformtools.dialog_busy(False) + def channelItems(self): + items = [] + name = self.CHANNELS.getSelectedItem().getLabel() + subpos = int(self.CHANNELS.getSelectedItem().getProperty('position')) + channelResults = self.channels.get(name) + for result in channelResults: + if result: items.append(self.makeItem(result)) + self.RESULTS.reset() + self.RESULTS.addItems(items) + self.RESULTS.selectItem(subpos) - elif control_id in [SERVERLIST]: - server = Item().fromurl(self.getControl(control_id).getSelectedItem().getProperty('item')) - return self.play(server) + def loadEpisodes(self ,item): + try: + self.channel = __import__('channels.%s' % item.channel, fromlist=["channels.%s" % item.channel]) + self.itemsResult = getattr(self.channel, item.action)(item) + except: + import traceback + logger.error('error importing/getting search items of ' + item.channel) + logger.error(traceback.format_exc()) + self.itemsResult = [] + self.episodes = self.itemsResult if self.itemsResult else [] + self.itemsResult = [] + ep = [] + isnext = False + + for e in self.episodes: + if e.action in ['findvideos']: + ep.append(self.makeItem(e)) + if e.nextSeason and e.action in ['episodios']: + self.nextAction = e.clone() + isnext = True + + if self.nextAction: + self.next = None + self.previous = None + if isnext: + self.next = self.nextAction.clone() + if self.nextAction.nextSeason > 1 or not self.next: + self.previous = self.nextAction.clone(nextSeason = self.nextAction.nextSeason - 2 if self.next else 0) + + self.NEXT.setVisible(True if self.next else False) + self.PREV.setVisible(True if self.previous else False) + + if not ep: + ep = [xbmcgui.ListItem(config.get_localized_string(60347))] + ep[0].setArt({'poster', support.thumb('nofolder')}) + + self.Focus(EPISODES) + self.EPISODESLIST.reset() + self.EPISODESLIST.addItems(ep) + self.setFocusId(EPISODESLIST) def Back(self): - self.getControl(QUALITYTAG).setText('') - if self.SERVERS.isVisible(): - if self.episodes: - self.Focus(EPISODES) - self.setFocusId(EPISODESLIST) - else: - self.Focus(SEARCH) - self.setFocusId(RESULTS) - self.RESULTS.selectItem(self.pos) - elif self.EPISODES.isVisible(): + if self.EPISODES.isVisible(): self.episodes = [] self.Focus(SEARCH) self.setFocusId(RESULTS) @@ -765,9 +723,6 @@ class SearchWindow(xbmcgui.WindowXML): if focus == EPISODESLIST: # context on episode item_url = self.EPISODESLIST.getSelectedItem().getProperty('item') parent = Item().fromurl(self.RESULTS.getSelectedItem().getProperty('item')) - elif focus == SERVERLIST: - item_url = self.SERVERLIST.getSelectedItem().getProperty('item') - parent = Item().fromurl(self.RESULTS.getSelectedItem().getProperty('item')) else: item_url = self.RESULTS.getSelectedItem().getProperty('item') parent = self.item @@ -778,10 +733,7 @@ class SearchWindow(xbmcgui.WindowXML): context_commands = [c[1].replace('Container.Refresh', 'RunPlugin').replace('Container.Update', 'RunPlugin').replace(')','&no_reload=True)') for c in commands] index = xbmcgui.Dialog().contextmenu(context) self.reload = True - if index > 0: xbmc.executebuiltin(context_commands[index]) - def play(self, server=None): - platformtools.prevent_busy(server) - server.window = True - server.globalsearch = True - return run(server) + xbmc.executebuiltin(context_commands[index]) + # if index > 0: xbmc.executebuiltin(context_commands[index]) +