Пример #1
0
    def search_sub(self, query):
        items = []

        # People
        list_item = xbmcgui.ListItem(
            label=format_bold(self.addon.getLocalizedString(30211)))
        url = self.addon_base + PATH_SEARCH + "?" + urllib.parse.urlencode(
            {
                "action": "people",
                "query": query
            })
        items.append((url, list_item, True))

        # Albums
        list_item = xbmcgui.ListItem(
            label=format_bold(self.addon.getLocalizedString(30212)))
        url = self.addon_base + PATH_SEARCH + "?" + urllib.parse.urlencode(
            {
                "action": "albums",
                "query": query
            })
        items.append((url, list_item, True))

        # Playlists
        list_item = xbmcgui.ListItem(
            label=format_bold(self.addon.getLocalizedString(30213)))
        url = self.addon_base + PATH_SEARCH + "?" + urllib.parse.urlencode(
            {
                "action": "playlists",
                "query": query
            })
        items.append((url, list_item, True))

        return items
Пример #2
0
    def user(self, id):
        items = []

        # Albums
        list_item = xbmcgui.ListItem(
            label=format_bold(self.addon.getLocalizedString(30212)))
        url = self.addon_base + "/?" + urllib.parse.urlencode(
            {
                "action": "call",
                "call": "/users/{id}/albums".format(id=id)
            })
        items.append((url, list_item, True))

        # Playlists
        list_item = xbmcgui.ListItem(
            label=format_bold(self.addon.getLocalizedString(30213)))
        url = self.addon_base + "/?" + urllib.parse.urlencode(
            {
                "action": "call",
                "call": "/users/{id}/playlists_without_albums".format(id=id)
            })
        items.append((url, list_item, True))

        # Spotlight
        list_item = xbmcgui.ListItem(
            label=format_bold(self.addon.getLocalizedString(30214)))
        url = self.addon_base + "/?" + urllib.parse.urlencode(
            {
                "action": "call",
                "call": "/users/{id}/spotlight".format(id=id)
            })
        items.append((url, list_item, True))

        return items
Пример #3
0
    def charts(self):
        items = []

        # Top 50
        list_item = xbmcgui.ListItem(
            label=format_bold(self.addon.getLocalizedString(30301)))
        url = self.addon_base + PATH_CHARTS + "?" + urllib.parse.urlencode(
            {"action": "top"})
        items.append((url, list_item, True))

        # Trending
        list_item = xbmcgui.ListItem(
            label=format_bold(self.addon.getLocalizedString(30302)))
        url = self.addon_base + PATH_CHARTS + "?" + urllib.parse.urlencode(
            {"action": "trending"})
        items.append((url, list_item, True))

        return items
Пример #4
0
 def _get_description(data):
     return "{}\n{}{}\n{}: {}\n{}: {}\n{}: {}\n\n{}".format(
         format_bold(data["name"]),
         data["location"] + "\n" if data["location"] else "",
         "\n" + data["short_bio"] + "\n" if data["short_bio"] else "",
         "Followers", data["metadata"]["connections"]["followers"]["total"],
         "Following", data["metadata"]["connections"]["following"]["total"],
         "Likes", data["metadata"]["connections"]["likes"]["total"],
         "\n".join([site["link"] for site in data["websites"]])
         if data["websites"] else "")
Пример #5
0
    def search(self):
        items = []

        # New search
        list_item = xbmcgui.ListItem(
            label=format_bold(self.addon.getLocalizedString(30201)))
        url = self.addon_base + PATH_SEARCH + "?action=new"
        items.append((url, list_item, True))

        # Search history
        history = self.search_history.get()
        for k in sorted(list(history), reverse=True):
            list_item = xbmcgui.ListItem(label=history[k].get("query"))
            url = self.addon_base + PATH_SEARCH + "?" + urllib.parse.urlencode(
                {"query": history[k].get("query")})
            items.append((url, list_item, True))

        return items
