예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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)
예제 #6
0
 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)))
예제 #7
0
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)
예제 #8
0
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)
예제 #9
0
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)
예제 #10
0
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)
예제 #11
0
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)
예제 #12
0
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)))
예제 #13
0
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)
예제 #14
0
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)
예제 #15
0
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)
예제 #16
0
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)
예제 #17
0
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)
예제 #18
0
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)
예제 #19
0
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)
예제 #20
0
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)
예제 #21
0
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)
예제 #22
0
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)
예제 #23
0
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)
예제 #24
0
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)
예제 #25
0
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)))
예제 #26
0
 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)))
예제 #27
0
# -*- 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()))
]
예제 #28
0
 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)))
예제 #29
0
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)
예제 #30
0
 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)))