public string DeletePlaylist(int playlistID) { try { PlaylistRepository repPlaylist = new PlaylistRepository(); Playlist pl = repPlaylist.GetByID(playlistID); if (pl == null) return "Playlist not found"; repPlaylist.Delete(playlistID); return ""; } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return ex.Message; } }
public Contract_Playlist_SaveResponse SavePlaylist(Contract_Playlist contract) { Contract_Playlist_SaveResponse contractRet = new Contract_Playlist_SaveResponse(); contractRet.ErrorMessage = ""; try { PlaylistRepository repPlaylist = new PlaylistRepository(); // Process the playlist Playlist pl = null; if (contract.PlaylistID.HasValue) { pl = repPlaylist.GetByID(contract.PlaylistID.Value); if (pl == null) { contractRet.ErrorMessage = "Could not find existing Playlist with ID: " + contract.PlaylistID.Value.ToString(); return contractRet; } } else pl = new Playlist(); if (string.IsNullOrEmpty(contract.PlaylistName)) { contractRet.ErrorMessage = "Playlist must have a name"; return contractRet; } pl.DefaultPlayOrder = contract.DefaultPlayOrder; pl.PlaylistItems = contract.PlaylistItems; pl.PlaylistName = contract.PlaylistName; pl.PlayUnwatched = contract.PlayUnwatched; pl.PlayWatched = contract.PlayWatched; repPlaylist.Save(pl); contractRet.Playlist = pl.ToContract(); } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); contractRet.ErrorMessage = ex.Message; return contractRet; } return contractRet; }
private System.IO.Stream GetItemsFromPlaylist(int userid, string id, HistoryInfo info) { var PlaylistID = -1; int.TryParse(id, out PlaylistID); var playlistRepository = new PlaylistRepository(); var repo = new AnimeEpisodeRepository(); if (PlaylistID == 0) { using (var session = JMMService.SessionFactory.OpenSession()) { var ret = new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Show,info,false)); if (!ret.Init()) return new MemoryStream(); var retPlaylists = new List<Video>(); var playlists = playlistRepository.GetAll(); foreach (var playlist in playlists) { var dir = new Directory(); dir.Key= PlexHelper.ConstructPlaylistIdUrl(userid, playlist.PlaylistID); dir.Title = playlist.PlaylistName; var episodeID = -1; if (int.TryParse(playlist.PlaylistItems.Split('|')[0].Split(';')[1], out episodeID)) { var anime = repo.GetByID(session, episodeID).GetAnimeSeries(session).GetAnime(session); dir.Thumb = anime.GetDefaultPosterDetailsNoBlanks(session).GenPoster(); dir.Art = anime.GetDefaultFanartDetailsNoBlanks(session).GenArt(); } else { dir.Thumb = PlexHelper.ConstructSupportImageLink("plex_404V.png"); } dir.LeafCount = playlist.PlaylistItems.Split('|').Count().ToString(); dir.ViewedLeafCount = "0"; retPlaylists.Add(dir,info); } retPlaylists = retPlaylists.OrderBy(a => a.Title).ToList(); ret.Childrens = retPlaylists; return ret.GetStream(); } } if (PlaylistID > 0) { //iOS Hack, since it uses the previous thumb, as overlay image on the episodes bool iosHack = false; if (WebOperationContext.Current != null && WebOperationContext.Current.IncomingRequest.Headers.AllKeys.Contains("X-Plex-Product")) { string kh = WebOperationContext.Current.IncomingRequest.Headers.Get("X-Plex-Product").ToUpper(); if (kh.Contains(" IOS")) iosHack = true; } var playlist = playlistRepository.GetByID(PlaylistID); var playlistItems = playlist.PlaylistItems.Split('|'); var vids = new List<Video>(); var ret = new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Episode, info, true)); if (!ret.Init()) return new MemoryStream(); using (var session = JMMService.SessionFactory.OpenSession()) { foreach (var item in playlistItems) { var episodeID = -1; int.TryParse(item.Split(';')[1], out episodeID); if (episodeID < 0) return new MemoryStream(); var ep = repo.GetByID(session, episodeID); var v = new Video(); var locals = ep.GetVideoLocals(session); if ((locals == null) || (locals.Count == 0)) continue; var current = locals[0]; try { PlexHelper.PopulateVideo(v, current, JMMType.File, userid); if (!string.IsNullOrEmpty(v.Duration)) { vids.Add(v, info); if (iosHack) { v.Art = v.Thumb; v.Thumb = ret.MediaContainer.ParentThumb; } } } catch (Exception e) { //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null) } } ret.Childrens = vids; return ret.GetStream(); } } return new MemoryStream(); }
public Contract_Playlist GetPlaylist(int playlistID) { try { PlaylistRepository repPlaylist = new PlaylistRepository(); Playlist pl = repPlaylist.GetByID(playlistID); if (pl == null) return null; return pl.ToContract(); } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return null; } }
private System.IO.Stream GetItemsFromPlaylist(int userid, string id) { var PlaylistID = -1; int.TryParse(id, out PlaylistID); var playlistRepository = new PlaylistRepository(); var repo = new AnimeEpisodeRepository(); if (PlaylistID == 0) { using (var session = JMMService.SessionFactory.OpenSession()) { var ret = new PlexObject(PlexHelper.NewMediaContainer("Playlists", false)); if (!ret.Init()) return new MemoryStream(); var retPlaylists = new List<Video>(); var playlists = playlistRepository.GetAll(); foreach (var playlist in playlists) { var dir = new Directory(); dir.Key = dir.PrimaryExtraKey = PlexHelper.PlexProxy( PlexHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressPlex + "/GetMetadata/0/" + (int)JMMType.Playlist + "/" + playlist.PlaylistID)); dir.Title = playlist.PlaylistName; var episodeID = -1; if (int.TryParse(playlist.PlaylistItems.Split('|')[0].Split(';')[1], out episodeID)) { var anime = repo.GetByID(session, episodeID) .GetAnimeSeries(session) .GetAnime(session); var poster = anime.GetDefaultPosterDetailsNoBlanks(session); var fanart = anime.GetDefaultFanartDetailsNoBlanks(session); if (poster != null) dir.Thumb = poster.GenPoster(); if (fanart != null) dir.Art = fanart.GenArt(); } else { dir.Thumb = PlexHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressPlex + "/GetSupportImage/plex_404V.png"); } dir.LeafCount = playlist.PlaylistItems.Split('|').Count().ToString(); dir.ViewedLeafCount = "0"; retPlaylists.Add(dir); } retPlaylists = retPlaylists.OrderBy(a => a.Title).ToList(); ret.Childrens = retPlaylists; return ret.GetStream(); } } else if (PlaylistID > 0) { var playlist = playlistRepository.GetByID(PlaylistID); var playlistItems = playlist.PlaylistItems.Split('|'); var vids = new List<Video>(); var ret = new PlexObject(PlexHelper.NewMediaContainer(playlist.PlaylistName, true)); if (!ret.Init()) return new MemoryStream(); ret.MediaContainer.ViewMode = "65586"; ret.MediaContainer.ViewGroup = "video"; using (var session = JMMService.SessionFactory.OpenSession()) { foreach (var item in playlistItems) { var episodeID = -1; int.TryParse(item.Split(';')[1], out episodeID); if (episodeID < 0) return new MemoryStream(); var ep = repo.GetByID(session, episodeID); var v = new Video(); var locals = ep.GetVideoLocals(session); if ((locals == null) || (locals.Count == 0)) continue; var current = locals[0]; try { PlexHelper.PopulateVideo(v, current, JMMType.File, userid); if (!string.IsNullOrEmpty(v.Duration)) vids.Add(v); } catch (Exception e) { //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null) } } ret.Childrens = vids; return ret.GetStream(); } } return new MemoryStream(); }