From a077b2c10f8e73c26e801dba22f423499a1e88ba Mon Sep 17 00:00:00 2001 From: marco Date: Sat, 30 May 2020 11:47:31 +0200 Subject: [PATCH 1/2] migliorie ricerca globale --- resources/language/English/strings.po | 4 +- resources/language/Italian/strings.po | 8 +-- specials/search.py | 71 +++++++++++++++++---------- 3 files changed, 51 insertions(+), 32 deletions(-) diff --git a/resources/language/English/strings.po b/resources/language/English/strings.po index efb72699..14ff4e04 100644 --- a/resources/language/English/strings.po +++ b/resources/language/English/strings.po @@ -116,7 +116,7 @@ msgid "Contextual menu" msgstr "" msgctxt "#30025" -msgid "" +msgid "Other possible results" msgstr "" msgctxt "#30026" @@ -529,7 +529,7 @@ msgid "Synchronization with Trakt started" msgstr "" msgctxt "#59972" -msgid "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" +msgid "Search for: '%s' | Time: %2.f seconds" msgstr "" msgctxt "#59973" diff --git a/resources/language/Italian/strings.po b/resources/language/Italian/strings.po index f6010cf2..da8273c8 100644 --- a/resources/language/Italian/strings.po +++ b/resources/language/Italian/strings.po @@ -116,8 +116,8 @@ msgid "Contextual menu" msgstr "Menu contestuale" msgctxt "#30025" -msgid "" -msgstr "" +msgid "Other possible results" +msgstr "Altri possibili risultati:" msgctxt "#30026" msgid "Direct" @@ -528,8 +528,8 @@ msgid "Synchronization with Trakt started" msgstr "Sincronizzazione con Trakt iniziata" msgctxt "#59972" -msgid "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" -msgstr "Ricerca di: '%s' | Trovati: %d video | Tempo: %2.f secondi" +msgid "Search for: '%s' | Time: %2.f seconds" +msgstr "Ricerca di: '%s' | Tempo: %2.f secondi" msgctxt "#59973" msgid "Search Cancelled" diff --git a/specials/search.py b/specials/search.py index c9a05ee0..e554a0d3 100644 --- a/specials/search.py +++ b/specials/search.py @@ -198,21 +198,27 @@ def channel_search(item): cnt = 0 progress = platformtools.dialog_progress(config.get_localized_string(30993) % item.title, config.get_localized_string(70744) % len(channel_list), - str(searching_titles)) + ', '.join(searching_titles)) config.set_setting('tmdb_active', False) search_action_list = [] module_dict = {} - logger.info('start import') for ch in channel_list: - # ch_params = channeltools.get_channel_parameters(ch) - module = __import__('channels.%s' % ch, fromlist=["channels.%s" % ch]) - mainlist = getattr(module, 'mainlist')(Item(channel=ch, global_search=True)) + try: + module = __import__('channels.%s' % ch, fromlist=["channels.%s" % ch]) + mainlist = getattr(module, 'mainlist')(Item(channel=ch, global_search=True)) - module_dict[ch] = module - search_action_list.extend([elem for elem in mainlist if - elem.action == "search" and (item.mode == 'all' or elem.contentType == item.mode)]) - logger.info('end import') + module_dict[ch] = module + search_action_list.extend([elem for elem in mainlist if + elem.action == "search" and (mode == 'all' or elem.contentType == mode)]) + if progress.iscanceled(): + return [] + except: + import traceback + logger.error('error importing/getting search items of ' + ch) + logger.error(traceback.format_exc()) + + total_search_actions = len(search_action_list) with futures.ThreadPoolExecutor(max_workers=set_workers()) as executor: c_results = [] for search_action in search_action_list: @@ -221,18 +227,27 @@ def channel_search(item): break for res in futures.as_completed(c_results): - cnt += 1 - finished = res.result()[0] + search_action = res.result()[0] + channel = search_action.channel if res.result()[1]: - ch_list[res.result()[0]] = res.result()[1] + if channel not in ch_list: + ch_list[channel] = [] + ch_list[channel].extend(res.result()[1]) if progress.iscanceled(): break - if finished in searching: - searching_titles.remove(searching_titles[searching.index(finished)]) - searching.remove(finished) - progress.update(old_div((cnt * 100), len(channel_list)), config.get_localized_string(70744) % str(len(channel_list) - cnt), - str(searching_titles)) + + search_action_list.remove(search_action) + # if no action of this channel remains + for it in search_action_list: + if it.channel == channel: + break + else: + cnt += 1 + searching_titles.remove(searching_titles[searching.index(channel)]) + searching.remove(channel) + progress.update(old_div(((total_search_actions - len(search_action_list)) * 100), total_search_actions), config.get_localized_string(70744) % str(len(channel_list) - cnt), + ', '.join(searching_titles)) progress.close() @@ -241,7 +256,7 @@ def channel_search(item): config.get_localized_string(60293)) config.set_setting('tmdb_active', True) - res_count = 0 + # res_count = 0 for key, value in ch_list.items(): ch_name = channel_titles[channel_list.index(key)] grouped = list() @@ -288,7 +303,7 @@ def channel_search(item): title = typo(ch_name,'bold') + typo(str(len(grouped)), '_ [] color kod bold') else: title = typo('%s %s' % (len(grouped), config.get_localized_string(70695)), 'bold') - res_count += len(grouped) + # res_count += len(grouped) plot='' for it in grouped: @@ -301,12 +316,16 @@ def channel_search(item): # send_to_temp(to_temp) config.set_setting('tmdb_active', True) + + results = sorted(results, key=lambda it: it.title) + results_statistic = config.get_localized_string(59972) % (item.title, time.time() - start) if item.mode == 'all': - if config.get_setting('result_mode', 'search') != 0: - res_count = len(results) - results = sorted(results, key=lambda it: it.title) - results_statistic = config.get_localized_string(59972) % (item.title, res_count, time.time() - start) - results.insert(0, Item(title = typo(results_statistic,'color kod bold'))) + results.insert(0, Item(title=typo(results_statistic, 'color kod bold'), thumbnail=get_thumb('search.png'))) + else: + valid.insert(0, Item(title=typo(results_statistic, 'color kod bold'), thumbnail=get_thumb('search.png'))) + + if results: + results.insert(0, Item(title=typo(config.get_localized_string(30025), 'color kod bold'), thumbnail=get_thumb('search.png'))) # logger.debug(results_statistic) return valid + results @@ -328,9 +347,9 @@ def get_channel_results(item, module_dict, search_action): results = get_info(results) - return [ch, results] + return [search_action, results] except: - return [ch, results] + return [search_action, results] def get_info(itemlist): From 0e22056e48fb814ea797cb453f04e35197c16aff Mon Sep 17 00:00:00 2001 From: marco Date: Sat, 30 May 2020 14:13:23 +0200 Subject: [PATCH 2/2] link diretti ai server in ricerca globale -> cerca film --- channels/filmsenzalimiticc.py | 4 ---- core/support.py | 2 +- specials/autoplay.py | 2 ++ specials/search.py | 38 ++++++++++++++++++++++++++++++----- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/channels/filmsenzalimiticc.py b/channels/filmsenzalimiticc.py index 689a9a1a..25ad2875 100644 --- a/channels/filmsenzalimiticc.py +++ b/channels/filmsenzalimiticc.py @@ -239,10 +239,6 @@ def findvideos(item): # Questa def. deve sempre essere nominata findvideos Item(channel=item.channel, title='[COLOR lightblue][B]Aggiungi alla videoteca[/B][/COLOR]', url=item.url, action='add_pelicula_to_library', extra='findservers', contentTitle=item.contentTitle)) - # Necessario per filtrare i Link - if checklinks: - itemlist = servertools.check_list_links(itemlist, checklinks_number) - # Necessario per FilterTools # itemlist = filtertools.get_links(itemlist, item, list_language) diff --git a/core/support.py b/core/support.py index 2f5b76f6..be8789fc 100755 --- a/core/support.py +++ b/core/support.py @@ -1181,7 +1181,7 @@ def server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=Tru AP, HS = autoplay.get_channel_AP_HS(item) # Check Links - if not AP and (config.get_setting('checklinks') or config.get_setting('checklinks', item.channel)): + if not AP and not item.global_search and (config.get_setting('checklinks') or config.get_setting('checklinks', item.channel)): if config.get_setting('checklinks', item.channel): checklinks_number = config.get_setting('checklinks_number', item.channel) elif config.get_setting('checklinks'): diff --git a/specials/autoplay.py b/specials/autoplay.py index 3f2ea054..71e588af 100644 --- a/specials/autoplay.py +++ b/specials/autoplay.py @@ -90,6 +90,8 @@ def start(itemlist, item): :param item: item (the main item of the channel) :return: try to auto-reproduce, in case of failure it returns the itemlist that it received in the beginning ''' + if item.global_search: + return itemlist logger.info() global PLAYED diff --git a/specials/search.py b/specials/search.py index e554a0d3..0b2fa194 100644 --- a/specials/search.py +++ b/specials/search.py @@ -266,12 +266,11 @@ def channel_search(item): if len(value) == 1: if not value[0].action or config.get_localized_string(70006).lower() in value[0].title.lower(): continue - tmdb.set_infoLabels_itemlist(value, True, forced=True) for elem in value: if not elem.infoLabels.get('year', ""): elem.infoLabels['year'] = '-' - tmdb.set_infoLabels_item(elem, True) - + tmdb.set_infoLabels_itemlist(value, True, forced=True) + for elem in value: if elem.infoLabels['tmdb_id'] == searched_id: elem.from_channel = key if not config.get_setting('unify'): @@ -312,14 +311,30 @@ def channel_search(item): results.append(Item(channel='search', title=title, action='get_from_temp', thumbnail=ch_thumb, itemlist=[ris.tourl() for ris in grouped], plot=plot, page=1)) + progress.close() + # "All Together" and movie mode -> search servers + if config.get_setting('result_mode') == 1 and mode == 'movie': + progress = platformtools.dialog_progress(config.get_localized_string(30993) % item.title, config.get_localized_string(60683)) + valid_servers = [] + with futures.ThreadPoolExecutor(max_workers=set_workers()) as executor: + c_results = [executor.submit(get_servers, v, module_dict) for v in valid] + completed = 0 + for res in futures.as_completed(c_results): + if progress.iscanceled(): + break + if res.result(): + completed += 1 + valid_servers.extend(res.result()) + progress.update(old_div(completed * 100, len(valid))) + valid = valid_servers + progress.close() # send_to_temp(to_temp) - config.set_setting('tmdb_active', True) results = sorted(results, key=lambda it: it.title) results_statistic = config.get_localized_string(59972) % (item.title, time.time() - start) - if item.mode == 'all': + if mode == 'all': results.insert(0, Item(title=typo(results_statistic, 'color kod bold'), thumbnail=get_thumb('search.png'))) else: valid.insert(0, Item(title=typo(results_statistic, 'color kod bold'), thumbnail=get_thumb('search.png'))) @@ -352,6 +367,19 @@ def get_channel_results(item, module_dict, search_action): return [search_action, results] +def get_servers(item, module_dict): + item.global_search = True + ch = item.channel + results = list() + module = module_dict[ch] + try: + results = getattr(module, item.action)(item) + except: + import traceback + logger.error(traceback.format_exc()) + return [r.clone(title=r.title + typo(item.channel, '_ [] color kod')) for r in results if r.action == 'play'] + + def get_info(itemlist): logger.info() tmdb.set_infoLabels_itemlist(itemlist, True, forced=True)