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
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
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
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 "")
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
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
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)