def onInit(self): '''triggered when the dialog is drawn''' if self.listitem: self.clearList() kodidb = KodiDb() if isinstance(self.listitem, dict): self.listitem = kodidb.prepare_listitem(self.listitem) self.listitem = kodidb.create_listitem(self.listitem, False) del kodidb self.addItem(self.listitem) # disable some controls if existing disable_controls = [9, 7, 101, 6] for item in disable_controls: try: self.getControl(item).setVisible(False) except Exception: pass # enable some controls if existing disable_controls = [351, 352] for item in disable_controls: try: self.getControl(item).setVisible(True) self.getControl(item).setEnabled(True) except Exception: pass
class SearchBackgroundThread(threading.Thread): '''Background thread to complement our search dialog, fills the listing while UI keeps responsive''' active = True dialog = None search_string = "" def __init__(self, *args): xbmc.log("SearchBackgroundThread Init") threading.Thread.__init__(self, *args) self.kodidb = KodiDb() self.actors = [] thread.start_new_thread(self.set_actors, ()) def set_search(self, searchstr): '''set search query''' self.search_string = searchstr def stop_running(self): '''stop thread end exit''' self.active = False def set_dialog(self, dialog): '''set the active dialog to perform actions''' self.dialog = dialog def set_actors(self): '''fill list with all actors''' self.actors = self.kodidb.actors() def run(self): '''Main run loop for the background thread''' last_searchstring = "" monitor = xbmc.Monitor() while not monitor.abortRequested() and self.active: if self.search_string != last_searchstring: last_searchstring = self.search_string self.do_search(self.search_string) monitor.waitForAbort(1) del monitor def do_search(self, search_term): '''scrape results for search query''' movies_list = self.dialog.getControl(3110) series_list = self.dialog.getControl(3111) cast_list = self.dialog.getControl(3112) # clear current values movies_list.reset() series_list.reset() cast_list.reset() if len(search_term) == 0: return filters = [{"operator": "contains", "field": "title", "value": search_term}] # Process movies items = self.kodidb.movies(filters=filters) items = process_method_on_list(self.kodidb.prepare_listitem, items) result = [] for item in items: result.append(self.kodidb.create_listitem(item, False)) movies_list.addItems(result) # Process tvshows items = self.kodidb.tvshows(filters=filters) items = process_method_on_list(self.kodidb.prepare_listitem, items) result = [] for item in items: item["file"] = 'videodb://tvshows/titles/%s' % item['tvshowid'] item["isFolder"] = True result.append(self.kodidb.create_listitem(item, False)) series_list.addItems(result) # Process cast result = [] for item in self.actors: if search_term.lower() in item["label"].lower(): item = self.kodidb.prepare_listitem(item) item["file"] = "RunScript(script.skin.helper.service,action=getcastmedia,name=%s)" % item["label"] result.append(self.kodidb.create_listitem(item, False)) cast_list.addItems(result)