Exemplo n.º 1
0
        public async Task <PlexPlaylist> AddItemToPlaylist(PlexPlaylist playlist, IPlexMediaObject item)
        {
            string uri = "library://";

            var library = await item.LookupLibrary(this);

            if (library == null)
            {
                throw new FileNotFoundException("Could not lookup library.");
            }

            var metadataUrl = item.MetadataUrl;

            uri += library.UUID + "/item/" + HttpUtility.UrlEncode(metadataUrl.EndsWith("/children") ? metadataUrl.Substring(0, metadataUrl.Length - "/children".Length) : metadataUrl);


            XmlDocument response = await connection.RequestXml(playlist.MetadataUrl, new NameValueCollection()
            {
                { "uri", uri }
            }, "PUT");

            XmlNode mediaContainer = response.SelectSingleNode("/MediaContainer");

            if (mediaContainer.Attributes["size"].InnerText != "1")
            {
                throw new FileNotFoundException("No playlist has been created.");
            }

            return(new PlexPlaylist(mediaContainer.SelectNodes("Playlist")[0]));
        }
Exemplo n.º 2
0
        public async Task DeletePlaylist(PlexPlaylist playlist)
        {
            if (!playlist.MetadataUrl.EndsWith("/items"))
            {
                throw new InvalidOperationException("Invalid playlist object");
            }

            await connection.RequestServer(playlist.MetadataUrl.Replace("/items", ""), null, "DELETE");
        }
Exemplo n.º 3
0
        public async Task <PlexTrack[]> GetTracks(PlexPlaylist playlist)
        {
            var retval = new List <PlexTrack>();

            XmlDocument response = await connection.RequestXml(playlist.MetadataUrl);

            XmlNode mediaContainer = response.SelectSingleNode("/MediaContainer");

            foreach (XmlNode track in mediaContainer.SelectNodes("Track"))
            {
                retval.Add(new PlexTrack(track));
            }

            return(retval.ToArray());
        }
Exemplo n.º 4
0
        public async Task <PlexPlaylist> DeleteTrackFromPlaylist(PlexTrack track, PlexPlaylist playlist)
        {
            if (track.PlaylistItemID < 0)
            {
                throw new InvalidOperationException("You can only delete track fetched by GetTracks(PlexPlaylist playlist)");
            }

            XmlDocument response = await connection.RequestXml(playlist.MetadataUrl + "/" + track.PlaylistItemID, null, "DELETE");

            XmlNode mediaContainer = response.SelectSingleNode("/MediaContainer");

            if (mediaContainer.Attributes["size"].InnerText != "1")
            {
                throw new FileNotFoundException("No playlist has been created.");
            }

            return(new PlexPlaylist(mediaContainer.SelectNodes("Playlist")[0]));
        }
Exemplo n.º 5
0
        public async Task MoveTrackInPlaylist(PlexPlaylist playlist, PlexTrack track, PlexTrack after = null)
        {
            if (track.PlaylistItemID < 0 || (after != null && after.PlaylistItemID < 0))
            {
                throw new InvalidOperationException("Track provided must be fetched by GetTracks(PlexPlaylist playlist)");
            }

            NameValueCollection nvc = null;

            if (after != null)
            {
                nvc = new NameValueCollection()
                {
                    { "after", after.PlaylistItemID.ToString() }
                };
            }

            await connection.RequestServer(playlist.MetadataUrl + "/" + track.PlaylistItemID + "/move", nvc, "PUT");
        }