def item(self, url, **kwargs): folder = _folders_schema_[self.type][self.style] label = folder["id"] if isinstance(label, int): label = localizedString(label) action = folder.get("action", self.type) kwargs.update(folder.get("kwargs", {})) plot = folder.get("plot", label) if isinstance(plot, int): plot = localizedString(plot) return ListItem( label, buildUrl(url, action=action, **kwargs), isFolder=True, infos={"video": {"title": label, "plot": plot}})
class BaseVideo(InvidiousItem): __json__ = {"videoThumbnails": VideoThumbnails} __date__ = {"published"} _repr_ = "BaseVideo({0.videoId})" _infos_ = {"mediatype": "video"} _plot_ = localizedString(30056) _menus_ = [ (30031, "Container.Update(plugin://{addonId}/?action=channel&authorId={authorId})"), #(30031, "RunScript({addonId},goToChannel,{authorId})"), (30032, "RunScript({addonId},addChannelToFavourites,{authorId})"), (30033, "PlayMedia(plugin://plugin.video.youtube/play/?incognito=true&video_id={videoId})") #(30033, "RunScript({addonId},playWithYouTube,{videoId})") ] @property def _infos(self): return self._infos_ @property def _title(self): return self.title def _item(self, path): return ListItem( self._title, path, infos={"video": dict(self._infos, title=self.title, plot=self.plot())}, streamInfos={"video": {"duration": self.lengthSeconds}}, contextMenus=self.menus(authorId=self.authorId, videoId=self.videoId), thumb=getattr(self.videoThumbnails, "sddefault", "")) def item(self, url, action): return self._item(buildUrl(url, action=action, videoId=self.videoId))
class Video(StdVideo): _repr_ = "Video({0.videoId})" _plot_ = localizedString(30058) _live_ = localizedString(30059) @property def _infos(self): if self.liveNow: return dict(self._infos_, playcount=0) return super(Video, self)._infos @property def _title(self): if self.liveNow: return self._live_.format(self) return super(Video, self)._title
class Playlist(InvidiousItem): _repr_ = "Playlist({0.playlistId})" _plot_ = localizedString(30061) def item(self, url, action): return ListItem( self.title, buildUrl(url, action=action, playlistId=self.playlistId), isFolder=True, infos={"video": {"plot": self.plot()}}, poster=self.playlistThumbnail)
class Channel(InvidiousItem): __json__ = {"authorThumbnails": AuthorThumbnails} _repr_ = "Channel({0.author})" _plot_ = localizedString(30060) @property def thumbnail(self): return getattr(self.authorThumbnails, "512", "") def item(self, url, action): return ListItem( self.author, buildUrl(url, action=action, authorId=self.authorId), isFolder=True, infos={"video": {"plot": self.plot()}}, poster=self.thumbnail)
def addItems(self, items, *args, **kwargs): if not xbmcplugin.addDirectoryItems( self.handle, [item.asItem() for item in items.items(self.url, *args) if item]): raise if items.more: continuation = getattr(items, "continuation", None) if continuation: kwargs["continuation"] = continuation else: kwargs["page"] = int(kwargs.get("page", 1)) + 1 self.addItem(getMoreItem(self.url, action=self.action, **kwargs)) if items.content: xbmcplugin.setContent(self.handle, items.content) if items.category: if self.category: self.setCategory(" / ".join( (items.category, localizedString(self.category)))) else: self.setCategory(items.category) return True
class BaseVideo(InvidiousItem): __json__ = {"videoThumbnails": VideoThumbnails} __date__ = {"published"} _repr_ = "BaseVideo({0.videoId})" _infos_ = {"mediatype": "video"} _plot_ = localizedString(30056) _menus_ = [ (30033, "RunScript({addonId},playWithYouTube,{videoId})"), (30031, "RunScript({addonId},goToChannel,{authorId})"), (30032, "RunScript({addonId},addChannelToFavourites,{authorId})"), (30034, "RunScript({addonId},addChannelToFeed,{authorId},{author})") ] @property def _infos(self): return self._infos_ @property def _title(self): return self.title def _item(self, path): return ListItem( self._title, path, infos={ "video": dict(self._infos, title=self.title, plot=self.plot()) }, streamInfos={"video": { "duration": self.lengthSeconds }}, contextMenus=self.menus(authorId=self.authorId, author=quote_plus( self.author.encode("utf-8")), videoId=self.videoId), thumb=getattr(self.videoThumbnails, "sddefault", "")) def item(self, url, action): return self._item(buildUrl(url, action=action, videoId=self.videoId))
class Channel(InvidiousItem): __json__ = {"authorThumbnails": AuthorThumbnails} _repr_ = "Channel({0.author})" _plot_ = localizedString(30060) _menus_ = [(30034, "RunScript({addonId},addChannelToFeed,{authorId},{author})")] @property def thumbnail(self): return getattr(self.authorThumbnails, "512", "") def item(self, url, action): return ListItem(self.author, buildUrl(url, action=action, authorId=self.authorId), isFolder=True, infos={"video": { "plot": self.plot() }}, contextMenus=self.menus( authorId=self.authorId, author=quote_plus(self.author.encode("utf-8"))), poster=self.thumbnail)
def endDirectory(self, success): if success and self.category: self.setCategory(localizedString(self.category)) xbmcplugin.endOfDirectory(self.handle, success)
class StdVideo(ShortVideo): _repr_ = "StdVideo({0.videoId})" _plot_ = localizedString(30058)
class ShortVideo(BaseVideo): _repr_ = "ShortVideo({0.videoId})" _plot_ = localizedString(30057)
def menus(self, **kwargs): return [(localizedString(label), action.format(addonId=getAddonId(), **kwargs)) for label, action in self._menus_]
def menus(cls, **kwargs): return [(localizedString(label).format(**kwargs), action.format(addonId=getAddonId(), **kwargs)) for label, action in cls._menus_]