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 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; } }
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; }
public List<Contract_Playlist> GetAllPlaylists() { List<Contract_Playlist> pls = new List<Contract_Playlist>(); try { PlaylistRepository repPlaylist = new PlaylistRepository(); List<Playlist> allPls = repPlaylist.GetAll(); foreach (Playlist pl in allPls) pls.Add(pl.ToContract()); } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); } return pls; }
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 System.IO.Stream GetFilters(string uid) { int t = 0; int.TryParse(uid, out t); JMMUser user = t > 0 ? PlexHelper.GetJMMUser(uid) : PlexHelper.GetUser(uid); if (user==null) return new MemoryStream(); int userid = user.JMMUserID; HistoryInfo info = new HistoryInfo { Key = PlexHelper.ConstructFiltersUrl(userid), Title = "Anime" }; PlexObject ret = new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Show,info,false)); if (!ret.Init()) return new MemoryStream(); List<Video> dirs = new List<Video>(); try { using (var session = JMMService.SessionFactory.OpenSession()) { GroupFilterRepository repGF = new GroupFilterRepository(); List<GroupFilter> allGfs = repGF.GetAll(session); Dictionary<int, HashSet<int>> gstats = StatsCache.Instance.StatUserGroupFilter[userid]; foreach (GroupFilter gg in allGfs.ToArray()) { if ((!StatsCache.Instance.StatUserGroupFilter.ContainsKey(userid)) || (!StatsCache.Instance.StatUserGroupFilter[userid].ContainsKey(gg.GroupFilterID))) { allGfs.Remove(gg); } } AnimeGroupRepository repGroups = new AnimeGroupRepository(); allGfs.Insert(0, new GroupFilter() {GroupFilterName = "All", GroupFilterID = -999}); foreach (GroupFilter gg in allGfs) { Random rnd = new Random(123456789); Directory pp = new Directory { Type="show" }; pp.Key = PlexHelper.ConstructFilterIdUrl(userid, gg.GroupFilterID); pp.Title = gg.GroupFilterName; HashSet<int> groups; groups = gg.GroupFilterID == -999 ? new HashSet<int>(repGroups.GetAllTopLevelGroups(session).Select(a => a.AnimeGroupID)) : gstats[gg.GroupFilterID]; if (groups.Count != 0) { bool repeat; int nn = 0; pp.LeafCount = groups.Count.ToString(); pp.ViewedLeafCount = "0"; do { repeat = true; int grp = groups.ElementAt(rnd.Next(groups.Count)); AnimeGroup ag = repGroups.GetByID(grp); List<AnimeSeries> sers = ag.GetSeries(session); if (sers.Count > 0) { AnimeSeries ser = sers[rnd.Next(sers.Count)]; AniDB_Anime anim = ser.GetAnime(session); if (anim != null) { ImageDetails poster = anim.GetDefaultPosterDetailsNoBlanks(session); ImageDetails fanart = anim.GetDefaultFanartDetailsNoBlanks(session); if (poster != null) pp.Thumb = poster.GenPoster(); if (fanart != null) pp.Art = fanart.GenArt(); if (poster != null) repeat = false; } } nn++; if ((repeat) && (nn == 15)) repeat = false; } while (repeat); dirs.Add(pp,info); } } VideoLocalRepository repVids = new VideoLocalRepository(); List<VideoLocal> vids = repVids.GetVideosWithoutEpisode(); if (vids.Count > 0) { Directory pp = new Directory() { Type = "show" }; pp.Key = PlexHelper.ConstructUnsortUrl(userid); pp.Title = "Unsort"; pp.Thumb = PlexHelper.ConstructSupportImageLink("plex_unsort.png"); pp.LeafCount = vids.Count.ToString(); pp.ViewedLeafCount = "0"; dirs.Add(pp, info); } var repPlaylist = new PlaylistRepository(); var playlists = repPlaylist.GetAll(); if (playlists.Count > 0) { Directory pp = new Directory() { Type="show" }; pp.Key = PlexHelper.ConstructPlaylistUrl(userid); pp.Title = "Playlists"; pp.Thumb = PlexHelper.ConstructSupportImageLink("plex_playlists.png"); pp.LeafCount = playlists.Count.ToString(); pp.ViewedLeafCount = "0"; dirs.Add(pp, info); } dirs = dirs.OrderBy(a => a.Title).ToList(); } ret.Childrens = dirs; return ret.GetStream(); } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return new MemoryStream(); } }
public System.IO.Stream GetFilters(string uid) { JMMUser user = PlexHelper.GetUser(uid); if (user==null) return new MemoryStream(); int userid = user.JMMUserID; PlexObject ret=new PlexObject(PlexHelper.NewMediaContainer("Anime", false)); if (!ret.Init()) return new MemoryStream(); List<Video> dirs = new List<Video>(); try { using (var session = JMMService.SessionFactory.OpenSession()) { GroupFilterRepository repGF = new GroupFilterRepository(); List<GroupFilter> allGfs = repGF.GetAll(session); Dictionary<int, HashSet<int>> gstats = StatsCache.Instance.StatUserGroupFilter[userid]; foreach (GroupFilter gg in allGfs.ToArray()) { if ((!StatsCache.Instance.StatUserGroupFilter.ContainsKey(userid)) || (!StatsCache.Instance.StatUserGroupFilter[userid].ContainsKey(gg.GroupFilterID))) { allGfs.Remove(gg); } } AnimeGroupRepository repGroups = new AnimeGroupRepository(); allGfs.Insert(0, new GroupFilter() {GroupFilterName = "All", GroupFilterID = -999}); foreach (GroupFilter gg in allGfs) { Random rnd = new Random(123456789); Directory pp = new Directory(); pp.Key = PlexHelper.PlexProxy(PlexHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressPlex + "/GetMetadata/" + userid + "/" + (int) JMMType.GroupFilter + "/" + gg.GroupFilterID)); pp.PrimaryExtraKey = pp.Key; pp.Title = gg.GroupFilterName; HashSet<int> groups; groups = gg.GroupFilterID == -999 ? new HashSet<int>(repGroups.GetAllTopLevelGroups(session).Select(a => a.AnimeGroupID)) : gstats[gg.GroupFilterID]; if (groups.Count != 0) { bool repeat; int nn = 0; pp.LeafCount = groups.Count.ToString(); pp.ViewedLeafCount = "0"; do { repeat = true; int grp = groups.ElementAt(rnd.Next(groups.Count)); AnimeGroup ag = repGroups.GetByID(grp); List<AnimeSeries> sers = ag.GetSeries(session); if (sers.Count > 0) { AnimeSeries ser = sers[rnd.Next(sers.Count)]; AniDB_Anime anim = ser.GetAnime(session); if (anim != null) { ImageDetails poster = anim.GetDefaultPosterDetailsNoBlanks(session); ImageDetails fanart = anim.GetDefaultFanartDetailsNoBlanks(session); if (poster != null) pp.Thumb = poster.GenPoster(); if (fanart != null) pp.Art = fanart.GenArt(); if (poster != null) repeat = false; } } nn++; if ((repeat) && (nn == 15)) repeat = false; } while (repeat); dirs.Add(pp); } } VideoLocalRepository repVids = new VideoLocalRepository(); List<VideoLocal> vids = repVids.GetVideosWithoutEpisode(); if (vids.Count > 0) { JMMContracts.PlexContracts.Directory pp = new JMMContracts.PlexContracts.Directory(); pp.Key = pp.PrimaryExtraKey = PlexHelper.PlexProxy( PlexHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressPlex + "/GetMetadata/0/" + (int) JMMType.GroupUnsort + "/0")); pp.Title = "Unsort"; pp.Thumb = PlexHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressPlex + "/GetSupportImage/plex_unsort.png"); pp.LeafCount = vids.Count.ToString(); pp.ViewedLeafCount = "0"; dirs.Add(pp); } var repPlaylist = new PlaylistRepository(); var playlists = repPlaylist.GetAll(); if (playlists.Count > 0) { var pDir = new Directory(); pDir.Key = pDir.PrimaryExtraKey = PlexHelper.PlexProxy( PlexHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressPlex + "/GetMetadata/0/" + (int)JMMType.Playlist + "/0")); pDir.Title = "Playlists"; pDir.Thumb = PlexHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressPlex + "/GetSupportImage/plex_404V.png"); pDir.LeafCount = playlists.Count.ToString(); pDir.ViewedLeafCount = "0"; dirs.Add(pDir); } dirs = dirs.OrderBy(a => a.Title).ToList(); } ret.Childrens = dirs; return ret.GetStream(); } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return new MemoryStream(); } }
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(); }