Ricerche salvate: supporto cerca film/serie/attore

Possibile fix freeze kodi alla chiusura
This commit is contained in:
marco
2021-11-13 14:42:40 +01:00
parent dea6782c5e
commit d5c870db44
6 changed files with 40 additions and 37 deletions
+4 -1
View File
@@ -284,7 +284,10 @@ class Item(object):
return '\r\t' + self.tostring('\r\t') return '\r\t' + self.tostring('\r\t')
def __eq__(self, other): def __eq__(self, other):
return self.__dict__ == other.__dict__ if type(other) == Item:
return self.__dict__ == other.__dict__
else:
return False
def set_parent_content(self, parentContent): def set_parent_content(self, parentContent):
""" """
+1 -4
View File
@@ -38,9 +38,6 @@ from threading import Thread
__version__ = '1.7.0.dev0' __version__ = '1.7.0.dev0'
import xbmc
kodi_monitor = xbmc.Monitor()
major_version = sys.version_info[0] major_version = sys.version_info[0]
if major_version < 3: # py <= 2.x if major_version < 3: # py <= 2.x
if sys.version_info[1] < 5: # py <= 2.4 if sys.version_info[1] < 5: # py <= 2.4
@@ -443,7 +440,7 @@ class SqliteMultithread(Thread):
self._sqlitedict_thread_initialized = True self._sqlitedict_thread_initialized = True
res = None res = None
while not kodi_monitor.abortRequested(): while True:
req, arg, res, outer_stack = self.reqs.get() req, arg, res, outer_stack = self.reqs.get()
if req == '--close--': if req == '--close--':
assert res, ('--close-- without return queue', res) assert res, ('--close-- without return queue', res)
+1 -1
View File
@@ -113,7 +113,7 @@ def elementum_monitor():
if len(Monitor) > 0: if len(Monitor) > 0:
try: try:
data = requests.get(elementum_host + '/list').json() data = requests.get(elementum_host + '/list', timeout=2).json()
except: except:
data = '' data = ''
if data: if data:
+1 -1
View File
@@ -538,7 +538,7 @@ if __name__ == "__main__":
break break
if monitor.waitForAbort(1): # every second if monitor.waitForAbort(1): # every second
join_threads()
# db need to be closed when not used, it will cause freezes # db need to be closed when not used, it will cause freezes
db.close() db.close()
join_threads()
break break
+13 -8
View File
@@ -8,6 +8,7 @@ from core import channeltools, servertools, scrapertools
from platformcode import platformtools, config, logger from platformcode import platformtools, config, logger
from platformcode.launcher import run from platformcode.launcher import run
from threading import Thread from threading import Thread
from specials.search import save_search
if sys.version_info[0] >= 3: if sys.version_info[0] >= 3:
PY3 = True PY3 = True
@@ -28,10 +29,12 @@ def busy(state):
if state: xbmc.executebuiltin('ActivateWindow(busydialognocancel)') if state: xbmc.executebuiltin('ActivateWindow(busydialognocancel)')
else: xbmc.executebuiltin('Dialog.Close(busydialognocancel)') else: xbmc.executebuiltin('Dialog.Close(busydialognocancel)')
def set_workers(): def set_workers():
workers = config.get_setting('thread_number') if config.get_setting('thread_number') > 0 else None workers = config.get_setting('thread_number') if config.get_setting('thread_number') > 0 else None
return workers return workers
def Search(*args): def Search(*args):
xbmc.executebuiltin('Dialog.Close(all)') xbmc.executebuiltin('Dialog.Close(all)')
w = SearchWindow('GlobalSearch.xml', config.get_runtime_path()) w = SearchWindow('GlobalSearch.xml', config.get_runtime_path())
@@ -119,9 +122,11 @@ class SearchWindow(xbmcgui.WindowXML):
if not self.item.text: self.item.text = platformtools.dialog_input(default=last_search, heading='') if not self.item.text: self.item.text = platformtools.dialog_input(default=last_search, heading='')
if self.item.text: if self.item.text:
channeltools.set_channel_setting('Last_searched', self.item.text, 'search') channeltools.set_channel_setting('Last_searched', self.item.text, 'search')
from specials.search import save_search if self.item.mode == 'all':
save_search(self.item.text) save_search(self.item.text)
else:
del self.item.context # needed for preventing same content twice in saved search
save_search(self.item.__dict__)
def getActionsThread(self): def getActionsThread(self):
logger.debug() logger.debug()
@@ -186,7 +191,7 @@ class SearchWindow(xbmcgui.WindowXML):
rating = str(result.get('vote_average', '')) rating = str(result.get('vote_average', ''))
new_item = Item(channel='globalsearch', new_item = Item(channel='globalsearch',
action=True, action="Search",
title=title, title=title,
thumbnail=thumbnail, thumbnail=thumbnail,
fanart=fanart, fanart=fanart,
@@ -246,8 +251,8 @@ class SearchWindow(xbmcgui.WindowXML):
discovery = {'url': 'person/%s/combined_credits' % cast_id, 'page': '1', 'sort_by': 'primary_release_date.desc', 'language': def_lang} discovery = {'url': 'person/%s/combined_credits' % cast_id, 'page': '1', 'sort_by': 'primary_release_date.desc', 'language': def_lang}
self.persons.append(discovery) self.persons.append(discovery)
new_item = Item(channel='search', new_item = Item(channel='globalsearch',
action=True, action="Search",
title=name, title=name,
thumbnail=thumb, thumbnail=thumb,
mode='search') mode='search')
@@ -641,7 +646,7 @@ class SearchWindow(xbmcgui.WindowXML):
self.page -= 1 self.page -= 1
self.actors() self.actors()
elif search == 'persons': elif search == 'persons':
item = self.item.clone(mode='person_', discovery=self.persons[pos]) item = Item().fromurl(self.RESULTS.getSelectedItem().getProperty('item')).clone(mode='person_', discovery=self.persons[pos], text=True, folder=False)
Search(item, self.thActions) Search(item, self.thActions)
if close_action: if close_action:
self.close() self.close()
@@ -649,6 +654,7 @@ class SearchWindow(xbmcgui.WindowXML):
item = Item().fromurl(self.RESULTS.getSelectedItem().getProperty('item')) item = Item().fromurl(self.RESULTS.getSelectedItem().getProperty('item'))
if self.item.mode == 'movie': item.contentTitle = self.RESULTS.getSelectedItem().getLabel() if self.item.mode == 'movie': item.contentTitle = self.RESULTS.getSelectedItem().getLabel()
else: item.contentSerieName = self.RESULTS.getSelectedItem().getLabel() else: item.contentSerieName = self.RESULTS.getSelectedItem().getLabel()
item.folder = False
Search(item, self.thActions) Search(item, self.thActions)
if close_action: if close_action:
@@ -790,7 +796,6 @@ class SearchWindow(xbmcgui.WindowXML):
busy(False) busy(False)
self.close() self.close()
def context(self): def context(self):
focus = self.getFocusId() focus = self.getFocusId()
if focus == EPISODESLIST: # context on episode if focus == EPISODESLIST: # context on episode
+20 -22
View File
@@ -77,21 +77,9 @@ def sub_menu(item):
def saved_search(item): def saved_search(item):
logger.debug() logger.debug()
itemlist = list() itemlist = get_saved_searches()
saved_searches_list = get_saved_searches()
if len(itemlist) > 0:
for saved_search_text in saved_searches_list:
itemlist.append(
Item(channel=item.channel if not config.get_setting('new_search') else 'globalsearch',
action="new_search" if not config.get_setting('new_search') else 'Search',
title=typo(saved_search_text.split('{}')[0], 'bold'),
search_text=saved_search_text.split('{}')[0],
text=saved_search_text.split('{}')[0],
mode='all',
thumbnail=get_thumb('search.png')))
if len(saved_searches_list) > 0:
itemlist.append( itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
action="clear_saved_searches", action="clear_saved_searches",
@@ -807,11 +795,9 @@ def save_search(text):
if text: if text:
saved_searches_limit = config.get_setting("saved_searches_limit") saved_searches_limit = config.get_setting("saved_searches_limit")
current_saved_searches_list = config.get_setting("saved_searches_list", "search") saved_searches_list = config.get_setting("saved_searches_list", "search")
if current_saved_searches_list is None: if not saved_searches_list:
saved_searches_list = [] saved_searches_list = []
else:
saved_searches_list = list(current_saved_searches_list)
if text in saved_searches_list: if text in saved_searches_list:
saved_searches_list.remove(text) saved_searches_list.remove(text)
@@ -824,13 +810,25 @@ def save_search(text):
def clear_saved_searches(item): def clear_saved_searches(item):
config.set_setting("saved_searches_list", list(), "search") config.set_setting("saved_searches_list", list(), "search")
platformtools.dialog_ok(config.get_localized_string(60423), config.get_localized_string(60424)) platformtools.dialog_ok(config.get_localized_string(60423), config.get_localized_string(60424))
platformtools.itemlist_refresh()
def get_saved_searches(): def get_saved_searches():
current_saved_searches_list = config.get_setting("saved_searches_list", "search") current_saved_searches_list = config.get_setting("saved_searches_list", "search")
if current_saved_searches_list is None: if not current_saved_searches_list:
saved_searches_list = [] current_saved_searches_list = []
else: saved_searches_list = []
saved_searches_list = list(current_saved_searches_list) for saved_search_item in current_saved_searches_list:
if type(saved_search_item) == str:
saved_searches_list.append(
Item(channel='search' if not config.get_setting('new_search') else 'globalsearch',
action="new_search" if not config.get_setting('new_search') else 'Search',
title=typo(saved_search_item.split('{}')[0], 'bold'),
search_text=saved_search_item.split('{}')[0],
text=saved_search_item.split('{}')[0],
mode='all',
thumbnail=get_thumb('search.png')))
else:
saved_searches_list.append(Item().fromjson(json.dumps(saved_search_item)))
return saved_searches_list return saved_searches_list