def _common_menu_builder(self, trakt_list, content_type, action="getSources", **params): if len(trakt_list) == 0: g.log("We received no titles to build a list", "warning") g.cancel_directory() return list_items = [] smart_play = params.pop("smart_play", False) no_paging = params.pop("no_paging", False) sort = params.pop("sort", False) prepend_date = params.pop("prepend_date", False) mixed_list = params.pop("mixed_list", False) next_args = params.pop("next_args", None) params.pop("hide_unaired", None) params.pop("hide_watched", None) try: params["bulk_add"] = True list_items = [ g.add_directory_item(item.get("name"), action=action, menu_item=item, action_args=item.get("args"), **params) for item in self._post_process_list(trakt_list, prepend_date, mixed_list) if item is not None ] if smart_play: return list_items else: xbmcplugin.addDirectoryItems(g.PLUGIN_HANDLE, list_items, len(list_items)) except Exception as e: g.log_stacktrace() if not smart_play: g.cancel_directory() raise e finally: if not smart_play: if (not (g.FROM_WIDGET and g.get_bool_setting("general.widget.hide_next")) and not no_paging and len(list_items) >= self.page_limit): g.REQUEST_PARAMS["page"] = g.PAGE + 1 if next_args: g.REQUEST_PARAMS["action_args"] = next_args elif g.REQUEST_PARAMS.get("action_args") is not None: g.REQUEST_PARAMS["action_args"] = g.REQUEST_PARAMS.get( "action_args") params = g.REQUEST_PARAMS params.update({"special_sort": "bottom"}) g.add_directory_item(g.get_language_string(30016), **params) g.close_directory(content_type, sort=sort)
def shows_genres(self): g.add_directory_item( g.get_language_string(30045), action="showGenresGet", menu_item={ "art": dict.fromkeys(['icon', 'poster', 'thumb', 'fanart'], g.GENRES_PATH + "list.png") }) genres = self.trakt_api.get_json_cached("genres/shows", extended="full") if genres is None: g.cancel_directory() return for i in genres: g.add_directory_item( i["name"], action="showGenresGet", action_args=i["slug"], menu_item={ "art": dict.fromkeys(['icon', 'poster', 'thumb', 'fanart'], "{}{}.png".format(g.GENRES_PATH, i["slug"])) }) g.close_directory(g.CONTENT_GENRES)
def home(self): for key, value in sorted(self.providers.items()): args = {'debrid_provider': key, 'id': None} g.add_directory_item(value[0], action='myFilesFolder', action_args=args) g.close_directory(g.CONTENT_MENU, sort='title')
def movies_years(): from datetime import datetime year = int(datetime.today().year) for year in range(year, 1899, -1): g.add_directory_item(g.UNICODE(year), action="movieYearsMovies", action_args=year) g.close_directory(g.CONTENT_MENU)
def provider_menu(): g.add_directory_item(g.get_language_string(30139), action='manualProviderUpdate', is_folder=False, description=g.get_language_string(30386)) g.add_directory_item(g.get_language_string(30140), action='manageProviders', is_folder=False, description=g.get_language_string(30387)) g.close_directory(g.CONTENT_MENU)
def provider_menu(): g.add_directory_item(g.get_language_string(30150), action='manualProviderUpdate', is_folder=False, description=g.get_language_string(30419)) g.add_directory_item(g.get_language_string(30151), action='manageProviders', is_folder=False, description=g.get_language_string(30420)) g.close_directory(g.CONTENT_FOLDER)
def movies_genres(self): g.add_directory_item(g.get_language_string(30046), action="movieGenresGet") genres = self.trakt.get_json("genres/movies") if genres is None: g.cancel_directory() return for i in genres: g.add_directory_item( i["name"], action="movieGenresGet", action_args=i["slug"] ) g.close_directory(g.CONTENT_GENRES)
def list_rd_transfers(self): from resources.lib.debrid import real_debrid transfer_list = real_debrid.RealDebrid().list_torrents() if len(transfer_list) == 0: g.close_directory(self.view_type) return for i in transfer_list: title = '{} - {}% : {}' \ .format(g.color_string(i['status'].title()), g.UNICODE(i['progress']), i['filename'][:50] + "...") g.add_directory_item(title) g.close_directory(self.view_type)
def list_premiumize_transfers(self): from resources.lib.debrid import premiumize transfer_list = premiumize.Premiumize().list_transfers() if len(transfer_list['transfers'] ) == 0 or 'transfers' not in transfer_list: g.close_directory(self.view_type) return for i in transfer_list['transfers']: title = '{} - {}% : {}' \ .format(g.color_string(i['status'].title()), g.UNICODE(i['progress'] * 100), i['name'][:50] + "...") g.add_directory_item(title) g.close_directory(self.view_type)
def shows_genres(self): g.add_directory_item(g.get_language_string(30046), action="showGenresGet") genres = self.trakt.get_json_cached("genres/shows", extended="full") if genres is None: g.cancel_directory() return for i in genres: g.add_directory_item( i["name"], action="showGenresGet", action_args=i["slug"] ) g.close_directory(g.CONTENT_GENRES)
def get_assist_torrents(self): g.add_directory_item(g.get_language_string(30245), action='nonActiveAssistClear') torrent_list = self.torrent_assist.get_assist_torrents() if torrent_list is not None: for i in torrent_list: debrid = tools.shortened_debrid(i['provider']) title = g.color_string('{} - {} - {}% : {}'.format( debrid, i['status'].title(), i['progress'], i['release_title'])) g.add_directory_item(title) g.close_directory(self.view_type)
def list_premiumize_transfers(self): from resources.lib.debrid import premiumize transfer_list = premiumize.Premiumize().list_transfers() if len(transfer_list['transfers'] ) == 0 or "transfers" not in transfer_list: g.close_directory(self.view_type) return for i in transfer_list['transfers']: title = "{} - {}% : {}".format( g.color_string(i['status'].title().title()), g.UNICODE(i['progress'] * 100), (i['name'][:50] + "...") if len(i['name']) > 50 else i['name']) g.add_directory_item(title, is_playable=False, is_folder=False) g.close_directory(self.view_type)
def shows_years(self, year=None): if year is None: current_year = datetime.datetime.today().year for year in range(current_year, 1899, -1): g.add_directory_item(g.UNICODE(year), action="showYears", action_args=year) g.close_directory(g.CONTENT_MENU) else: trakt_list = self.shows_database.extract_trakt_page( "shows/popular", years=year, page=g.PAGE, extended="full", hide_watched=False) self.list_builder.show_list_builder(trakt_list)
def shows_years(self, year=None): if year is None: current_year = int( tools.parse_datetime(datetime.datetime.today().strftime( g.DATE_FORMAT)).year) all_years = reversed( [year for year in range(1900, current_year + 1)]) menu_items = [] for year in all_years: menu_items.append( g.add_directory_item(g.UNICODE(year), action="showYears", action_args=year, bulk_add=True)) xbmcplugin.addDirectoryItems(g.PLUGIN_HANDLE, menu_items, len(menu_items)) g.close_directory(g.CONTENT_SHOW) else: trakt_list = self.shows_database.extract_trakt_page( "shows/popular", years=year, page=g.PAGE, extended="full", hide_watched=False) self.list_builder.show_list_builder(trakt_list)
def _format_items(self, items): for i in items: i.update({'debrid_provider': self.provider}) if self._is_folder(i): is_playable = False is_folder = True action = 'myFilesFolder' else: is_folder = False is_playable = True action = 'myFilesPlay' g.add_directory_item(i['name'], action=action, is_playable=is_playable, is_folder=is_folder, action_args=i)
def shows_search_history(self): history = self.search_history.get_search_history("tvshow") g.add_directory_item( g.get_language_string(30182), action="showsSearch", description=g.get_language_string(30372), ) g.add_directory_item( g.get_language_string(30180), action="clearSearchHistory", mediatype="tvshow", is_folder=False, description=g.get_language_string(30180), ) for i in history: remove_path = g.create_url( g.BASE_URL, { "action": "removeSearchHistory", "mediatype": "tvshow", "endpoint": i }, ) g.add_directory_item( i, action="showsSearchResults", action_args=tools.construct_action_args(i), cm=[(g.get_language_string(30565), "RunPlugin({})".format(remove_path))], ) g.close_directory(g.CONTENT_MENU)
def test_windows(): g.add_directory_item(g.get_language_string(30498), action='testPlayingNext', is_folder=False, description=g.get_language_string(30425)) g.add_directory_item(g.get_language_string(30499), action='testStillWatching', is_folder=False, description=g.get_language_string(30426)) g.add_directory_item(g.get_language_string(30500), action='testResolverWindow', is_folder=False, description=g.get_language_string(30427)) g.add_directory_item(g.get_language_string(30501), action='testSourceSelectWindow', is_folder=False, description=g.get_language_string(30428)) g.add_directory_item(g.get_language_string(30502), action='testManualCacheWindow', is_folder=False, description=g.get_language_string(30496)) g.close_directory(g.CONTENT_FOLDER)
def movies_years(): from datetime import datetime year = int(datetime.today().year) years = [] for i in range(year - 100, year + 1): years.append(i) years = sorted(years, reverse=True) [ g.add_directory_item(str(i), action="movieYearsMovies", action_args=i) for i in years ] g.close_directory(g.CONTENT_FOLDER)
def test_windows(): g.add_directory_item(g.get_language_string(30486), action='testPlayingNext', is_folder=False, description=g.get_language_string(30413)) g.add_directory_item(g.get_language_string(30487), action='testStillWatching', is_folder=False, description=g.get_language_string(30414)) g.add_directory_item(g.get_language_string(30488), action='testResolverWindow', is_folder=False, description=g.get_language_string(30415)) g.add_directory_item(g.get_language_string(30489), action='testSourceSelectWindow', is_folder=False, description=g.get_language_string(30416)) g.add_directory_item(g.get_language_string(30490), action='testManualCacheWindow', is_folder=False, description=g.get_language_string(30484)) g.close_directory(g.CONTENT_MENU)
def create_single_item_playlist_from_info(self): g.cancel_playback() name = self.item_information["info"]["title"] item = g.add_directory_item( name, action="getSources", menu_item=self.item_information, action_args=tools.construct_action_args(self.item_information), bulk_add=True, is_playable=True, ) g.PLAYLIST.add(url=g.BASE_URL + "/?" + g.PARAM_STRING, listitem=item[1]) return g.PLAYLIST
def _format_items(self, items): for i in items: i.update({'debrid_provider': self.provider}) if self._is_folder(i): name = i['name'] is_playable = False is_folder = True action = 'myFilesFolder' else: name = "{} ({})".format( i['name'], tools.bytes_size_display( i['size'])) if i.get("size") else i['name'] is_folder = False is_playable = True action = 'myFilesPlay' i.pop('links', None) # De-clutter our action args a bit g.add_directory_item(name, action=action, is_playable=is_playable, is_folder=is_folder, action_args=i)
def shows_networks(self): trakt_list = self.trakt_api.get_json_cached("networks") list_items = [] for i in trakt_list: list_items.append( g.add_directory_item( i["name"], action="showsNetworkShows", action_args=i["name"], bulk_add=True, )) xbmcplugin.addDirectoryItems(g.PLUGIN_HANDLE, list_items, len(list_items)) g.close_directory(g.CONTENT_MENU)
def home(self): g.add_directory_item(g.get_language_string(30242), action='cacheAssistStatus') if g.get_bool_setting('premiumize.enabled'): g.add_directory_item(g.get_language_string(30243), action='premiumize_transfers') if g.get_bool_setting('realdebrid.enabled'): g.add_directory_item(g.get_language_string(30244), action='realdebridTransfers') g.close_directory(self.view_type)
def trakt_sync_tools(): g.add_directory_item(g.get_language_string(30238), action='flushTraktActivities', is_folder=False, description=g.get_language_string(30421)) g.add_directory_item(g.get_language_string(30239), action='forceTraktSync', is_folder=False, description=g.get_language_string(30422)) g.add_directory_item(g.get_language_string(30240), action='flushTraktDBMeta', is_folder=False, description=g.get_language_string(30423)) g.add_directory_item(g.get_language_string(30241), action='rebuildTraktDatabase', is_folder=False, description=g.get_language_string(30424)) g.close_directory(g.CONTENT_FOLDER)
def trakt_sync_tools(): g.add_directory_item(g.get_language_string(30216), action='flushTraktActivities', is_folder=False, description=g.get_language_string(30388)) g.add_directory_item(g.get_language_string(30217), action='forceTraktSync', is_folder=False, description=g.get_language_string(30389)) g.add_directory_item(g.get_language_string(30218), action='rebuildTraktDatabase', is_folder=False, description=g.get_language_string(30390)) g.close_directory(g.CONTENT_MENU)
def movies_search_history(): history = SearchHistory().get_search_history("movie") g.add_directory_item( g.get_language_string(30203), action="moviesSearch", description=g.get_language_string(30404), ) g.add_directory_item( g.get_language_string(30202), action="clearSearchHistory", mediatype="movie", is_folder=False, description=g.get_language_string(30414), ) for i in history: g.add_directory_item(i, action="moviesSearchResults", action_args=i) g.close_directory(g.CONTENT_FOLDER)
def shows_search_history(): history = SearchHistory().get_search_history("tvshow") g.add_directory_item( g.get_language_string(30195), action="showsSearch", description=g.get_language_string(30394), ) g.add_directory_item( g.get_language_string(30193), action="clearSearchHistory", mediatype="tvshow", is_folder=False, description=g.get_language_string(30193), ) for i in history: g.add_directory_item( i, action="showsSearchResults", action_args=tools.construct_action_args(i), ) g.close_directory(g.CONTENT_MENU)
def discover_shows(): g.add_directory_item( g.get_language_string(30004), action="genericEndpoint", mediatype="shows", endpoint="popular", description=g.get_language_string(30416), ) g.add_directory_item( g.get_language_string(30345), action="showsPopularRecent", description=g.get_language_string(30417), ) if g.get_setting("trakt.auth"): g.add_directory_item( g.get_language_string(30005), action="showsRecommended", description=g.get_language_string(30418), ) g.add_directory_item( g.get_language_string(30006), action="genericEndpoint", mediatype="shows", endpoint="trending", description=g.get_language_string(30419), ) g.add_directory_item( g.get_language_string(30346), action="showsTrendingRecent", description=g.get_language_string(30420), ) g.add_directory_item( g.get_language_string(30046), action="showsNew", description=g.get_language_string(30421), ) g.add_directory_item( g.get_language_string(30007), action="genericEndpoint", mediatype="shows", endpoint="played", description=g.get_language_string(30422), ) g.add_directory_item( g.get_language_string(30008), action="genericEndpoint", mediatype="shows", endpoint="watched", description=g.get_language_string(30423), ) g.add_directory_item( g.get_language_string(30009), action="genericEndpoint", mediatype="shows", endpoint="collected", description=g.get_language_string(30424), ) g.add_directory_item( g.get_language_string(30352), action="TrendingLists", mediatype="shows", description=g.get_language_string(30425), ) g.add_directory_item( g.get_language_string(30354), action="PopularLists", mediatype="shows", description=g.get_language_string(30426), ) if not g.get_bool_setting("general.hideUnAired"): g.add_directory_item( g.get_language_string(30010), action="genericEndpoint", mediatype="shows", endpoint="anticipated", description=g.get_language_string(30427), ) g.add_directory_item( g.get_language_string(30011), action="showsUpdated", description=g.get_language_string(30428), ) g.add_directory_item( g.get_language_string(30169), action="showsNetworks", description=g.get_language_string(30429), ) g.add_directory_item( g.get_language_string(30171), action="showYears", description=g.get_language_string(30430), ) g.add_directory_item( g.get_language_string(30042), action="tvGenres", description=g.get_language_string(30431), ) g.add_directory_item( g.get_language_string(30190), action="showsByActor", description=g.get_language_string(30432), ) if not g.get_bool_setting("searchHistory"): g.add_directory_item( g.get_language_string(30013), action="showsSearch", description=g.get_language_string(30372), ) else: g.add_directory_item( g.get_language_string(30013), action="showsSearchHistory", description=g.get_language_string(30374), ) g.close_directory(g.CONTENT_MENU)
def my_shows(): g.add_directory_item( g.get_language_string(30043), action="onDeckShows", description=g.get_language_string(30433), ) g.add_directory_item( g.get_language_string(30014), action="showsMyCollection", description=g.get_language_string(30434), ) g.add_directory_item( g.get_language_string(30015), action="showsMyWatchlist", description=g.get_language_string(30435), ) g.add_directory_item( g.get_language_string(30090), action="showsRecentlyWatched", description=g.get_language_string(30479), ) g.add_directory_item( g.get_language_string(30210), action="showsNextUp", description=g.get_language_string(30436), ) g.add_directory_item( g.get_language_string(30211), action="myUpcomingEpisodes", description=g.get_language_string(30437), ) g.add_directory_item( g.get_language_string(30212), action="showsMyProgress", description=g.get_language_string(30438), ) g.add_directory_item( g.get_language_string(30213), action="showsMyRecentEpisodes", description=g.get_language_string(30439), ) g.add_directory_item( g.get_language_string(30214), action="myTraktLists", mediatype="shows", description=g.get_language_string(30440), ) g.add_directory_item( g.get_language_string(30350), action="myLikedLists", mediatype="shows", description=g.get_language_string(30441), ) g.add_directory_item( g.get_language_string(30325), action="myWatchedEpisodes", description=g.get_language_string(30442), ) g.close_directory(g.CONTENT_MENU)
def discover_shows(): g.add_directory_item( g.get_language_string(30004), action="genericEndpoint", mediatype="shows", endpoint="popular", description=g.get_language_string(30438), ) g.add_directory_item( g.get_language_string(30367), action="showsPopularRecent", description=g.get_language_string(30439), ) if g.get_setting("trakt.auth"): g.add_directory_item( g.get_language_string(30005), action="showsRecommended", description=g.get_language_string(30440), ) g.add_directory_item( g.get_language_string(30006), action="genericEndpoint", mediatype="shows", endpoint="trending", description=g.get_language_string(30441), ) g.add_directory_item( g.get_language_string(30368), action="showsTrendingRecent", description=g.get_language_string(30442), ) g.add_directory_item( g.get_language_string(30046), action="showsNew", description=g.get_language_string(30443), ) g.add_directory_item( g.get_language_string(30007), action="genericEndpoint", mediatype="shows", endpoint="played", description=g.get_language_string(30444), ) g.add_directory_item( g.get_language_string(30008), action="genericEndpoint", mediatype="shows", endpoint="watched", description=g.get_language_string(30445), ) g.add_directory_item( g.get_language_string(30009), action="genericEndpoint", mediatype="shows", endpoint="collected", description=g.get_language_string(30446), ) g.add_directory_item( g.get_language_string(30374), action="TrendingLists", mediatype="shows", description=g.get_language_string(30447), ) g.add_directory_item( g.get_language_string(30376), action="PopularLists", mediatype="shows", description=g.get_language_string(30448), ) if not g.get_bool_setting("general.hideUnAired"): g.add_directory_item( g.get_language_string(30010), action="genericEndpoint", mediatype="shows", endpoint="anticipated", description=g.get_language_string(30449), ) g.add_directory_item( g.get_language_string(30011), action="showsUpdated", description=g.get_language_string(30450), ) g.add_directory_item( g.get_language_string(30182), action="showsNetworks", description=g.get_language_string(30451), ) g.add_directory_item( g.get_language_string(30184), action="showYears", description=g.get_language_string(30452), ) g.add_directory_item( g.get_language_string(30042), action="tvGenres", description=g.get_language_string(30453), ) g.add_directory_item( g.get_language_string(30203), action="showsByActor", description=g.get_language_string(30454), ) if not g.get_bool_setting("searchHistory"): g.add_directory_item( g.get_language_string(30013), action="showsSearch", description=g.get_language_string(30394), ) else: g.add_directory_item( g.get_language_string(30013), action="showsSearchHistory", description=g.get_language_string(30396), ) g.close_directory(g.CONTENT_MENU)