Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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;
        }