Пример #6
0
    def profile_sub(self, user):
        items = []
        authenticated_user = self._get_authenticated_user()

        # Followers
        if user["metadata"]["connections"]["followers"]["total"] > 0:
            list_item = xbmcgui.ListItem(
                label=format_bold(self.addon.getLocalizedString(30701)))
            url = self.addon_base + PATH_ROOT + "?" + urllib.parse.urlencode(
                {
                    "action": "call",
                    "call": user["metadata"]["connections"]["followers"]["uri"]
                })
            items.append((url, list_item, True))

        # Following
        if user["metadata"]["connections"]["following"]["total"] > 0:
            list_item = xbmcgui.ListItem(
                label=format_bold(self.addon.getLocalizedString(30702)))
            url = self.addon_base + PATH_ROOT + "?" + urllib.parse.urlencode(
                {
                    "action": "call",
                    "call": user["metadata"]["connections"]["following"]["uri"]
                })
            items.append((url, list_item, True))

        # Likes
        if user["metadata"]["connections"]["likes"]["total"] > 0:
            list_item = xbmcgui.ListItem(
                label=format_bold(self.addon.getLocalizedString(30703)))
            url = self.addon_base + PATH_ROOT + "?" + urllib.parse.urlencode(
                {
                    "action": "call",
                    "call": user["metadata"]["connections"]["likes"]["uri"]
                })
            items.append((url, list_item, True))

        # Albums
        if user["metadata"]["connections"]["albums"]["total"] > 0:
            list_item = xbmcgui.ListItem(
                label=format_bold(self.addon.getLocalizedString(30704)))
            url = self.addon_base + PATH_ROOT + "?" + urllib.parse.urlencode(
                {
                    "action": "call",
                    "call": user["metadata"]["connections"]["albums"]["uri"]
                })
            items.append((url, list_item, True))

        # Channels
        if user["metadata"]["connections"]["channels"]["total"] > 0:
            list_item = xbmcgui.ListItem(
                label=format_bold(self.addon.getLocalizedString(30212)))
            url = self.addon_base + PATH_ROOT + "?" + urllib.parse.urlencode(
                {
                    "action": "call",
                    "call": user["metadata"]["connections"]["channels"]["uri"]
                })
            items.append((url, list_item, True))

        # Groups
        if user["metadata"]["connections"]["groups"]["total"] > 0:
            list_item = xbmcgui.ListItem(
                label=format_bold(self.addon.getLocalizedString(30213)))
            url = self.addon_base + PATH_ROOT + "?" + urllib.parse.urlencode(
                {
                    "action": "call",
                    "call": user["metadata"]["connections"]["groups"]["uri"]
                })
            items.append((url, list_item, True))

        # Watchlist
        if isinstance(authenticated_user, dict) and user["uri"] == authenticated_user["uri"] and \
           authenticated_user["metadata"]["connections"]["watchlater"]["total"] > 0:
            list_item = xbmcgui.ListItem(
                label=format_bold(self.addon.getLocalizedString(30705)))
            url = self.addon_base + PATH_ROOT + "?" + urllib.parse.urlencode({
                "action":
                "call",
                "call":
                authenticated_user["metadata"]["connections"]["watchlater"]
                ["uri"]
            })
            items.append((url, list_item, True))

        return items
