public System.IO.Stream GetItemsFromSerie(int userid, string SerieId) { KodiObject ret = new KodiObject(KodiHelper.NewMediaContainer("Series", true)); if (!ret.Init()) return new MemoryStream(); enEpisodeType? eptype = null; int serieID ; if (SerieId.Contains("_")) { int ept ; string[] ndata = SerieId.Split('_'); if (!int.TryParse(ndata[0], out ept)) return new MemoryStream(); eptype = (enEpisodeType) ept; if (!int.TryParse(ndata[1], out serieID)) return new MemoryStream(); } else { if (!int.TryParse(SerieId, out serieID)) return new MemoryStream(); } using (var session = JMMService.SessionFactory.OpenSession()) { if (serieID == -1) return new MemoryStream(); AnimeSeriesRepository repSeries = new AnimeSeriesRepository(); AnimeSeries ser = repSeries.GetByID(session, serieID); if (ser == null) return new MemoryStream(); AniDB_Anime anime = ser.GetAnime(); if (anime == null) return new MemoryStream(); ImageDetails fanart = anime.GetDefaultFanartDetailsNoBlanks(session); if (fanart != null) ret.MediaContainer.Art = fanart.GenArt(); ret.MediaContainer.Title2 = ret.MediaContainer.Title1 = anime.MainTitle; List<AnimeEpisode> episodes = ser.GetAnimeEpisodes(session).Where(a => a.GetVideoLocals(session).Count > 0).ToList(); if (eptype.HasValue) { episodes = episodes.Where(a => a.EpisodeTypeEnum == eptype.Value).ToList(); } else { List<enEpisodeType> types = episodes.Select(a => a.EpisodeTypeEnum).Distinct().ToList(); if (types.Count > 1) { List<KodiEpisodeType> eps = new List<KodiEpisodeType>(); foreach (enEpisodeType ee in types) { KodiEpisodeType k2 = new KodiEpisodeType(); KodiEpisodeType.EpisodeTypeTranslated(k2, ee, (AnimeTypes)anime.AnimeType, episodes.Count(a => a.EpisodeTypeEnum == ee)); eps.Add(k2); } List<SortPropOrFieldAndDirection> sortCriteria = new List<SortPropOrFieldAndDirection>(); sortCriteria.Add(new SortPropOrFieldAndDirection("Name", SortType.eString)); eps = Sorting.MultiSort(eps, sortCriteria); List<Video> dirs= new List<Video>(); bool isCharacterSetup_ = false; foreach (KodiEpisodeType ee in eps) { Video v = new Directory(); v.Title = ee.Name; v.Type = "season"; v.LeafCount = ee.Count.ToString(); v.ViewedLeafCount = "0"; v.Key = KodiHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressKodi + "/GetMetadata/" + userid + "/" + (int)JMMType.Serie + "/" + ee.Type + "_" + ser.AnimeSeriesID); v.Thumb = KodiHelper.ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressKodi + "/GetSupportImage/" + ee.Image); if ((ee.AnimeType==AnimeTypes.Movie) || (ee.AnimeType==AnimeTypes.OVA)) { v = KodiHelper.MayReplaceVideo((Directory)v, ser,anime, JMMType.File, userid, false); } //proper naming v.OriginalTitle = ""; foreach (AniDB_Anime_Title title in anime.GetTitles()) { if (title.TitleType == "official" || title.TitleType == "main") { v.OriginalTitle += "{" + title.TitleType + ":" + title.Language + "}" + title.Title + "|"; } } v.OriginalTitle = v.OriginalTitle.Substring(0, v.OriginalTitle.Length - 1); //proper naming end //experiment if (!isCharacterSetup_) { Characters ch = new Characters(); ch.CharactersList = new List<Character>(); ch.CharactersList = GetCharactersFromAniDB(anime); v.CharactersList = new List<Characters>(); v.CharactersList.Add(ch); isCharacterSetup_ = true; } //experimentEND dirs.Add(v); } ret.Childrens = dirs; return ret.GetStream(); } } List<Video> vids=new List<Video>(); Contract_AnimeSeries cseries = ser.ToContract(ser.GetUserRecord(userid), true); Video nv = KodiHelper.FromSerie(cseries, userid); KodiEpisodeType k = new KodiEpisodeType(); if (eptype.HasValue) { KodiEpisodeType.EpisodeTypeTranslated(k, (enEpisodeType) eptype.Value, (AnimeTypes) anime.AnimeType, episodes.Count); } bool isCharacterSetup = false; foreach (AnimeEpisode ep in episodes) { Video v = new Video(); List<VideoLocal> locals = ep.GetVideoLocals(session); if ((locals == null) || (locals.Count == 0)) continue; AniDB_Episode aep = ep.AniDB_Episode; if (aep == null) continue; VideoLocal current = locals[0]; try { KodiHelper.PopulateVideo(v, current, ep, ser, anime, nv, JMMType.File, userid); if (eptype.HasValue) { v.ParentTitle = k.Name; } //experiment if (!isCharacterSetup) { Characters c = new Characters(); c.CharactersList = new List<Character>(); c.CharactersList = GetCharactersFromAniDB(anime); v.CharactersList = new List<Characters>(); v.CharactersList.Add(c); isCharacterSetup = true; } //experimentEND 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) } } List<SortPropOrFieldAndDirection> sortCriteria2 = new List<SortPropOrFieldAndDirection>(); sortCriteria2.Add(new SortPropOrFieldAndDirection("EpNumber", SortType.eInteger)); vids= Sorting.MultiSort(vids, sortCriteria2); ret.Childrens = vids; return ret.GetStream(); } }
public static void EpisodeTypeTranslated(KodiEpisodeType tp, enEpisodeType epType, AnimeTypes an, int cnt) { tp.Type = (int)epType; tp.Count = cnt; tp.AnimeType = an; bool plural = cnt > 1; switch (epType) { case enEpisodeType.Credits: tp.Name = plural ? "Credits" : "Credit"; tp.Image = "plex_credits.png"; return; case enEpisodeType.Episode: switch (an) { case AnimeTypes.Movie: tp.Name = plural ? "Movies" : "Movie"; tp.Image = "plex_movies.png"; return; case AnimeTypes.OVA: tp.Name = plural ? "Ovas" : "Ova"; tp.Image = "plex_ovas.png"; return; case AnimeTypes.Other: tp.Name = plural ? "Others" : "Other"; tp.Image = "plex_others.png"; return; case AnimeTypes.TV_Series: tp.Name = plural ? "Episodes" : "Episode"; tp.Image = "plex_episodes.png"; return; case AnimeTypes.TV_Special: tp.Name = plural ? "TV Episodes" : "TV Episode"; tp.Image = "plex_tvepisodes.png"; return; case AnimeTypes.Web: tp.Name = plural ? "Web Clips" : "Web Clip"; tp.Image = "plex_webclips.png"; return; } tp.Name = plural ? "Episodes" : "Episode"; tp.Image = "plex_episodes.png"; return; case enEpisodeType.Parody: tp.Name = plural ? "Parodies" : "Parody"; tp.Image = "plex_parodies.png"; return; case enEpisodeType.Special: tp.Name = plural ? "Specials" : "Special"; tp.Image = "plex_specials.png"; return; case enEpisodeType.Trailer: tp.Name = plural ? "Trailers" : "Trailer"; tp.Image = "plex_trailers.png"; return; default: tp.Name = "Misc"; tp.Image = "plex_misc.png"; return; } }