private static Video FromGroup(CL_AnimeGroup_User grp, CL_AnimeSeries_User ser, int userid, int subgrpcnt) { Directory p = new Directory { Id = grp.AnimeGroupID, AnimeType = AnimeTypes.AnimeGroup.ToString(), Title = grp.GroupName, Summary = grp.Description, Type = "show", AirDate = grp.Stat_AirDate_Min ?? DateTime.MinValue }; if (grp.Stat_AllYears.Count > 0) { p.Year = grp.Stat_AllYears?.Min() ?? 0; } if (ser != null) { p.Thumb = ser.AniDBAnime?.AniDBAnime.DefaultImagePoster.GenPoster(null); p.Art = ser.AniDBAnime?.AniDBAnime.DefaultImageFanart.GenArt(null); } p.LeafCount = grp.UnwatchedEpisodeCount + grp.WatchedEpisodeCount; p.ViewedLeafCount = grp.WatchedEpisodeCount; p.ChildCount = grp.Stat_SeriesCount + subgrpcnt; if ((grp.UnwatchedEpisodeCount == 0) && grp.WatchedDate.HasValue) { p.LastViewedAt = grp.WatchedDate.Value.ToUnixTime(); } return(p); }
public static Video GenerateFromSeries(CL_AnimeSeries_User cserie, SVR_AnimeSeries ser, SVR_AniDB_Anime anidb, int userid, ISessionWrapper session = null) { Video v = new Directory(); Dictionary <SVR_AnimeEpisode, CL_AnimeEpisode_User> episodes = ser.GetAnimeEpisodes() .ToDictionary(a => a, a => a.GetUserContract(userid, session)); 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)AnimeType.Movie) || (cserie.AniDBAnime.AniDBAnime.AnimeType == (int)AnimeType.OVA)) { v = MayReplaceVideo(v, ser, cserie, userid); } return(v); }
public static Directory DirectoryFromFilter(IProvider prov, SVR_GroupFilter gg, int userid) { Directory pp = new Directory { Type = "show" }; pp.Key = prov.ConstructFilterIdUrl(userid, gg.GroupFilterID); pp.Title = gg.GroupFilterName; pp.Id = gg.GroupFilterID; pp.AnimeType = AnimeTypes.AnimeGroupFilter.ToString(); if ((gg.FilterType & (int)GroupFilterType.Directory) == (int)GroupFilterType.Directory) { GetValidVideoRecursive(prov, gg, userid, pp); } else if (gg.GroupsIds.ContainsKey(userid)) { HashSet <int> groups = gg.GroupsIds[userid]; if (groups.Count == 0) { return(pp); } pp.LeafCount = groups.Count; pp.ViewedLeafCount = 0; foreach (int grp in groups.Randomize()) { SVR_AnimeGroup ag = RepoFactory.AnimeGroup.GetByID(grp); Video v = ag.GetPlexContract(userid); if (v?.Art == null || v.Thumb == null) { continue; } pp.Art = prov.ReplaceSchemeHost(v.Art); pp.Thumb = prov.ReplaceSchemeHost(v.Thumb); break; } return(pp); } return(pp); }
private static void GetValidVideoRecursive(IProvider prov, SVR_GroupFilter f, int userid, Directory pp) { List <SVR_GroupFilter> gfs = RepoFactory.GroupFilter.GetByParentID(f.GroupFilterID) .Where(a => a.GroupsIds.ContainsKey(userid) && a.GroupsIds[userid].Count > 0) .ToList(); foreach (SVR_GroupFilter gg in gfs.Where(a => (a.FilterType & (int)GroupFilterType.Directory) == 0)) { if (gg.GroupsIds.ContainsKey(userid)) { HashSet <int> groups = gg.GroupsIds[userid]; if (groups.Count != 0) { foreach (int grp in groups.Randomize(f.GroupFilterID)) { SVR_AnimeGroup ag = RepoFactory.AnimeGroup.GetByID(grp); Video v = ag.GetPlexContract(userid); if (v?.Art == null || v.Thumb == null) { continue; } pp.Art = prov.ReplaceSchemeHost(v.Art); pp.Thumb = prov.ReplaceSchemeHost(v.Thumb); break; } } } if (pp.Art != null) { break; } } if (pp.Art == null) { foreach (SVR_GroupFilter gg in gfs .Where(a => (a.FilterType & (int)GroupFilterType.Directory) == (int)GroupFilterType.Directory && a.InvisibleInClients == 0) .Randomize(f.GroupFilterID)) { GetValidVideoRecursive(prov, gg, userid, pp); if (pp.Art != null) { break; } } } pp.LeafCount = gfs.Count; pp.ViewedLeafCount = 0; }