Пример #7
0
def run():
    url = urllib.parse.urlparse(sys.argv[0])
    path = url.path
    handle = int(sys.argv[1])
    args = urllib.parse.parse_qs(sys.argv[2][1:])
    xbmcplugin.setContent(handle, "videos")

    if path == PATH_ROOT:
        action = args.get("action", None)
        if action is None:
            items = listItems.root()
            xbmcplugin.addDirectoryItems(handle, items, len(items))
            xbmcplugin.endOfDirectory(handle)
        elif "call" in action:
            collection = listItems.from_collection(
                api.call(args.get("call")[0]))
            xbmcplugin.addDirectoryItems(handle, collection, len(collection))
            xbmcplugin.endOfDirectory(handle)
        elif "settings" in action:
            addon.openSettings()
        else:
            xbmc.log(addon_id + ": Invalid root action", xbmc.LOGERROR)

    elif path == PATH_CATEGORIES:
        collection = listItems.from_collection(api.categories())
        xbmcplugin.addDirectoryItems(handle, collection, len(collection))
        xbmcplugin.endOfDirectory(handle)

    elif path == PATH_TRENDING:
        collection = listItems.from_collection(api.trending())
        xbmcplugin.addDirectoryItems(handle, collection, len(collection))
        xbmcplugin.endOfDirectory(handle)

    elif path == PATH_FEATURED:
        action = args.get("action", None)
        if action is None:
            items = listItems.featured()
            xbmcplugin.addDirectoryItems(handle, items, len(items))
            xbmcplugin.endOfDirectory(handle)
        elif "channel" in action:
            channel_id = args.get("id", [""])[0]
            collection = listItems.from_collection(api.channel(channel_id))
            xbmcplugin.addDirectoryItems(handle, collection, len(collection))
            xbmcplugin.endOfDirectory(handle)
        else:
            xbmc.log(addon_id + ": Invalid featured action", xbmc.LOGERROR)

    elif path == PATH_PLAY:
        # Public params
        video_id = args.get("video_id", [None])[0]

        # Private params
        media_url = args.get("uri", [None])[0]
        texttracks = args.get("texttracks", [False])[0]

        # Settings
        fetch_subtitles = True if settings.get(
            "video.subtitles") == "true" else False

        if media_url:
            resolved_url = api.resolve_media_url(media_url)
            item = xbmcgui.ListItem(path=resolved_url)
            if fetch_subtitles and texttracks:
                item = add_subtitles(item, texttracks)
            xbmcplugin.setResolvedUrl(handle, succeeded=True, listitem=item)
        elif video_id:
            try:
                password = None
                collection = listItems.from_collection(
                    api.resolve_id(video_id, password))
            except PasswordRequiredException:
                try:
                    password = xbmcgui.Dialog().input(
                        addon.getLocalizedString(30904))
                    collection = listItems.from_collection(
                        api.resolve_id(video_id, password))
                except WrongPasswordException:
                    return xbmcgui.Dialog().notification(
                        addon.getLocalizedString(30905),
                        addon.getLocalizedString(30906),
                        xbmcgui.NOTIFICATION_ERROR)

            playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
            resolve_list_item(handle, collection[0][1], password,
                              fetch_subtitles)
            playlist.add(url=collection[0][0], listitem=collection[0][1])
        else:
            xbmc.log(addon_id + ": Invalid play param", xbmc.LOGERROR)

    elif path == PATH_SEARCH:
        action = args.get("action", None)
        query = args.get("query", [""])[0]

        if action and "remove" in action:
            search_history.remove(query)
            xbmc.executebuiltin("Container.Refresh")
        elif action and "clear" in action:
            search_history.clear()
            xbmc.executebuiltin("Container.Refresh")

        if query:
            if action is None:
                search(handle, query)
            elif "people" in action:
                xbmcplugin.setContent(handle, "artists")
                collection = listItems.from_collection(
                    api.search(query, "users"))
                xbmcplugin.addDirectoryItems(handle, collection,
                                             len(collection))
                xbmcplugin.endOfDirectory(handle)
            elif "channels" in action:
                xbmcplugin.setContent(handle, "albums")
                collection = listItems.from_collection(
                    api.search(query, "channels"))
                xbmcplugin.addDirectoryItems(handle, collection,
                                             len(collection))
                xbmcplugin.endOfDirectory(handle)
            elif "groups" in action:
                xbmcplugin.setContent(handle, "albums")
                collection = listItems.from_collection(
                    api.search(query, "groups"))
                xbmcplugin.addDirectoryItems(handle, collection,
                                             len(collection))
                xbmcplugin.endOfDirectory(handle)
            else:
                xbmc.log(addon_id + ": Invalid search action", xbmc.LOGERROR)
        else:
            if action is None:
                # Search root
                items = listItems.search()
                xbmcplugin.addDirectoryItems(handle, items, len(items))
                xbmcplugin.endOfDirectory(handle)
            elif "new" in action:
                # New search
                query = xbmcgui.Dialog().input(addon.getLocalizedString(30101))
                search_history.add(query)
                search(handle, query)
            else:
                xbmc.log(addon_id + ": Invalid search action", xbmc.LOGERROR)

    elif path == PATH_AUTH_LOGIN:
        logout()  # Make sure there is no cached access-token

        device_code_response = api.oauth_device()
        activate_link = device_code_response["activate_link"]
        device_code = device_code_response["device_code"]
        user_code = device_code_response["user_code"]
        xbmcgui.Dialog().ok(
            heading=addon.getLocalizedString(30151),
            message="{}\n{}\n{}\n{}".format(
                addon.getLocalizedString(30152).format(
                    format_bold(activate_link)),
                addon.getLocalizedString(30153).format(format_bold(user_code)),
                addon.getLocalizedString(30154).format(format_bold(user_code)),
                addon.getLocalizedString(30155).format(format_bold("OK")),
            ),
        )

        user_name = api.oauth_device_authorize(user_code, device_code)
        xbmcgui.Dialog().ok(
            heading=addon.getLocalizedString(30151),
            message=addon.getLocalizedString(30156).format(user_name),
        )
        xbmc.executebuiltin("Container.Refresh")

    elif path == PATH_AUTH_LOGOUT:
        logout()
        xbmc.executebuiltin("Container.Refresh")

    elif path == PATH_PROFILE:
        uri = args.get("uri", [""])[0]

        if uri:
            user = api.user(uri)
            profile_options = listItems.profile_sub(user)
            collection = listItems.from_collection(
                api.call("{}/videos".format(uri)))
            xbmcplugin.addDirectoryItems(handle, profile_options)
            xbmcplugin.addDirectoryItems(handle, collection, len(collection))
            xbmcplugin.endOfDirectory(handle)
        else:
            xbmc.log(addon_id + ": Invalid profile uri", xbmc.LOGERROR)

    elif path == PATH_SETTINGS_CACHE_CLEAR:
        vfs_cache.destroy()
        xbmcgui.Dialog().ok("Vimeo", addon.getLocalizedString(30501))

    else:
        xbmc.log(addon_id + ": Path not found", xbmc.LOGERROR)