def bookmarks(folder_id=None, page=None): if folder_id is None: li = ExtendedListItem("Создать папку") link = get_internal_link("create_bookmarks_folder") xbmcplugin.addDirectoryItem(request.handle, link, li, False) response = KinoPubClient("bookmarks").get() for folder in response["items"]: li = ExtendedListItem(folder["title"].encode("utf-8"), properties={ "folder-id": str(folder["id"]).encode("utf-8"), "views": str(folder["views"]).encode("utf-8") }) remove_link = get_internal_link("remove_bookmarks_folder", folder_id=folder["id"]) li.addContextMenuItems([ ("Удалить", "Container.Update({})".format(remove_link)) ]) link = get_internal_link("bookmarks", folder_id=folder["id"]) xbmcplugin.addDirectoryItem(request.handle, link, li, True) xbmcplugin.endOfDirectory(request.handle) else: # Show content of the folder response = KinoPubClient( "bookmarks/{}".format(folder_id)).get(data={"page": page}) xbmcplugin.setContent(request.handle, "videos") show_items(response["items"]) show_pagination(response["pagination"], "bookmarks", folder_id=folder_id)
def watching_movies(): xbmcplugin.setContent(request.handle, "movies") for item in KinoPubClient("watching/movies").get()["items"]: li = ExtendedListItem( item["title"].encode("utf-8"), poster=item["posters"]["big"], properties={"id": item["id"]}, video_info={"mediatype": mediatype_map[item["type"]]}, addContextMenuItems=True) if item["subtype"] == "multi": link = get_internal_link("view_episodes", id=item["id"]) isdir = True else: response = KinoPubClient("items/{}".format(item["id"])).get() watching_info = KinoPubClient("watching").get( data={"id": item["id"]})["item"]["videos"] watching_info = watching_info[0] video_info = extract_video_info( response["item"], { "time": watching_info["time"], "duration": watching_info["duration"], "playcount": watching_info["status"], }) li.setInfo("video", video_info) li.setProperty("isPlayable", "true") li.setResumeTime(watching_info["time"]) link = get_internal_link("play", id=item["id"], title=item["title"].encode("utf-8"), poster=item["posters"]["big"], video_info=json.dumps(video_info)) isdir = False xbmcplugin.addDirectoryItem(request.handle, link, li, isdir) xbmcplugin.endOfDirectory(request.handle)
def add_default_headings(type=None, fmt="slp"): # fmt - show format # s - show search # l - show last # p - show popular # s - show alphabet sorting # g - show genres folder if "s" in fmt: li = xbmcgui.ListItem("[COLOR FFFFF000]Поиск[/COLOR]") link = get_internal_link("search", type=type) xbmcplugin.addDirectoryItem(request.handle, link, li, False) if "l" in fmt: li = xbmcgui.ListItem("[COLOR FFFFF000]Последние[/COLOR]") link = get_internal_link("items", type=type) xbmcplugin.addDirectoryItem(request.handle, link, li, True) if "p" in fmt: li = xbmcgui.ListItem("[COLOR FFFFF000]Популярные[/COLOR]") link = get_internal_link("items", type=type, sort="-rating") xbmcplugin.addDirectoryItem(request.handle, link, li, True) if "a" in fmt: li = xbmcgui.ListItem("[COLOR FFFFF000]По алфавиту[/COLOR]") link = get_internal_link("alphabet", type=type) xbmcplugin.addDirectoryItem(request.handle, link, li, True) if "g" in fmt: li = xbmcgui.ListItem("[COLOR FFFFF000]Жанры[/COLOR]") link = get_internal_link("genres", type=type) xbmcplugin.addDirectoryItem(request.handle, link, li, True)
def show_items(items, add_indexes=False): xbmc.log("{} : show_items. Total items: {}".format(__plugin__, str(len(items)))) # Fill list with items for index, item in enumerate(items, 1): title = item["title"].encode("utf-8") title = "{}. {}".format(index, title) if add_indexes else title li = ExtendedListItem(title, poster=item["posters"]["big"], properties={"id": item["id"]}) if "in_watchlist" in item: li.setProperty("in_watchlist", str(int(item["in_watchlist"]))) video_info = extract_video_info( item, { "trailer": trailer_link(item), "mediatype": mediatype_map[item["type"]] }) # If not serials or multiseries movie, create playable item if item["type"] not in ["serial", "docuserial", "tvshow" ] and not item["subtype"]: watching_info = KinoPubClient("watching").get( data={"id": item["id"]})["item"]["videos"][0] video_info.update({ "time": watching_info["time"], "duration": watching_info["duration"], "playcount": watching_info["status"], }) video_info = { "time": watching_info["time"], "duration": watching_info["duration"], "playcount": watching_info["status"], } link = get_internal_link("play", id=item["id"], title=title, video_info=json.dumps(video_info), poster=item["posters"]["big"]) li.setProperty("isPlayable", "true") li.setResumeTime(watching_info["time"], watching_info["duration"]) isdir = False elif item["subtype"] == "multi": watching_info = KinoPubClient("watching").get( data={"id": item["id"]})["item"] li.setProperty("subtype", "multi") video_info.update({"playcount": watching_info["status"]}) link = get_internal_link("view_episodes", id=item["id"]) isdir = True else: link = get_internal_link("view_seasons", id=item["id"]) isdir = True li.setInfo("video", video_info) li.addPredefinedContextMenuItems() xbmcplugin.addDirectoryItem(request.handle, link, li, isdir)
def episodes(id): item = KinoPubClient("items/{}".format(id)).get()["item"] watching_info = KinoPubClient("watching").get(data={"id": id})["item"] xbmcplugin.setContent(request.handle, "episodes") for video in item["videos"]: watching_episode = watching_info["videos"][video["number"] - 1] episode_title = "e{:02d}".format(video["number"]) if video["title"]: episode_title = "{} | {}".format(episode_title, video["title"].encode("utf-8")) info = extract_video_info( item, { "episode": video["number"], "time": watching_episode["time"], "duration": watching_episode["duration"], "playcount": video["watched"], "mediatype": "episode" }) li = ExtendedListItem(episode_title, thumbnailImage=video["thumbnail"], video_info=info, poster=item["posters"]["big"], properties={ "id": item["id"], "isPlayable": "true" }, addContextMenuItems=True) link = get_internal_link("play", id=item["id"], title=episode_title, video_data=json.dumps(video), video_info=json.dumps(info), poster=item["posters"]["big"]) xbmcplugin.addDirectoryItem(request.handle, link, li, False) xbmcplugin.endOfDirectory(request.handle)
def _addBookmarksContextMenuItem(self, menu_items): if self.getVideoInfoTag().getMediaType() == "season": return item_id = self.getProperty("id") label = u"Изменить закладки" link = get_internal_link("edit_bookmarks", item_id=item_id) menu_items.append((label, "Container.Update({})".format(link)))
def episodes(id): response = KinoPubClient("items/{}".format(id)).get() item = response["item"] xbmcplugin.setContent(request.handle, "episodes") for video_number, video in enumerate(item["videos"], 1): episode_title = "e{:02d}".format(video_number) if video["title"]: episode_title = "{} | {}".format(episode_title, video["title"].encode("utf-8")) li = xbmcgui.ListItem(episode_title, iconImage=video["thumbnail"], thumbnailImage=video["thumbnail"]) li.setInfo( "Video", video_info( item, { "season": 1, "episode": video_number, "playcount": video["watched"], "mediatype": "episode" })) li.setArt({"poster": item["posters"]["big"]}) li.setProperty("id", str(item["id"])) li.setProperty("isPlayable", "true") qp = { "id": item["id"], "title": episode_title, "episode_number": video_number, "video_data": json.dumps(video) } link = get_internal_link("play", **qp) context_menu.add_items(li) xbmcplugin.addDirectoryItem(request.handle, link, li, False) xbmcplugin.endOfDirectory(request.handle)
def bookmarks(folder_id=None, page=None): if folder_id is None: response = KinoPubClient("bookmarks").get() for folder in response["items"]: li = xbmcgui.ListItem(folder["title"].encode("utf-8")) li.setProperty("folder-id", str(folder["id"]).encode("utf-8")) li.setProperty("views", str(folder["views"]).encode("utf-8")) link = get_internal_link("bookmarks", folder_id=folder["id"]) xbmcplugin.addDirectoryItem(request.handle, link, li, True) xbmcplugin.endOfDirectory(request.handle) else: # Show content of the folder if page is None: response = KinoPubClient("bookmarks/view").get( data={"folder": folder_id}) else: response = KinoPubClient("bookmarks/view").get(data={ "folder": folder_id, "page": page }) show_items(response["items"]) show_pagination(response["pagination"], "bookmarks", folder_id=folder_id) xbmcplugin.endOfDirectory(request.handle)
def seasons(id): item = KinoPubClient("items/{}".format(id)).get()["item"] watching_info = KinoPubClient("watching").get( data={"id": item["id"]})["item"] selectedSeason = False xbmcplugin.setContent(request.handle, "tvshows") for season in item["seasons"]: season_title = "Сезон {}".format(season["number"]) watching_season = watching_info["seasons"][season["number"] - 1] li = ExtendedListItem(season_title, video_info=extract_video_info( item, { "season": season["number"], "playcount": watching_season["status"], "mediatype": "season" }), poster=item["posters"]["big"], properties={"id": item["id"]}, addContextMenuItems=True) if watching_season["status"] < 1 and not selectedSeason: selectedSeason = True li.select(selectedSeason) link = get_internal_link("view_season_episodes", id=id, season_number=season["number"]) xbmcplugin.addDirectoryItem(request.handle, link, li, True) xbmcplugin.endOfDirectory(request.handle)
def genres(type): response = KinoPubClient("genres").get(data={"type": type}) add_default_headings(type) for genre in response["items"]: li = ExtendedListItem(genre["title"].encode("utf-8")) link = get_internal_link("items", type=type, genre=genre["id"]) xbmcplugin.addDirectoryItem(request.handle, link, li, True) xbmcplugin.endOfDirectory(request.handle)
def show_pagination(pagination, action, **kwargs): # Add "next page" button if pagination and (int(pagination["current"]) + 1 <= int( pagination["total"])): kwargs["page"] = int(pagination["current"]) + 1 li = ExtendedListItem("[COLOR FFFFF000]Вперёд[/COLOR]") link = get_internal_link(action, **kwargs) xbmcplugin.addDirectoryItem(request.handle, link, li, True) xbmcplugin.endOfDirectory(request.handle)
def _toggle_watchlist(list_item, menu_items): in_watchlist = list_item.getProperty("in_watchlist") if in_watchlist == "": return label = u"Не буду смотреть" if int(in_watchlist) else u"Буду смотреть" link = get_internal_link("toggle_watchlist", id=list_item.getProperty("id"), added=not int(in_watchlist)) menu_items.append((label, "Container.Update({})".format(link)))
def season_episodes(id, season_number): item = KinoPubClient("items/{}".format(id)).get()["item"] watching_info = KinoPubClient("watching").get(data={"id": id})["item"] season_number = int(season_number) season = item["seasons"][season_number - 1] watching_season = watching_info["seasons"][season_number - 1] watching_episode_numbers = [ episode["number"] for episode in watching_season["episodes"] ] selectedEpisode = False xbmcplugin.setContent(request.handle, "episodes") playback_data = {} for episode in season["episodes"]: # In tvshow season could be a case when some episodes are not available, but episode numbers # in response payload are set correctly. if episode["number"] not in watching_episode_numbers: continue watching_episode = watching_season["episodes"][episode["number"] - 1] episode_title = "s{:02d}e{:02d}".format(season_number, episode["number"]) if episode["title"]: episode_title = "{} | {}".format(episode_title, episode["title"].encode("utf-8")) info = extract_video_info( item, { "season": season_number, "episode": episode["number"], "tvshowtitle": episode["title"], "time": watching_episode["time"], "duration": watching_episode["duration"], "playcount": watching_episode["status"], "mediatype": "episode" }) li = ExtendedListItem(episode_title, thumbnailImage=episode["thumbnail"], poster=item["posters"]["big"], video_info=info, properties={ "id": item["id"], "isPlayable": "true" }, addContextMenuItems=True) if watching_episode["status"] < 1 and not selectedEpisode: selectedEpisode = True li.select(selectedEpisode) link = get_internal_link("play", id=item["id"], index=episode["number"]) playback_data[episode["number"]] = { "video_data": episode, "video_info": info, "poster": item["posters"]["big"], "title": episode_title } xbmcplugin.addDirectoryItem(request.handle, link, li, False) set_window_property(playback_data) xbmcplugin.endOfDirectory(request.handle, cacheToDisc=False)
def collections(sort=None): handle = request.handle response = KinoPubClient("collections/index").get(data={"sort": sort}) xbmcplugin.setContent(handle, "movies") li = xbmcgui.ListItem("[COLOR FFFFF000]Последние[/COLOR]") link = get_internal_link("collections", sort="-created") xbmcplugin.addDirectoryItem(handle, link, li, True) li = xbmcgui.ListItem("[COLOR FFFFF000]Просматриваемые[/COLOR]") link = get_internal_link("collections", sort="-watchers") xbmcplugin.addDirectoryItem(handle, link, li, True) li = xbmcgui.ListItem("[COLOR FFFFF000]Популярные[/COLOR]") link = get_internal_link("collections", sort="-views") xbmcplugin.addDirectoryItem(handle, link, li, True) for item in response["items"]: li = xbmcgui.ListItem(item["title"].encode("utf-8")) li.setThumbnailImage(item["posters"]["medium"]) link = get_internal_link("collection_view", id=item["id"]) xbmcplugin.addDirectoryItem(handle, link, li, True) show_pagination(response["pagination"], "collections", sort=sort) xbmcplugin.endOfDirectory(handle)
def collections(sort=None, page=None): response = KinoPubClient("collections/index").get(data={ "sort": sort, "page": page }) xbmcplugin.setContent(request.handle, "movies") li = ExtendedListItem("Последние") link = get_internal_link("collections", sort="-created") xbmcplugin.addDirectoryItem(request.handle, link, li, True) li = ExtendedListItem("Просматриваемые") link = get_internal_link("collections", sort="-watchers") xbmcplugin.addDirectoryItem(request.handle, link, li, True) li = ExtendedListItem("Популярные") link = get_internal_link("collections", sort="-views") xbmcplugin.addDirectoryItem(request.handle, link, li, True) for item in response["items"]: li = ExtendedListItem(item["title"].encode("utf-8"), thumbnailImage=item["posters"]["medium"]) link = get_internal_link("collection_view", id=item["id"]) xbmcplugin.addDirectoryItem(request.handle, link, li, True) show_pagination(response["pagination"], "collections", sort=sort)
def alphabet(type): alpha = [ "А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ы,Э,Ю,Я", "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" ] for al in alpha: letters = al.split(",") for letter in letters: li = ExtendedListItem(letter) link = get_internal_link("items", type=type, letter=letter) xbmcplugin.addDirectoryItem(request.handle, link, li, True) xbmcplugin.endOfDirectory(request.handle)
def add_default_headings(type=None, fmt="slp"): # fmt - show format # s - show search # l - show last # p - show popular # s - show alphabet sorting # g - show genres folder # h - show hot if "s" in fmt: li = ExtendedListItem("Поиск") link = get_internal_link("search", type=type) xbmcplugin.addDirectoryItem(request.handle, link, li, False) if "l" in fmt: li = ExtendedListItem("Последние") link = get_internal_link("items", type=type) xbmcplugin.addDirectoryItem(request.handle, link, li, True) if "p" in fmt: li = ExtendedListItem("Популярные") link = get_internal_link("items", type=type, shortcut="/popular") xbmcplugin.addDirectoryItem(request.handle, link, li, True) if "a" in fmt: li = ExtendedListItem("По алфавиту") link = get_internal_link("alphabet", type=type) xbmcplugin.addDirectoryItem(request.handle, link, li, True) if "g" in fmt: li = ExtendedListItem("Жанры") link = get_internal_link("genres", type=type) xbmcplugin.addDirectoryItem(request.handle, link, li, True) if "h" in fmt: li = ExtendedListItem("Горячие") link = get_internal_link("items", type=type, shortcut="/hot") xbmcplugin.addDirectoryItem(request.handle, link, li, True)
def index(): """Main screen - show type list""" if not auth.access_token: li = xbmcgui.ListItem("Активировать устройство") xbmcplugin.addDirectoryItem(request.handle, get_internal_link("login"), li, False) xbmcplugin.endOfDirectory(request.handle) else: response = KinoPubClient("types").get() xbmc.executebuiltin("Container.SetViewMode(0)") add_default_headings() li = xbmcgui.ListItem("[COLOR FFFFF000]ТВ[/COLOR]") xbmcplugin.addDirectoryItem(request.handle, get_internal_link("tv"), li, True) li = xbmcgui.ListItem("[COLOR FFFFF000]Закладки[/COLOR]") xbmcplugin.addDirectoryItem(request.handle, get_internal_link("bookmarks"), li, True) li = xbmcgui.ListItem("[COLOR FFFFF000]Я смотрю[/COLOR]") xbmcplugin.addDirectoryItem(request.handle, get_internal_link("watching"), li, True) li = xbmcgui.ListItem("[COLOR FFFFF000]Подборки[/COLOR]") xbmcplugin.addDirectoryItem(request.handle, get_internal_link("collections"), li, True) for i in response["items"]: li = xbmcgui.ListItem(i["title"].encode("utf-8")) link = get_internal_link("item_index", type=i["id"]) xbmcplugin.addDirectoryItem(request.handle, link, li, True) xbmcplugin.endOfDirectory(request.handle)
def index(): """Main screen - show type list""" if not auth.access_token: li = ExtendedListItem("Активировать устройство") xbmcplugin.addDirectoryItem(request.handle, get_internal_link("login"), li, False) else: response = KinoPubClient("types").get() li = ExtendedListItem("Профиль") xbmcplugin.addDirectoryItem(request.handle, get_internal_link("profile"), li, False) for menu_item in main_menu_items: if menu_item.is_displayed: li = ExtendedListItem(menu_item.title) xbmcplugin.addDirectoryItem(request.handle, menu_item.link, li, menu_item.is_dir) for i in response["items"]: if __settings__.getSetting("show_{}".format(i["id"])) != "false": li = ExtendedListItem(i["title"].encode("utf-8")) link = get_internal_link("item_index", type=i["id"]) xbmcplugin.addDirectoryItem(request.handle, link, li, True) xbmcplugin.endOfDirectory(request.handle)
def show_items(items, add_indexes=False): xbmc.log("{} : show_items. Total items: {}".format(__plugin__, str(len(items)))) xbmcplugin.setContent(request.handle, "movies") # Fill list with items for index, item in enumerate(items, 1): title = item["title"].encode("utf-8") li = xbmcgui.ListItem(title) if add_indexes: li.setLabel("{}. {}".format(index, li.getLabel())) li.setArt({"poster": item["posters"]["big"]}) li.setProperty("id", str(item["id"])) if "in_watchlist" in item: li.setProperty("in_watchlist", str(int(item["in_watchlist"]))) extra_info = { "trailer": trailer_link(item), "mediatype": mediatype_map[item["type"]] } # If not serials or multiseries movie, create playable item if item["type"] not in ["serial", "docuserial", "tvshow" ] and not item["subtype"]: watched = KinoPubClient("watching").get( data={"id": item["id"]})["item"] extra_info.update({"playcount": watched["status"]}) link = get_internal_link("play", id=item["id"], title=title) li.setProperty("isPlayable", "true") isdir = False elif item["subtype"] == "multi": link = get_internal_link("view_episodes", id=item["id"]) isdir = True else: link = get_internal_link("view_seasons", id=item["id"]) isdir = True li.setInfo("Video", video_info(item, extra_info)) context_menu.add_items(li) xbmcplugin.addDirectoryItem(request.handle, link, li, isdir)
def watching(): response = KinoPubClient("watching/serials").get(data={"subscribed": 1}) xbmcplugin.setContent(request.handle, "tvshows") for item in response["items"]: li = xbmcgui.ListItem("{} : [COLOR FFFFF000]+{}[/COLOR]".format( item["title"].encode("utf-8"), str(item["new"]))) li.setLabel2(str(item["new"])) li.setArt({"poster": item["posters"]["big"]}) li.setProperty("id", str(item["id"])) li.setProperty("in_watchlist", "1") li.setInfo("Video", {"mediatype": mediatype_map[item["type"]]}) link = get_internal_link("view_seasons", id=item["id"]) context_menu.add_items(li) xbmcplugin.addDirectoryItem(request.handle, link, li, True) xbmcplugin.endOfDirectory(request.handle)
def season_episodes(id, season_number): response = KinoPubClient("items/{}".format(id)).get() item = response["item"] watching_info = KinoPubClient("watching").get( data={"id": item["id"]})["item"] season_number = int(season_number) season = item["seasons"][season_number - 1] watching_season = watching_info["seasons"][season_number - 1] selectedEpisode = False xbmcplugin.setContent(request.handle, "episodes") for episode in season["episodes"]: episode_title = "s{:02d}e{:02d}".format(season_number, episode["number"]) if episode["title"]: episode_title = "{} | {}".format(episode_title, episode["title"].encode("utf-8")) li = xbmcgui.ListItem(episode_title, iconImage=episode["thumbnail"], thumbnailImage=episode["thumbnail"]) li.setInfo( "Video", video_info( item, { "season": season_number, "episode": episode["number"], "duration": episode["duration"], "playcount": episode["watched"], "mediatype": "episode" })) li.setArt({"poster": item["posters"]["big"]}) li.setProperty("id", str(item["id"])) li.setProperty("isPlayable", "true") status = watching_season["episodes"][episode["number"] - 1]["status"] if status < 1 and not selectedEpisode: selectedEpisode = True li.select(selectedEpisode) qp = { "id": item["id"], "title": episode_title, "season_number": season["number"], "episode_number": episode["number"], "video_data": json.dumps(episode) } link = get_internal_link("play", **qp) context_menu.add_items(li) xbmcplugin.addDirectoryItem(request.handle, link, li, False) xbmcplugin.endOfDirectory(request.handle)
def watching(): response = KinoPubClient("watching/serials").get(data={"subscribed": 1}) xbmcplugin.setContent(request.handle, "tvshows") for item in response["items"]: title = "{} : [COLOR FFFFF000]+{}[/COLOR]".format( item["title"].encode("utf-8"), str(item["new"])) li = ExtendedListItem( title, str(item["new"]), poster=item["posters"]["big"], properties={ "id": str(item["id"]), "in_watchlist": "1" }, video_info={"mediatype": mediatype_map[item["type"]]}, addContextMenuItems=True) link = get_internal_link("view_seasons", id=item["id"]) xbmcplugin.addDirectoryItem(request.handle, link, li, True) xbmcplugin.endOfDirectory(request.handle)
def seasons(id): response = KinoPubClient("items/{}".format(id)).get() item = response["item"] watching_info = KinoPubClient("watching").get( data={"id": item["id"]})["item"] selectedSeason = False xbmcplugin.setContent(request.handle, "tvshows") for season in item["seasons"]: season_title = "Сезон {}".format(season["number"]) watching_season = watching_info["seasons"][season["number"] - 1] li = xbmcgui.ListItem(season_title) li.setInfo("Video", video_info(item, {"season": season["number"]})) li.setArt({"poster": item["posters"]["big"]}) if watching_season["status"] < 1 and not selectedSeason: selectedSeason = True li.select(selectedSeason) qp = {"id": id, "season_number": season["number"]} link = get_internal_link("view_season_episodes", **qp) xbmcplugin.addDirectoryItem(request.handle, link, li, True) xbmcplugin.endOfDirectory(request.handle)
def _toggle_watched(list_item, menu_items): item_id = list_item.getProperty("id") season_number = list_item.getVideoInfoTag().getSeason() episode_number = list_item.getVideoInfoTag().getEpisode() watched = int(list_item.getVideoInfoTag().getPlayCount()) > 0 label = u"Отметить как непросмотренное" if watched else u"Отметить как просмотренное" if episode_number != -1 and season_number != -1: kwargs = { "id": item_id, "season": season_number, "video": episode_number } elif season_number != -1: kwargs = {"id": item_id, "season": season_number} elif list_item.getVideoInfoTag().getMediaType() == "tvshow": return else: kwargs = {"id": item_id} link = get_internal_link("toggle_watched", **kwargs) menu_items.append((label, "Container.Update({})".format(link)))
def _addWatchedContextMenuItem(self, menu_items): item_id = self.getProperty("id") season_number = self.getVideoInfoTag().getSeason() video_number = self.getVideoInfoTag().getEpisode() video_number = video_number if video_number != -1 else 1 watched = int(self.getVideoInfoTag().getPlayCount()) > 0 label = u"Отметить как непросмотренное" if watched else u"Отметить как просмотренное" if self.getVideoInfoTag().getMediaType() == "tvshow": return elif self.getVideoInfoTag().getMediaType() == "season": kwargs = {"id": item_id, "season": season_number} elif self.getProperty("subtype") == "multi": kwargs = {"id": item_id} elif season_number != -1: kwargs = { "id": item_id, "season": season_number, "video": video_number } else: kwargs = {"id": item_id, "video": video_number} link = get_internal_link("toggle_watched", **kwargs) menu_items.append((label, "Container.Update({})".format(link)))
# -*- coding: utf-8 -*- from collections import namedtuple from addonutils import get_internal_link from data import __settings__ MainMenuItem = namedtuple("MainMenuItem", ["title", "link", "is_dir", "is_displayed"]) main_menu_items = [ MainMenuItem("Поиск", get_internal_link("search", type=None), False, eval(__settings__.getSetting("show_search").title())), MainMenuItem("Закладки", get_internal_link("bookmarks"), True, True), MainMenuItem("Я смотрю", get_internal_link("watching"), True, True), MainMenuItem("Недосмотренные", get_internal_link("watching_movies"), True, True), MainMenuItem("Последние", get_internal_link("items", type=None), True, eval(__settings__.getSetting("show_last").title())), MainMenuItem("Популярные", get_internal_link("items", type=None, shortcut="/popular"), True, eval(__settings__.getSetting("show_popular").title())), MainMenuItem("Горячие", get_internal_link("items", type=None, shortcut="/hot"), True, eval(__settings__.getSetting("show_hot").title())), MainMenuItem("ТВ", get_internal_link("tv"), True, eval(__settings__.getSetting("show_tv").title())), MainMenuItem("Подборки", get_internal_link("collections"), True, eval(__settings__.getSetting("show_collections").title())) ]
def _addSimilarContextMenuItem(self, menu_items): item_id = self.getProperty("id") title = self.getLabel() label = u"Похожие фильмы" link = get_internal_link("similar", item_id=item_id, title=title) menu_items.append((label, "Container.Update({})".format(link)))
def season_episodes(id, season_number): item = KinoPubClient("items/{}".format(id)).get()["item"] watching_info = KinoPubClient("watching").get(data={"id": id})["item"] season_number = int(season_number) season = item["seasons"][season_number - 1] watching_season = watching_info["seasons"][season_number - 1] watching_episode_numbers = [ episode["number"] for episode in watching_season["episodes"] ] selectedEpisode = False xbmcplugin.setContent(request.handle, "episodes") for episode in season["episodes"]: # In tvshow season could be a case when some episodes are not available, but episode numbers # in response payload are set correctly. if episode["number"] not in watching_episode_numbers: continue watching_episode = watching_season["episodes"][episode["number"] - 1] episode_title = "s{:02d}e{:02d}".format(season_number, episode["number"]) if episode["title"]: episode_title = "{} | {}".format(episode_title, episode["title"].encode("utf-8")) info = extract_video_info( item, { "season": season_number, "episode": episode["number"], "time": watching_episode["time"], "duration": watching_episode["duration"], "playcount": watching_episode["status"], "mediatype": "episode", "title": episode["title"] }) li = ExtendedListItem(episode_title, thumbnailImage=episode["thumbnail"], poster=item["posters"]["big"], video_info=info, properties={ "id": item["id"], "isPlayable": "true" }, addContextMenuItems=True) if watching_episode["status"] < 1 and not selectedEpisode: selectedEpisode = True li.select(selectedEpisode) info = { "season": season_number, "episode": episode["number"], "time": watching_episode["time"], "duration": watching_episode["duration"], "playcount": watching_episode["status"], "mediatype": "episode" } video_data = {'subtitles': episode.get('subtitles', []), 'files': []} url = get_mlink(episode, quality=__settings__.getSetting("video_quality"), stream_type=__settings__.getSetting("stream_type"), ask_quality=__settings__.getSetting("ask_quality")) link = get_internal_link( "play", id=item["id"], title=episode_title, video_info=json.dumps(info), video_data=json.dumps(video_data), poster=item["posters"]["big"], url=url, ) xbmcplugin.addDirectoryItem(request.handle, link, li, False) xbmcplugin.endOfDirectory(request.handle)
def _addCommentsContextMenuItem(self, menu_items): item_id = self.getProperty("id") label = u"Комментарии KinoPub" link = get_internal_link("comments", item_id=item_id) menu_items.append((label, "Container.Update({})".format(link)))