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])); }
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"); }
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()); }
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])); }
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"); }