public static Video MayReplaceVideo(Video v1, AnimeSeries ser, Contract_AnimeSeries cserie, AniDB_Anime anime, JMMType type, int userid, bool all = true) { int epcount = all ? ser.GetAnimeEpisodesCountWithVideoLocal() : ser.GetAnimeEpisodesNormalCountWithVideoLocal(); if ((epcount == 1) && (anime.AnimeTypeEnum == enAnimeType.OVA || anime.AnimeTypeEnum == enAnimeType.Movie)) { List <AnimeEpisode> episodes = ser.GetAnimeEpisodes(); List <VideoLocal> l = episodes[0].GetVideoLocals(); if (l.Count > 0) { Video v2 = new Video(); try { if (PopulateVideo(v2, l[0], episodes[0], ser, cserie, anime, v1, JMMType.File, userid)) { v2.Thumb = anime.GetDefaultPosterDetailsNoBlanks().GenPoster(); return(v2); } } catch (Exception e) { //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null) } } } return(v1); }
internal static Directory FromGroup(Contract_AnimeGroup grp, Contract_AnimeSeries ser, int userid) { Directory p = new Directory(); p.Key = ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressKodi + "/GetMetadata/" + userid + "/" + (int)JMMType.Group + "/" + grp.AnimeGroupID.ToString()); p.Title = grp.GroupName; p.Summary = grp.Description; p.Type = "show"; p.AirDate = grp.Stat_AirDate_Min.HasValue ? grp.Stat_AirDate_Min.Value : DateTime.MinValue; Contract_AniDBAnime anime = ser.AniDBAnime; if (anime != null) { Contract_AniDB_Anime_DefaultImage poster = anime.DefaultImagePoster; Contract_AniDB_Anime_DefaultImage fanart = anime.DefaultImageFanart; p.Thumb = poster != null?poster.GenPoster() : ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressKodi + "/GetSupportImage/plex_404V.png"); if (fanart != null) { p.Art = fanart.GenArt(); } } p.LeafCount = (grp.UnwatchedEpisodeCount + grp.WatchedEpisodeCount).ToString(); p.ViewedLeafCount = grp.WatchedEpisodeCount.ToString(); return(p); }
public void UpdateGroupFilters() { List <GroupFilter> gfs = RepoFactory.GroupFilter.GetAll(); List <AnimeGroup> allGrps = RepoFactory.AnimeGroup.GetAllTopLevelGroups(); // No Need of subgroups List <AnimeSeries> allSeries = RepoFactory.AnimeSeries.GetAll(); foreach (GroupFilter gf in gfs) { bool change = false; foreach (AnimeGroup grp in allGrps) { Contract_AnimeGroup cgrp = grp.GetUserContract(this.JMMUserID); change |= gf.CalculateGroupFilterGroups(cgrp, Contract, JMMUserID); } foreach (AnimeSeries ser in allSeries) { Contract_AnimeSeries cser = ser.GetUserContract(this.JMMUserID); change |= gf.CalculateGroupFilterSeries(cser, Contract, JMMUserID); } if (change) { RepoFactory.GroupFilter.Save(gf); } } }
public static Video MayReplaceVideo(Video v1, AnimeSeries ser, Contract_AnimeSeries cserie, int userid, bool all = true, Video serie = null) { int epcount = all ? ser.GetAnimeEpisodesCountWithVideoLocal() : ser.GetAnimeEpisodesNormalCountWithVideoLocal(); if ((epcount == 1) && (cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.OVA || cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.Movie)) { try { List <AnimeEpisode> episodes = ser.GetAnimeEpisodes(); Video v2 = episodes[0].PlexContract; if (v2.IsMovie) { AddInformationFromMasterSeries(v2, cserie, serie ?? v1); v2.Thumb = (serie ?? v1).Thumb; return(v2); } } catch (Exception e) { //Fast fix if file do not exist, and still is in db. (Xml Serialization of video info will fail on null) } } return(v1); }
public static Video VideoFromAnimeGroup(ISession session, AnimeGroup grp, int userid, List <AnimeSeries> allSeries) { Contract_AnimeGroup cgrp = grp.ToContract(grp.GetUserRecord(session, userid)); if (StatsCache.Instance.StatGroupSeriesCount[grp.AnimeGroupID] == 1) { AnimeSeries ser = JMMServiceImplementation.GetSeriesForGroup(grp.AnimeGroupID, allSeries); if (ser != null) { Contract_AnimeSeries cserie = ser.ToContract(ser.GetUserRecord(session, userid), true); Video v = FromSerieWithPossibleReplacement(cserie, ser, userid); v.AirDate = ser.AirDate.HasValue ? ser.AirDate.Value : DateTime.MinValue; v.Group = cgrp; return(v); } } else { AnimeSeries ser = grp.DefaultAnimeSeriesID.HasValue ? allSeries.FirstOrDefault(a => a.AnimeSeriesID == grp.DefaultAnimeSeriesID.Value) : JMMServiceImplementation.GetSeriesForGroup(grp.AnimeGroupID, allSeries); if (ser != null) { Video v = FromGroup(cgrp, ser.ToContract(ser.GetUserRecord(session, userid), true), userid); v.Group = cgrp; v.AirDate = cgrp.Stat_AirDate_Min.HasValue ? cgrp.Stat_AirDate_Min.Value : DateTime.MinValue; return(v); } } return(null); }
public static Video FromSerieWithPossibleReplacement(Contract_AnimeSeries cserie, AnimeSeries ser, int userid) { Video v = KodiHelper.FromSerie(cserie, userid); //if (ser.GetAnimeNumberOfEpisodeTypes() > 1) v.Type = "show"; //else if ((cserie.AniDBAnime.AnimeType == (int)enAnimeType.Movie) || (cserie.AniDBAnime.AnimeType == (int)enAnimeType.OVA)) //{ // v = MayReplaceVideo((Directory)v, ser, ser.GetAnime(), JMMType.File, userid); //} return(v); }
private void UpdatePlexKodiContracts(AnimeSeries_User ugrp) { using (var session = DatabaseFactory.SessionFactory.OpenSession()) { AnimeSeries ser = RepoFactory.AnimeSeries.GetByID(ugrp.AnimeSeriesID); Contract_AnimeSeries con = ser?.GetUserContract(ugrp.JMMUserID); if (con == null) { return; } ugrp.PlexContract = Helper.GenerateFromSeries(con, ser, ser.GetAnime(), ugrp.JMMUserID); } }
private static string SummaryFromAnimeContract(Contract_AnimeSeries c) { string s = c.AniDBAnime.AniDBAnime.Description; if (string.IsNullOrEmpty(s) && c.MovieDB_Movie != null) { s = c.MovieDB_Movie.Overview; } if (string.IsNullOrEmpty(s) && c.TvDB_Series != null && c.TvDB_Series.Count > 0) { s = c.TvDB_Series[0].Overview; } return(s); }
public System.IO.Stream GetItemsFromGroup(int userid, string GroupId) { KodiObject ret = new KodiObject(KodiHelper.NewMediaContainer("Groups", true)); if (!ret.Init()) { return(new MemoryStream()); } int groupID; int.TryParse(GroupId, out groupID); List <Video> retGroups = new List <Video>(); if (groupID == -1) { return(new MemoryStream()); } using (var session = JMMService.SessionFactory.OpenSession()) { AnimeGroupRepository repGroups = new AnimeGroupRepository(); AnimeGroup grp = repGroups.GetByID(groupID); if (grp != null) { Contract_AnimeGroup basegrp = grp.ToContract(grp.GetUserRecord(session, userid)); ret.MediaContainer.Title1 = ret.MediaContainer.Title2 = basegrp.GroupName; List <AnimeSeries> sers2 = grp.GetSeries(session); ret.MediaContainer.Art = KodiHelper.GetRandomFanartFromSeries(sers2, session); foreach (AnimeGroup grpChild in grp.GetChildGroups()) { Video v = StatsCache.Instance.StatKodiGroupsCache[userid][grpChild.AnimeGroupID]; v.Type = "show"; if (v != null) { retGroups.Add(v.Clone()); } } foreach (AnimeSeries ser in grp.GetSeries()) { Contract_AnimeSeries cserie = ser.ToContract(ser.GetUserRecord(session, userid), true); Video v = KodiHelper.FromSerieWithPossibleReplacement(cserie, ser, userid); v.AirDate = ser.AirDate.HasValue ? ser.AirDate.Value : DateTime.MinValue; v.Group = basegrp; retGroups.Add(v); } } ret.Childrens = retGroups.OrderBy(a => a.AirDate).ToList(); return(ret.GetStream()); } }
private void UpdatePlexKodiContracts(AnimeSeries_User ugrp) { using (var session = JMMService.SessionFactory.OpenSession()) { AnimeSeriesRepository repo = new AnimeSeriesRepository(); AnimeSeries ser = repo.GetByID(ugrp.AnimeSeriesID); Contract_AnimeSeries con = ser?.GetUserContract(ugrp.JMMUserID); if (con == null) { return; } ugrp.PlexContract = Helper.GenerateFromSeries(con, ser, ser.GetAnime(session), ugrp.JMMUserID); } }
internal static Video FromGroup(Contract_AnimeGroup grp, Contract_AnimeSeries ser, int userid) { Directory p = new Directory(); p.Key = ConstructGroupIdUrl(userid, grp.AnimeGroupID); p.Title = grp.GroupName; p.Summary = grp.Description; p.Type = "show"; p.AirDate = grp.Stat_AirDate_Min.HasValue ? grp.Stat_AirDate_Min.Value : DateTime.MinValue; p.Thumb = ser.AniDBAnime?.DefaultImagePoster.GenPoster(); p.Art = ser.AniDBAnime?.DefaultImageFanart.GenArt(); p.LeafCount = (grp.UnwatchedEpisodeCount + grp.WatchedEpisodeCount).ToString(); p.ViewedLeafCount = grp.WatchedEpisodeCount.ToString(); return(p); }
public static Video FromSerieWithPossibleReplacement(Contract_AnimeSeries cserie, AnimeSeries ser, AniDB_Anime anidb, int userid) { Video v = new Directory(); FillSerie(v, ser, anidb, cserie, userid); if (ser.GetAnimeNumberOfEpisodeTypes() > 1) { v.Type = "show"; } else if ((cserie.AniDBAnime.AnimeType == (int)enAnimeType.Movie) || (cserie.AniDBAnime.AnimeType == (int)enAnimeType.OVA)) { v = MayReplaceVideo(v, ser, cserie, ser.GetAnime(), JMMType.File, userid); } return(v); }
public System.IO.Stream GetItemsFromGroup(int userid, string GroupId, HistoryInfo info) { PlexObject ret = new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Show, info, false)); if (!ret.Init()) { return(new MemoryStream()); } int groupID; int.TryParse(GroupId, out groupID); List <Video> retGroups = new List <Video>(); if (groupID == -1) { return(new MemoryStream()); } using (var session = JMMService.SessionFactory.OpenSession()) { AnimeGroupRepository repGroups = new AnimeGroupRepository(); AnimeGroup grp = repGroups.GetByID(groupID); if (grp != null) { Contract_AnimeGroup basegrp = grp.ToContract(grp.GetUserRecord(session, userid)); List <AnimeSeries> sers2 = grp.GetSeries(session); foreach (AnimeGroup grpChild in grp.GetChildGroups()) { Video v = StatsCache.Instance.StatPlexGroupsCache[userid][grpChild.AnimeGroupID]; if (v != null) { retGroups.Add(v.Clone(), info); } } foreach (AnimeSeries ser in grp.GetSeries()) { Contract_AnimeSeries cserie = ser.ToContract(ser.GetUserRecord(session, userid), true); Video v = PlexHelper.FromSerieWithPossibleReplacement(cserie, ser, ser.GetAnime(), userid); v.AirDate = ser.AirDate.HasValue ? ser.AirDate.Value : DateTime.MinValue; v.Group = basegrp; retGroups.Add(v, info); } } ret.Childrens = PlexHelper.ConvertToDirectoryIfNotUnique(retGroups.OrderBy(a => a.AirDate).ToList()); return(ret.GetStream()); } }
public static bool PopulateVideo(Video l, VideoLocal v, JMMType type, int userid) { PopulateVideoEpisodeFromVideoLocal(l, v, type); List <AnimeEpisode> eps = v.GetAnimeEpisodes(); if (eps.Count > 0) { PopulateVideoEpisodeFromAnimeEpisode(l, eps[0], userid); AnimeSeries series = eps[0].GetAnimeSeries(); if (series != null) { Contract_AnimeSeries cseries = series.ToContract(series.GetUserRecord(userid), true); Video nv = FromSerie(cseries, userid); AniDB_Anime ani = series.GetAnime(); return(PopulateVideoEpisodeFromAnime(l, ani, nv)); } } return(false); }
public static Video GenerateFromSeries(Contract_AnimeSeries cserie, AnimeSeries ser, AniDB_Anime anidb, int userid) { Video v = new Directory(); Dictionary <AnimeEpisode, Contract_AnimeEpisode> episodes = ser.GetAnimeEpisodes() .ToDictionary(a => a, a => a.GetUserContract(userid)); episodes = episodes.Where(a => a.Value == null || a.Value.LocalFileCount > 0) .ToDictionary(a => a.Key, a => a.Value); FillSerie(v, ser, episodes, anidb, cserie, userid); if (ser.GetAnimeNumberOfEpisodeTypes() > 1) { v.Type = "show"; } else if ((cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.Movie) || (cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.OVA)) { v = MayReplaceVideo(v, ser, cserie, userid); } return(v); }
private static Video FromGroup(Contract_AnimeGroup grp, Contract_AnimeSeries ser, int userid, int subgrpcnt) { Directory p = new Directory(); p.Id = grp.AnimeGroupID.ToString(); p.AnimeType = JMMContracts.PlexAndKodi.AnimeTypes.AnimeGroup.ToString(); p.Title = grp.GroupName; p.Summary = grp.Description; p.Type = "show"; p.AirDate = grp.Stat_AirDate_Min.HasValue ? grp.Stat_AirDate_Min.Value : DateTime.MinValue; if (ser != null) { p.Thumb = ser.AniDBAnime?.AniDBAnime.DefaultImagePoster.GenPoster(); p.Art = ser.AniDBAnime?.AniDBAnime.DefaultImageFanart.GenArt(); } p.LeafCount = (grp.UnwatchedEpisodeCount + grp.WatchedEpisodeCount).ToString(); p.ViewedLeafCount = grp.WatchedEpisodeCount.ToString(); p.ChildCount = (grp.Stat_SeriesCount + subgrpcnt).ToString(); if ((grp.UnwatchedEpisodeCount == 0) && grp.WatchedDate.HasValue) { p.LastViewedAt = grp.WatchedDate.Value.ToUnixTime(); } return(p); }
public System.IO.Stream Search(string UserId, string limit, string query, bool searchTag) { KodiObject ret = new KodiObject(KodiHelper.NewMediaContainer("Search", false)); ret.MediaContainer.Title2 = "Search Results for '" + query + "'..."; AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); AnimeSeriesRepository repSeries = new AnimeSeriesRepository(); int lim; if (!int.TryParse(limit, out lim)) { lim = 100; } JMMUser user = KodiHelper.GetUser(UserId); if (user == null) { return(new MemoryStream()); } List <Video> ls = new List <Video>(); int cnt = 0; List <AniDB_Anime> animes; if (searchTag) { animes = repAnime.SearchByTag(query); } else { animes = repAnime.SearchByName(query); } foreach (AniDB_Anime anidb_anime in animes) { if (!user.AllowedAnime(anidb_anime)) { continue; } AnimeSeries ser = repSeries.GetByAnimeID(anidb_anime.AnimeID); if (ser != null) { Contract_AnimeSeries cserie = ser.ToContract(ser.GetUserRecord(user.JMMUserID), true); Video v = KodiHelper.FromSerieWithPossibleReplacement(cserie, ser, user.JMMUserID); //proper naming v.OriginalTitle = ""; foreach (AniDB_Anime_Title title in anidb_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 Characters c = new Characters(); c.CharactersList = new List <Character>(); c.CharactersList = GetCharactersFromAniDB(anidb_anime); v.CharactersList = new List <Characters>(); v.CharactersList.Add(c); //experiment END switch (anidb_anime.AnimeTypeEnum) { case enAnimeType.Movie: v.SourceTitle = "Anime Movies"; break; case enAnimeType.OVA: v.SourceTitle = "Anime Ovas"; break; case enAnimeType.Other: v.SourceTitle = "Anime Others"; break; case enAnimeType.TVSeries: v.SourceTitle = "Anime Series"; break; case enAnimeType.TVSpecial: v.SourceTitle = "Anime Specials"; break; case enAnimeType.Web: v.SourceTitle = "Anime Web Clips"; break; } ls.Add(v); cnt++; if (cnt == lim) { break; } } } ret.MediaContainer.Childrens = ls; return(ret.GetStream()); }
public static Video GenerateFromAnimeGroup(ISession session, AnimeGroup grp, int userid, List <AnimeSeries> allSeries) { Contract_AnimeGroup cgrp = grp.GetUserContract(userid); int subgrpcnt = grp.GetAllChildGroups().Count; if ((cgrp.Stat_SeriesCount == 1) && (subgrpcnt == 0)) { AnimeSeries ser = JMMServiceImplementation.GetSeriesForGroup(grp.AnimeGroupID, allSeries); if (ser != null) { Contract_AnimeSeries cserie = ser.GetUserContract(userid); if (cserie != null) { Video v = GenerateFromSeries(cserie, ser, ser.GetAnime(session), userid); v.AirDate = ser.AirDate; v.UpdatedAt = ser.LatestEpisodeAirDate.HasValue ? ser.LatestEpisodeAirDate.Value.ToUnixTime() : null; v.Group = cgrp; return(v); } } } else { AnimeSeries ser = grp.DefaultAnimeSeriesID.HasValue ? allSeries.FirstOrDefault(a => a.AnimeSeriesID == grp.DefaultAnimeSeriesID.Value) : allSeries.Find(a => a.AirDate != DateTime.MinValue); if ((ser == null) && (allSeries != null && allSeries.Count > 0)) { ser = allSeries[0]; } Contract_AnimeSeries cserie = ser?.GetUserContract(userid); Video v = FromGroup(cgrp, cserie, userid, subgrpcnt); v.Group = cgrp; v.AirDate = cgrp.Stat_AirDate_Min ?? DateTime.MinValue; v.UpdatedAt = cgrp.LatestEpisodeAirDate?.ToUnixTime(); v.Rating = "" + Math.Round((grp.AniDBRating / 100), 1); List <Tag> newTags = new List <Tag>(); foreach (AniDB_Tag tag in grp.Tags) { Tag newTag = new Tag(); TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; newTag.Value = textInfo.ToTitleCase(tag.TagName.Trim()); if (!newTags.Contains(newTag)) { newTags.Add(newTag); } } v.Genres = newTags; if (ser != null) { List <AnimeTitle> newTitles = new List <AnimeTitle>(); foreach (AniDB_Anime_Title title in ser.GetAnime(session).GetTitles()) { AnimeTitle newTitle = new AnimeTitle(); newTitle.Title = title.Title; newTitle.Language = title.Language; newTitle.Type = title.TitleType; newTitles.Add(newTitle); } v.Titles = newTitles; v.Roles = new List <RoleTag>(); //TODO Character implementation is limited in JMM, One Character, could have more than one Seiyuu if (ser.GetAnime(session).Contract?.AniDBAnime?.Characters != null) { foreach (Contract_AniDB_Character c in ser.GetAnime(session).Contract.AniDBAnime.Characters) { string ch = c?.CharName; Contract_AniDB_Seiyuu seiyuu = c?.Seiyuu; if (!string.IsNullOrEmpty(ch)) { RoleTag t = new RoleTag(); t.Value = seiyuu?.SeiyuuName; if (seiyuu != null) { t.TagPicture = Helper.ConstructSeiyuuImage(seiyuu.AniDB_SeiyuuID); } t.Role = ch; t.RoleDescription = c?.CharDescription; t.RolePicture = Helper.ConstructCharacterImage(c.CharID); v.Roles.Add(t); } } } } return(v); } return(null); }
public System.IO.Stream GetItemsFromSerie(int userid, string SerieId, HistoryInfo info) { PlexObject ret = null; 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()); } Contract_AnimeSeries cseries = ser.ToContract(ser.GetUserRecord(userid), true); ImageDetails fanart = anime.GetDefaultFanartDetailsNoBlanks(session); //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; } } List <AnimeEpisode> episodes = ser.GetAnimeEpisodes(session).Where(a => a.GetVideoLocals(session).Count > 0).ToList(); if (eptype.HasValue) { ret = new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Episode, info, true)); if (!ret.Init()) { return(new MemoryStream()); } ret.MediaContainer.LeafCount = (cseries.WatchedEpisodeCount + cseries.UnwatchedEpisodeCount).ToString(); ret.MediaContainer.ViewedLeafCount = cseries.WatchedEpisodeCount.ToString(); episodes = episodes.Where(a => a.EpisodeTypeEnum == eptype.Value).ToList(); } else { ret = new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Show, info, true)); if (!ret.Init()) { return(new MemoryStream()); } ret.MediaContainer.LeafCount = (cseries.WatchedEpisodeCount + cseries.UnwatchedEpisodeCount).ToString(); ret.MediaContainer.ViewedLeafCount = cseries.WatchedEpisodeCount.ToString(); List <enEpisodeType> types = episodes.Select(a => a.EpisodeTypeEnum).Distinct().ToList(); if (types.Count > 1) { List <PlexEpisodeType> eps = new List <PlexEpisodeType>(); foreach (enEpisodeType ee in types) { PlexEpisodeType k2 = new PlexEpisodeType(); PlexEpisodeType.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 converttoseason = true; foreach (PlexEpisodeType ee in eps) { Video v = new Directory(); if (fanart != null) { v.Art = fanart.GenArt(); } v.Title = ee.Name; v.LeafCount = ee.Count.ToString(); v.ChildCount = v.LeafCount; v.ViewedLeafCount = "0"; v.Key = PlexHelper.ConstructSerieIdUrl(userid, ee.Type + "_" + ser.AnimeSeriesID); v.Thumb = PlexHelper.ConstructSupportImageLink(ee.Image); if ((ee.AnimeType == AnimeTypes.Movie) || (ee.AnimeType == AnimeTypes.OVA)) { v = PlexHelper.MayReplaceVideo(v, ser, cseries, anime, JMMType.File, userid, false); } dirs.Add(v, info); if (iosHack) { v.Thumb = ret.MediaContainer.ParentThumb; v.ParentThumb = ret.MediaContainer.GrandparentThumb; v.GrandparentThumb = ret.MediaContainer.GrandparentThumb; v.ParentKey = v.GrandparentKey; } } ret.Childrens = dirs; return(ret.GetStream()); } } List <Video> vids = new List <Video>(); Video nv = new Video(); PlexHelper.FillSerie(nv, ser, anime, cseries, userid); 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 { PlexHelper.PopulateVideo(v, current, ep, ser, cseries, anime, nv, JMMType.File, userid); 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) } } 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 AddInformationFromMasterSeries(Video v, Contract_AnimeSeries cserie, Video nv, bool omitExtraData = false) { bool ret = false; v.Art = nv.Art; v.ParentThumb = v.GrandparentThumb = nv.Thumb; if (cserie.AniDBAnime.AniDBAnime.Restricted > 0) { v.ContentRating = "R"; } if (cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.Movie) { v.Type = "movie"; if (v.Title.StartsWith("Complete Movie")) { v.Title = nv.Title; v.Summary = nv.Summary; v.Index = null; ret = true; } else if (v.Title.StartsWith("Part ")) { v.Title = nv.Title + " - " + v.Title; v.Summary = nv.Summary; } v.Thumb = nv.Thumb; } else if (cserie.AniDBAnime.AniDBAnime.AnimeType == (int)enAnimeType.OVA) { if (v.Title == "OVA") { v.Title = nv.Title; v.Type = "movie"; v.Thumb = nv.Thumb; v.Summary = nv.Summary; v.Index = null; ret = true; } } if (string.IsNullOrEmpty(v.Art)) { v.Art = nv.Art; } if (!omitExtraData) { if (v.Tags == null) { v.Tags = nv.Tags; } if (v.Genres == null) { v.Genres = nv.Genres; } if (v.Roles == null) { v.Roles = nv.Roles; } } if (string.IsNullOrEmpty(v.Rating)) { v.Rating = nv.Rating; } if (v.Thumb == null) { v.Thumb = v.ParentThumb; } v.IsMovie = ret; }
public static bool PopulateVideo(Video l, VideoLocal v, AnimeEpisode ep, AnimeSeries series, Contract_AnimeSeries cseries, AniDB_Anime ani, Video nv, JMMType type, int userid) { PopulateVideoEpisodeFromVideoLocal(l, v, type, userid); if (ep != null) { PopulateVideoEpisodeFromAnimeEpisode(l, ep, userid); if (series != null) { return(PopulateVideoEpisodeFromAnime(l, ep, series, cseries, ani, nv)); } } return(false); }
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()); } }
private static bool PopulateVideoEpisodeFromAnime(Video v, AnimeEpisode ep, AnimeSeries ser, Contract_AnimeSeries cserie, AniDB_Anime ani, Video nv) { bool ret = false; // v.ParentTitle = "Season 1"; // v.GrandparentTitle = ser.GetSeriesName(); v.ParentIndex = "1"; v.Art = ani.GetDefaultFanartDetailsNoBlanks().GenArt(); if (ep.EpisodeTypeEnum != enEpisodeType.Episode) { //v.ParentTitle = ep.ToString(); v.ParentIndex = null; } else if (cserie.CrossRefAniDBTvDBV2 != null && cserie.CrossRefAniDBTvDBV2.Count > 0) { Contract_CrossRef_AniDB_TvDBV2 c2 = cserie.CrossRefAniDBTvDBV2.FirstOrDefault( a => a.AniDBStartEpisodeType == ep.AniDB_Episode.EpisodeType && a.AniDBStartEpisodeNumber <= ep.AniDB_Episode.EpisodeNumber); if (c2 != null) { // v.ParentTitle = "Season " + c2.TvDBSeasonNumber; if (c2.TvDBSeasonNumber > 0) { v.ParentIndex = c2.TvDBSeasonNumber.ToString(); } } } //v.Title1 = v.GrandparentTitle; //v.Title2 = v.ParentTitle; if (ani != null) { if (ani.Restricted > 0) { v.ContentRating = "R"; } if (ani.AnimeTypeEnum == enAnimeType.Movie) { v.Type = "movie"; if (v.Title.StartsWith("Complete Movie")) { v.Title = nv.Title; v.Summary = nv.Summary; v.Index = null; ret = true; } else if (v.Title.StartsWith("Part ")) { v.Title = nv.Title + " - " + v.Title; v.Summary = nv.Summary; } v.Thumb = nv.Thumb; } else if (ani.AnimeTypeEnum == enAnimeType.OVA) { if (v.Title == "OVA") { v.Title = nv.Title; v.Type = "movie"; v.Thumb = nv.Thumb; v.Summary = nv.Summary; v.Index = null; ret = true; } } // else // v.ParentTitle = nv.Title; } if (string.IsNullOrEmpty(v.Art)) { v.Art = nv.Art; } if (v.Tags == null) { v.Tags = nv.Tags; } if (v.Genres == null) { v.Genres = nv.Genres; } if (v.Roles == null) { v.Roles = nv.Roles; } if (string.IsNullOrEmpty(v.Rating)) { v.Rating = nv.Rating; } v.Index = ep.AniDB_Episode.EpisodeNumber.ToString(); return(ret); }
public static void FillSerie(Video p, AnimeSeries aser, AniDB_Anime anidb, Contract_AnimeSeries ser, int userid) { using (ISession session = JMMService.SessionFactory.OpenSession()) { Contract_AniDBAnime anime = ser.AniDBAnime; p.Key = ConstructSerieIdUrl(userid, ser.AnimeSeriesID.ToString()); if (ser.AniDBAnime.Restricted > 0) { p.ContentRating = "R"; } p.Title = aser.GetSeriesName(session); p.Summary = SummaryFromAnimeContract(ser); p.Type = "show"; p.AirDate = DateTime.MinValue; TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; if (!string.IsNullOrEmpty(anime.AllTags)) { p.Genres = new List <Tag>(); anime.AllTags.Split('|').ToList().ForEach(a => p.Genres.Add(new Tag { Value = textInfo.ToTitleCase(a.Trim()) })); } //p.OriginalTitle if (anime.AirDate.HasValue) { p.AirDate = anime.AirDate.Value; p.OriginallyAvailableAt = anime.AirDate.Value.ToPlexDate(); p.Year = anime.AirDate.Value.Year.ToString(); } p.LeafCount = anime.EpisodeCount.ToString(); //p.ChildCount = p.LeafCount; p.ViewedLeafCount = ser.WatchedEpisodeCount.ToString(); p.Rating = (anime.Rating / 100F).ToString(CultureInfo.InvariantCulture); List <Contract_CrossRef_AniDB_TvDBV2> ls = ser.CrossRefAniDBTvDBV2; if (ls != null && ls.Count > 0) { foreach (Contract_CrossRef_AniDB_TvDBV2 c in ls) { if (c.TvDBSeasonNumber != 0) { p.Season = c.TvDBSeasonNumber.ToString(); p.Index = p.Season; } } } p.Thumb = anime.DefaultImagePoster.GenPoster(); p.Art = anime.DefaultImageFanart.GenArt(); List <AniDB_Anime_Character> chars = anidb.GetAnimeCharacters(session); p.Roles = new List <Tag>(); if (chars != null) { foreach (AniDB_Anime_Character c in chars) { AniDB_Character cha = c.GetCharacter(session); AniDB_Seiyuu seiyuu = cha?.GetSeiyuu(session); if (seiyuu != null) { p.Roles.Add(new Tag { Value = seiyuu.SeiyuuName, Role = cha.CharName }); } } } } }
private static void FillSerie(Video p, AnimeSeries aser, Dictionary <AnimeEpisode, Contract_AnimeEpisode> eps, AniDB_Anime anidb, Contract_AnimeSeries ser, int userid) { using (ISession session = JMMService.SessionFactory.OpenSession()) { Contract_AniDBAnime anime = ser.AniDBAnime.AniDBAnime; p.Id = ser.AnimeSeriesID.ToString(); p.AnimeType = JMMContracts.PlexAndKodi.AnimeTypes.AnimeSerie.ToString(); if (ser.AniDBAnime.AniDBAnime.Restricted > 0) { p.ContentRating = "R"; } p.Title = aser.GetSeriesName(session); p.Summary = SummaryFromAnimeContract(ser); p.Type = "show"; p.AirDate = DateTime.MinValue; TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; if (anime.AllTags.Count > 0) { p.Genres = new List <Tag>(); anime.AllTags.ToList().ForEach(a => p.Genres.Add(new Tag { Value = textInfo.ToTitleCase(a.Trim()) })); } //p.OriginalTitle if (anime.AirDate.HasValue) { p.AirDate = anime.AirDate.Value; p.OriginallyAvailableAt = anime.AirDate.Value.ToPlexDate(); p.Year = anime.AirDate.Value.Year.ToString(); } p.LeafCount = anime.EpisodeCount.ToString(); //p.ChildCount = p.LeafCount; p.ViewedLeafCount = ser.WatchedEpisodeCount.ToString(); p.Rating = (anime.Rating / 100F).ToString(CultureInfo.InvariantCulture); List <Contract_CrossRef_AniDB_TvDBV2> ls = ser.CrossRefAniDBTvDBV2; if (ls != null && ls.Count > 0) { foreach (Contract_CrossRef_AniDB_TvDBV2 c in ls) { if (c.TvDBSeasonNumber != 0) { p.Season = c.TvDBSeasonNumber.ToString(); p.Index = p.Season; } } } p.Thumb = p.ParentThumb = anime.DefaultImagePoster.GenPoster(); p.Art = anime?.DefaultImageFanart?.GenArt(); if (eps != null) { List <enEpisodeType> types = eps.Keys.Select(a => a.EpisodeTypeEnum).Distinct().ToList(); p.ChildCount = types.Count > 1 ? types.Count.ToString() : eps.Keys.Count.ToString(); } p.Roles = new List <RoleTag>(); //TODO Character implementation is limited in JMM, One Character, could have more than one Seiyuu if (anidb.Contract?.AniDBAnime?.Characters != null) { foreach (Contract_AniDB_Character c in anidb.Contract.AniDBAnime.Characters) { string ch = c?.CharName; Contract_AniDB_Seiyuu seiyuu = c?.Seiyuu; if (!string.IsNullOrEmpty(ch)) { RoleTag t = new RoleTag(); t.Value = seiyuu?.SeiyuuName; if (seiyuu != null) { t.TagPicture = Helper.ConstructSeiyuuImage(seiyuu.AniDB_SeiyuuID); } t.Role = ch; t.RoleDescription = c?.CharDescription; t.RolePicture = Helper.ConstructCharacterImage(c.CharID); p.Roles.Add(t); } } } p.Titles = new List <AnimeTitle>(); foreach (AniDB_Anime_Title title in anidb.GetTitles()) { p.Titles.Add(new AnimeTitle { Language = title.Language, Title = title.Title, Type = title.TitleType }); } } }
public static Directory FromSerie(Contract_AnimeSeries ser, int userid) { Directory p = new Directory(); Contract_AniDBAnime anime = ser.AniDBAnime; p.Key = ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressKodi + "/GetMetadata/" + userid + "/" + (int)JMMType.Serie + "/" + ser.AnimeSeriesID); if (ser.AniDBAnime.Restricted > 0) { p.ContentRating = "R"; } p.Title = anime.MainTitle; p.Summary = anime.Description; if (string.IsNullOrEmpty(p.Summary) && ser.MovieDB_Movie != null) { p.Summary = ser.MovieDB_Movie.Overview; } if (string.IsNullOrEmpty(p.Summary) && ser.TvDB_Series != null && ser.TvDB_Series.Count > 0) { p.Summary = ser.TvDB_Series[0].Overview; } p.Type = "season"; p.AirDate = DateTime.MinValue; if (!string.IsNullOrEmpty(anime.AllCategories)) { p.Genres = new List <Tag> { new Tag { Value = anime.AllCategories.Replace("|", ",") } }; } if (!string.IsNullOrEmpty(anime.AllTags)) { p.Tags = new List <Tag> { new Tag { Value = anime.AllTags.Replace("|", ",") } }; } p.OriginalTitle = anime.AllTitles; if (anime.AirDate.HasValue) { p.AirDate = anime.AirDate.Value; p.OriginallyAvailableAt = anime.AirDate.Value.Year.ToString("0000") + "-" + anime.AirDate.Value.Month.ToString("00") + "-" + anime.AirDate.Value.Day.ToString("00"); p.Year = anime.AirDate.Value.Year.ToString(); } p.LeafCount = anime.EpisodeCount.ToString(); p.ViewedLeafCount = ser.WatchedEpisodeCount.ToString(); p.Rating = (anime.Rating / 100F).ToString(CultureInfo.InvariantCulture); p.Votes = anime.VoteCount.ToString(); List <Contract_CrossRef_AniDB_TvDBV2> ls = ser.CrossRefAniDBTvDBV2; if (ls.Count > 0) { foreach (Contract_CrossRef_AniDB_TvDBV2 c in ls) { if (c.TvDBSeasonNumber != 0) { p.Season = c.TvDBSeasonNumber.ToString(); } } } Contract_AniDB_Anime_DefaultImage poster = anime.DefaultImagePoster; Contract_AniDB_Anime_DefaultImage fanart = anime.DefaultImageFanart; p.Thumb = poster != null?poster.GenPoster() : ServerUrl(int.Parse(ServerSettings.JMMServerPort), MainWindow.PathAddressKodi + "/GetSupportImage/plex_404V.png"); if (fanart != null) { p.Art = fanart.GenArt(); } /* * List<AniDB_Anime_Character> chars = anime.GetAnimeCharacters(session); * * List<string> sey=new List<string>(); * * if (chars != null) * { * foreach (AniDB_Anime_Character c in chars) * { * AniDB_Character cha = c.GetCharacter(session); * if (cha != null) * { * AniDB_Seiyuu seiyuu = cha.GetSeiyuu(session); * if (seiyuu!=null) * sey.Add(seiyuu.SeiyuuName); * } * } * } * if (sey.Count > 0) * p.Roles = sey.Select(a => new Tag() {Value = a}).ToList(); */ //community support //CrossRef_AniDB_TraktV2Repository repCrossRef = new CrossRef_AniDB_TraktV2Repository(); //List<CrossRef_AniDB_TraktV2> Trakt = repCrossRef.GetByAnimeID(anime.AnimeID); //if (Trakt != null) //{ // if (Trakt.Count > 0) // { // p.Trakt = Trakt[0].TraktID; // } //} //CrossRef_AniDB_TvDBV2Repository repCrossRefV2 = new CrossRef_AniDB_TvDBV2Repository(); //List<CrossRef_AniDB_TvDBV2> TvDB = repCrossRefV2.GetByAnimeID(anime.AnimeID); //if (TvDB != null) //{ // if (TvDB.Count > 0) // { // p.TvDB = TvDB[0].TvDBID.ToString(); // } //} //community support END return(p); }
public Contract_AnimeSeries ToContract(AniDB_Anime animeRec, List <CrossRef_AniDB_TvDBV2> tvDBCrossRefs, CrossRef_AniDB_Other movieDBCrossRef, AnimeSeries_User userRecord, List <TvDB_Series> tvseries, List <CrossRef_AniDB_MAL> malDBCrossRef, bool passedDefaultImages, AniDB_Anime_DefaultImage defPoster, AniDB_Anime_DefaultImage defFanart, AniDB_Anime_DefaultImage defWideBanner, List <AniDB_Anime_Title> titles, bool forceimages = false) { Contract_AnimeSeries contract = new Contract_AnimeSeries(); contract.AniDB_ID = this.AniDB_ID; contract.AnimeGroupID = this.AnimeGroupID; contract.AnimeSeriesID = this.AnimeSeriesID; contract.DateTimeUpdated = this.DateTimeUpdated; contract.DateTimeCreated = this.DateTimeCreated; contract.DefaultAudioLanguage = this.DefaultAudioLanguage; contract.DefaultSubtitleLanguage = this.DefaultSubtitleLanguage; contract.LatestLocalEpisodeNumber = this.LatestLocalEpisodeNumber; contract.EpisodeAddedDate = this.EpisodeAddedDate; contract.MissingEpisodeCount = this.MissingEpisodeCount; contract.MissingEpisodeCountGroups = this.MissingEpisodeCountGroups; contract.SeriesNameOverride = this.SeriesNameOverride; if (userRecord == null) { contract.PlayedCount = 0; contract.StoppedCount = 0; contract.UnwatchedEpisodeCount = 0; contract.WatchedCount = 0; contract.WatchedDate = null; contract.WatchedEpisodeCount = 0; } else { contract.PlayedCount = userRecord.PlayedCount; contract.StoppedCount = userRecord.StoppedCount; contract.UnwatchedEpisodeCount = userRecord.UnwatchedEpisodeCount; contract.WatchedCount = userRecord.WatchedCount; contract.WatchedDate = userRecord.WatchedDate; contract.WatchedEpisodeCount = userRecord.WatchedEpisodeCount; } // get AniDB data contract.AniDBAnime = null; if (animeRec != null) { Contract_AniDBAnime animecontract = animeRec.ToContract(false, titles); AniDB_Anime_DefaultImage defaultPoster = null; if (passedDefaultImages) { defaultPoster = defPoster; } else { defaultPoster = animeRec.GetDefaultPoster(); } if (defaultPoster == null) { animecontract.DefaultImagePoster = null; } else { animecontract.DefaultImagePoster = defaultPoster.ToContract(); } if ((animecontract.DefaultImagePoster == null) && (forceimages)) { ImageDetails im = animeRec.GetDefaultPosterDetailsNoBlanks(); if (im != null) { animecontract.DefaultImagePoster = new Contract_AniDB_Anime_DefaultImage(); animecontract.DefaultImagePoster.AnimeID = im.ImageID; animecontract.DefaultImagePoster.ImageType = (int)im.ImageType; } } AniDB_Anime_DefaultImage defaultFanart = null; if (passedDefaultImages) { defaultFanart = defFanart; } else { defaultFanart = animeRec.GetDefaultFanart(); } if (defaultFanart == null) { animecontract.DefaultImageFanart = null; } else { animecontract.DefaultImageFanart = defaultFanart.ToContract(); } if ((animecontract.DefaultImagePoster == null) && (forceimages)) { ImageDetails im = animeRec.GetDefaultFanartDetailsNoBlanks(); if (im != null) { animecontract.DefaultImageFanart = new Contract_AniDB_Anime_DefaultImage(); animecontract.DefaultImageFanart.AnimeID = im.ImageID; animecontract.DefaultImageFanart.ImageType = (int)im.ImageType; } } AniDB_Anime_DefaultImage defaultWideBanner = null; if (passedDefaultImages) { defaultWideBanner = defWideBanner; } else { defaultWideBanner = animeRec.GetDefaultWideBanner(); } if (defaultWideBanner == null) { animecontract.DefaultImageWideBanner = null; } else { animecontract.DefaultImageWideBanner = defaultWideBanner.ToContract(); } contract.AniDBAnime = animecontract; } contract.CrossRefAniDBTvDBV2 = new List <Contract_CrossRef_AniDB_TvDBV2>(); foreach (CrossRef_AniDB_TvDBV2 tvXref in tvDBCrossRefs) { contract.CrossRefAniDBTvDBV2.Add(tvXref.ToContract()); } contract.TvDB_Series = new List <Contract_TvDB_Series>(); foreach (TvDB_Series ser in tvseries) { contract.TvDB_Series.Add(ser.ToContract()); } contract.CrossRefAniDBMovieDB = null; if (movieDBCrossRef != null) { contract.CrossRefAniDBMovieDB = movieDBCrossRef.ToContract(); } contract.CrossRefAniDBMAL = new List <Contract_CrossRef_AniDB_MAL>(); if (malDBCrossRef != null) { foreach (CrossRef_AniDB_MAL xref in malDBCrossRef) { contract.CrossRefAniDBMAL.Add(xref.ToContract()); } } return(contract); }
public System.IO.Stream Search(string UserId, string limit, string query) { HistoryInfo info = new HistoryInfo { Key = PlexHelper.ConstructSearchUrl(UserId, limit, query), Title = "Search for '" + query + "'" }; PlexObject ret = new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Show, info, true)); AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); AnimeSeriesRepository repSeries = new AnimeSeriesRepository(); int lim; if (!int.TryParse(limit, out lim)) { lim = 20; } JMMUser user = PlexHelper.GetUser(UserId); if (user == null) { return(new MemoryStream()); } List <Video> ls = new List <Video>(); int cnt = 0; List <AniDB_Anime> animes = repAnime.SearchByName(query); foreach (AniDB_Anime anidb_anime in animes) { if (!user.AllowedAnime(anidb_anime)) { continue; } AnimeSeries ser = repSeries.GetByAnimeID(anidb_anime.AnimeID); if (ser != null) { Contract_AnimeSeries cserie = ser.ToContract(ser.GetUserRecord(user.JMMUserID), true); Video v = PlexHelper.FromSerieWithPossibleReplacement(cserie, ser, anidb_anime, user.JMMUserID); switch (anidb_anime.AnimeTypeEnum) { case enAnimeType.Movie: v.SourceTitle = "Anime Movies"; break; case enAnimeType.OVA: v.SourceTitle = "Anime Ovas"; break; case enAnimeType.Other: v.SourceTitle = "Anime Others"; break; case enAnimeType.TVSeries: v.SourceTitle = "Anime Series"; break; case enAnimeType.TVSpecial: v.SourceTitle = "Anime Specials"; break; case enAnimeType.Web: v.SourceTitle = "Anime Web Clips"; break; } ls.Add(v, info); cnt++; if (cnt == lim) { break; } } } ret.MediaContainer.Childrens = PlexHelper.ConvertToDirectoryIfNotUnique(ls); return(ret.GetStream()); }