def list_update(self): contains = lib_tools().ckKodiSources() if not contains: return try: if not control.existsPath(control.dataPath): control.makeFile(control.dataPath) dbcon = database.connect(control.libcacheFile) dbcur = dbcon.cursor() dbcur.execute('''CREATE TABLE IF NOT EXISTS lists (type TEXT, list_name TEXT, url TEXT, UNIQUE(type, list_name, url));''') dbcur.connection.commit() except: log_utils.error() try: results = dbcur.execute('''SELECT * FROM lists WHERE type="movies";''').fetchall() if not results: control.notification(message=32113) return except: log_utils.error() finally: dbcur.close() ; dbcon.close() for list in results: type = list[0] list_name = list[1] url = list[2] # type, list_name, url = list[0], list[1], list[2] try: if 'trakt' in url: from resources.lib.menus import movies items = movies.Movies().trakt_list(url, control.setting('trakt.user').strip()) if 'themoviedb' in url: from resources.lib.indexers import tmdb if '/list/' not in url: items = tmdb.Movies().tmdb_list(url) else: items = tmdb.Movies().tmdb_collections_list(url) except: log_utils.error() if not items: continue if service_notification and not control.condVisibility('Window.IsVisible(infodialog)') and not control.condVisibility('Player.HasVideo'): control.notification(title='list...' + list_name + ' - ' + type, message=32552) total_added = 0 for i in items: if control.monitor.abortRequested(): return sys.exit() try: files_added = self.add('%s (%s)' % (i['title'], i['year']), i['title'], i['year'], i['imdb'], i['tmdb'], range=True) if general_notification and files_added > 0: control.notification(title='%s (%s)' % (i['title'], i['year']), message=32554) if files_added > 0: total_added += 1 except: log_utils.error() if self.library_update == 'true' and not control.condVisibility('Library.IsScanningVideo') and total_added > 0: if contains: control.sleep(10000) control.execute('UpdateLibrary(video)') elif service_notification: control.notification(message=32103)
def super_info(self, i): try: if self.list[i]['metacache']: return imdb = self.list[i].get('imdb', '') ; tmdb = self.list[i].get('tmdb', '') #### -- Missing id's lookup -- #### if not tmdb and imdb: try: result = tmdb_indexer.Movies().IdLookup(imdb) tmdb = str(result.get('id', '')) if result.get('id') else '' except: tmdb = '' if not tmdb and imdb: trakt_ids = trakt.IdLookup('imdb', imdb, 'movie') if trakt_ids: tmdb = str(trakt_ids.get('tmdb', '')) if trakt_ids.get('tmdb') else '' if not tmdb and not imdb: log_utils.log('Third fallback attempt to fetch missing ids for movie title: (%s)' % self.list[i]['title'], __name__, log_utils.LOGDEBUG) try: results = trakt.SearchMovie(title=quote_plus(self.list[i]['title']), year=self.list[i]['year'], fields='title', full=False) if results[0]['movie']['title'] != self.list[i]['title'] or results[0]['movie']['year'] != self.list[i]['year']: return ids = results[0].get('movie', {}).get('ids', {}) if not tmdb: tmdb = str(ids.get('tmdb', '')) if ids.get('tmdb') else '' if not imdb: imdb = str(ids.get('imdb', '')) if ids.get('imdb') else '' except: pass ################################# if not tmdb: return movie_meta = cache.get(tmdb_indexer.Movies().get_movie_meta, 96, tmdb) if not movie_meta: return values = {} values.update(movie_meta) if 'rating' in self.list[i] and self.list[i]['rating']: del values['rating'] #prefer trakt rating and votes if set if 'votes' in self.list[i] and self.list[i]['votes']: del values['votes'] if not imdb: imdb = values.get('imdb', '') if not values.get('imdb'): values['imdb'] = imdb if not values.get('tmdb'): values['tmdb'] = tmdb try: if self.lang == 'en' or self.lang not in values.get('available_translations', [self.lang]): raise Exception() trans_item = trakt.getMovieTranslation(imdb, self.lang, full=True) title = trans_item.get('title') or title plot = trans_item.get('overview') or plot except: log_utils.error() if not self.disable_fanarttv: extended_art = cache.get(fanarttv.get_movie_art, 168, imdb, tmdb) if extended_art: values.update(extended_art) values = dict((k, v) for k, v in control.iteritems(values) if v is not None and v != '') # remove empty keys so .update() doesn't over-write good meta with empty values. self.list[i].update(values) meta = {'imdb': imdb, 'tmdb': tmdb, 'tvdb': '', 'lang': self.lang, 'user': self.user, 'item': values} self.meta.append(meta) except: log_utils.error()
def getTMDb(self, url, idx=True, cached=True): self.list = [] try: try: url = getattr(self, url + '_link') except: pass try: u = urlparse(url).netloc.lower() except: pass if u in self.tmdb_link and '/list/' in url: self.list = cache.get(tmdb_indexer.Movies().tmdb_collections_list, 0, url) self.sort() elif u in self.tmdb_link and not '/list/' in url: duration = 168 if cached else 0 self.list = cache.get(tmdb_indexer.Movies().tmdb_list, duration, url) if self.list is None: self.list = [] if idx: self.movieDirectory(self.list) return self.list except: log_utils.error() if not self.list: control.hide() if self.notifications: control.notification(title=32001, message=33049)
def range(self, url, list_name): control.hide() if not control.yesnoDialog(control.lang(32555), '', ''): return try: if 'traktcollection' in url: message = 32661 elif 'traktwatchlist' in url: message = 32662 elif all(i in url for i in ['trakt', '/me/', '/lists/']): message = 32663 elif all(i in url for i in ['trakt', '/lists/']) and '/me/' not in url: message = 32664 elif 'tmdb_watchlist' in url: message = 32679 elif 'tmdb_favorites' in url: message = 32680 elif all(i in url for i in ['themoviedb', '/list/']): message = 32681 else: message = 'list import' except: log_utils.error() if general_notification: if not control.condVisibility('Window.IsVisible(infodialog)') and not control.condVisibility('Player.HasVideo'): control.notification(message=message) items = [] try: if 'trakt' in url: if 'traktcollection' in url: url = 'https://api.trakt.tv/users/me/collection/movies' if 'traktwatchlist' in url: url = 'https://api.trakt.tv/users/me/watchlist/movies' from resources.lib.menus import movies items = movies.Movies().trakt_list(url, control.setting('trakt.user').strip()) if 'tmdb' in url: if 'tmdb_watchlist' in url: url = 'https://api.themoviedb.org/3/account/{account_id}/watchlist/movies?api_key=%s&session_id=%s' % ('%s', tmdb_session_id) if 'tmdb_favorites' in url: url = 'https://api.themoviedb.org/3/account/{account_id}/favorite/movies?api_key=%s&session_id=%s' % ('%s', tmdb_session_id) from resources.lib.indexers import tmdb items = tmdb.Movies().tmdb_list(url) if (all(i in url for i in ['themoviedb', '/list/'])): url = url.split('&sort_by')[0] from resources.lib.indexers import tmdb items = tmdb.Movies().tmdb_collections_list(url) except: log_utils.error() if items is None or items == []: if general_notification: control.notification(title=message, message=33049) return contains = lib_tools().ckKodiSources() total_added = 0 for i in items: if control.monitor.abortRequested(): return sys.exit() try: files_added = self.add('%s (%s)' % (i['title'], i['year']), i['title'], i['year'], i['imdb'], i['tmdb'], range=True) if general_notification and files_added > 0: control.notification(title='%s (%s)' % (i['title'], i['year']), message=32554) if files_added > 0: total_added += 1 except: log_utils.error() try: type = 'movies' control.makeFile(control.dataPath) dbcon = database.connect(control.libcacheFile) dbcur = dbcon.cursor() dbcur.execute('''CREATE TABLE IF NOT EXISTS lists (type TEXT, list_name TEXT, url TEXT, UNIQUE(type, list_name, url));''') dbcur.execute('''INSERT OR REPLACE INTO lists Values (?, ?, ?)''', (type, list_name, url)) dbcur.connection.commit() except: log_utils.error() finally: dbcur.close() ; dbcon.close() if self.library_update == 'true' and not control.condVisibility('Library.IsScanningVideo') and total_added > 0: if contains: control.sleep(10000) control.execute('UpdateLibrary(video)') elif general_notification: control.notification(message=32103)