Ejemplo n.º 1
0
        private static void CreateContinueWatchingGroupFilter()
        {
            // group filters
            GroupFilterRepository          repFilters = new GroupFilterRepository();
            GroupFilterConditionRepository repGFC     = new GroupFilterConditionRepository();

            using (var session = JMMService.SessionFactory.OpenSession())
            {
                // check if it already exists
                List <GroupFilter> lockedGFs = repFilters.GetLockedGroupFilters(session);

                if (lockedGFs != null)
                {
                    // if it already exists we can leave
                    foreach (GroupFilter gfTemp in lockedGFs)
                    {
                        if (gfTemp.FilterType == (int)GroupFilterType.ContinueWatching)
                        {
                            return;
                        }
                    }

                    // the default value when the column was added to the database was '1'
                    // this is only needed for users of a migrated database
                    foreach (GroupFilter gfTemp in lockedGFs)
                    {
                        if (gfTemp.GroupFilterName.Equals(Constants.GroupFilterName.ContinueWatching, StringComparison.InvariantCultureIgnoreCase) &&
                            gfTemp.FilterType != (int)GroupFilterType.ContinueWatching)
                        {
                            FixContinueWatchingGroupFilter_20160406();
                            return;
                        }
                    }
                }

                GroupFilter gf = new GroupFilter();
                gf.GroupFilterName = Constants.GroupFilterName.ContinueWatching;
                gf.Locked          = 1;
                gf.SortingCriteria = "4;2";           // by last watched episode desc
                gf.ApplyToSeries   = 0;
                gf.BaseCondition   = 1;               // all
                gf.FilterType      = (int)GroupFilterType.ContinueWatching;

                repFilters.Save(gf);

                GroupFilterCondition gfc = new GroupFilterCondition();
                gfc.ConditionType      = (int)GroupFilterConditionType.HasWatchedEpisodes;
                gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
                gfc.ConditionParameter = "";
                gfc.GroupFilterID      = gf.GroupFilterID;
                repGFC.Save(gfc);

                gfc = new GroupFilterCondition();
                gfc.ConditionType      = (int)GroupFilterConditionType.HasUnwatchedEpisodes;
                gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
                gfc.ConditionParameter = "";
                gfc.GroupFilterID      = gf.GroupFilterID;
                repGFC.Save(gfc);
            }
        }
Ejemplo n.º 2
0
 public Condition(GroupFilterCondition condition)
 {
     ID        = condition.GroupFilterConditionID;
     Type      = (GroupFilterConditionType)condition.ConditionType;
     Operator  = (GroupFilterOperator)condition.ConditionOperator;
     Parameter = condition.ConditionParameter;
 }
Ejemplo n.º 3
0
            /// <summary>
            /// Creates a server model compatible with the database. This does not calculate any cached data, such as groups and series.
            /// </summary>
            /// <returns></returns>
            public SVR_GroupFilter ToServerModel(SVR_GroupFilter existing = null)
            {
                var groupFilter = new SVR_GroupFilter
                {
                    FilterType          = Directory ? (int)(GroupFilterType.UserDefined | GroupFilterType.Directory) : (int)GroupFilterType.UserDefined,
                    ApplyToSeries       = ApplyAtSeriesLevel ? 1 : 0,
                    GroupFilterName     = Name,
                    InvisibleInClients  = HideInAPI ? 1 : 0,
                    ParentGroupFilterID = ParentID == 0 ? (int?)null : ParentID,
                    // Conditions
                    BaseCondition = (int)(Conditions.InvertLogic
                        ? GroupFilterBaseCondition.Exclude
                        : GroupFilterBaseCondition.Include),
                    Conditions = Conditions.Conditions.Select(c =>
                    {
                        GroupFilterCondition condition = new GroupFilterCondition();

                        return(condition);
                    }).ToList(),
                    // Sorting
                    SortCriteriaList = Sorting.Select(s =>
                    {
                        GroupFilterSortingCriteria criteria = new GroupFilterSortingCriteria
                        {
                            SortType      = s.Type,
                            SortDirection = s.Descending ? GroupFilterSortDirection.Desc : GroupFilterSortDirection.Asc
                        };
                        return(criteria);
                    }).ToList()
                };

                // Return new group filter.
                if (existing == null)
                {
                    return(groupFilter);
                }

                // Merge into existing group filter.
                existing.ApplyToSeries       = groupFilter.ApplyToSeries;
                existing.ParentGroupFilterID = groupFilter.ParentGroupFilterID;
                existing.FilterType          = groupFilter.FilterType;
                existing.InvisibleInClients  = groupFilter.InvisibleInClients;
                if (groupFilter.GroupFilterName != null)
                {
                    existing.GroupFilterName = groupFilter.GroupFilterName;
                }
                if (groupFilter.Conditions != null)
                {
                    existing.BaseCondition = groupFilter.BaseCondition;
                    existing.Conditions    = groupFilter.Conditions;
                }
                if (groupFilter.SortCriteriaList != null)
                {
                    existing.SortCriteriaList = groupFilter.SortCriteriaList;
                }
                return(existing);
            }
Ejemplo n.º 4
0
            /// <summary>
            /// Creates a server model compatible with the database. This does not calculate any cached data, such as groups and series.
            /// </summary>
            /// <returns></returns>
            public SVR_GroupFilter ToServerModel(SVR_GroupFilter existing = null)
            {
                SVR_GroupFilter gf = new SVR_GroupFilter
                {
                    FilterType          = (int)Type,
                    ApplyToSeries       = ApplyAtSeriesLevel ? 1 : 0,
                    GroupFilterName     = Name,
                    InvisibleInClients  = HideInAPI ? 1 : 0,
                    ParentGroupFilterID = ParentID == 0 ? (int?)null : ParentID,
                    // Conditions
                    BaseCondition = (int)(Conditions.InvertLogic
                        ? GroupFilterBaseCondition.Exclude
                        : GroupFilterBaseCondition.Include),
                    Conditions = Conditions.Conditions.Select(c =>
                    {
                        GroupFilterCondition condition = new GroupFilterCondition();

                        return(condition);
                    }).ToList(),
                    // Sorting
                    SortCriteriaList = Sorting.Select(s =>
                    {
                        GroupFilterSortingCriteria criteria = new GroupFilterSortingCriteria
                        {
                            SortType      = s.Type,
                            SortDirection = s.Descending ? GroupFilterSortDirection.Desc : GroupFilterSortDirection.Asc
                        };
                        return(criteria);
                    }).ToList()
                };

                // Merge into existing
                if (existing == null)
                {
                    return(gf);
                }

                if (gf.GroupFilterName != null)
                {
                    existing.GroupFilterName = gf.GroupFilterName;
                }
                if (gf.Conditions != null)
                {
                    existing.BaseCondition = gf.BaseCondition;
                    existing.Conditions    = gf.Conditions;
                }
                if (gf.SortCriteriaList != null)
                {
                    existing.SortCriteriaList = gf.SortCriteriaList;
                }
                existing.ApplyToSeries       = gf.ApplyToSeries;
                existing.ParentGroupFilterID = gf.ParentGroupFilterID;
                existing.FilterType          = gf.FilterType;
                existing.InvisibleInClients  = gf.InvisibleInClients;
                return(existing);
            }
        private void DropAndCreateAllTagFilters(ISessionWrapper session)
        {
            var             locked    = GetAll(session);
            SVR_GroupFilter tagsdirec = locked.FirstOrDefault(
                a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Tag));
            var tagFilters = locked.Where(a => a.FilterType == (int)GroupFilterType.Tag).ToList();

            using (ITransaction trans = session.BeginTransaction())
            {
                BatchDelete(session, tagFilters);
                trans.Commit();
            }

            if (tagsdirec != null)
            {
                HashSet <string> alltags = new HashSet <string>(
                    RepoFactory.AniDB_Tag.GetAllForLocalSeries().Select(a => a.TagName.Replace('`', '\'')),
                    StringComparer.InvariantCultureIgnoreCase);
                List <SVR_GroupFilter> toAdd = new List <SVR_GroupFilter>(alltags.Count);

                //AniDB Tags are in english so we use en-us culture
                TextInfo tinfo = new CultureInfo("en-US", false).TextInfo;
                foreach (string s in alltags)
                {
                    SVR_GroupFilter yf = new SVR_GroupFilter
                    {
                        ParentGroupFilterID = tagsdirec.GroupFilterID,
                        InvisibleInClients  = 0,
                        ApplyToSeries       = 1,
                        GroupFilterName     = tinfo.ToTitleCase(s),
                        BaseCondition       = 1,
                        Locked          = 1,
                        SortingCriteria = "5;1",
                        FilterType      = (int)GroupFilterType.Tag
                    };
                    GroupFilterCondition gfc = new GroupFilterCondition
                    {
                        ConditionType      = (int)GroupFilterConditionType.Tag,
                        ConditionOperator  = (int)GroupFilterOperator.In,
                        ConditionParameter = s,
                        GroupFilterID      = yf.GroupFilterID
                    };
                    yf.Conditions.Add(gfc);
                    toAdd.Add(yf);
                }

                using (ITransaction trans = session.BeginTransaction())
                {
                    BatchInsert(session, toAdd);
                    trans.Commit();
                }
            }
        }
Ejemplo n.º 6
0
        public void Save(GroupFilterCondition obj)
        {
            using (var session = JMMService.SessionFactory.OpenSession())
            {
                // populate the database
                using (var transaction = session.BeginTransaction())
                {
                    session.SaveOrUpdate(obj);
                    transaction.Commit();
                }
            }

            logger.Trace("Updating group filter stats by groupfilter condition from GroupFilterConditionRepository.Save: {0}", obj.GroupFilterID);
            StatsCache.Instance.UpdateGroupFilterUsingGroupFilter(obj.GroupFilterID);
        }
Ejemplo n.º 7
0
        public void Delete(int id)
        {
            GroupFilterCondition cr = null;

            using (var session = JMMService.SessionFactory.OpenSession())
            {
                // populate the database
                using (var transaction = session.BeginTransaction())
                {
                    cr = GetByID(id);
                    if (cr != null)
                    {
                        session.Delete(cr);
                        transaction.Commit();
                    }
                }
            }
            if (cr != null)
            {
                logger.Trace("Updating group filter stats by groupfilter condition from GroupFilterConditionRepository.Delete: {0}", cr.GroupFilterID);
                StatsCache.Instance.UpdateGroupFilterUsingGroupFilter(cr.GroupFilterID);
            }
        }
Ejemplo n.º 8
0
        private void CreateInitialGroupFilters()
        {
            // group filters

            if (RepoFactory.GroupFilter.GetAll().Any())
            {
                return;
            }

            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Culture);

            // Favorites
            SVR_GroupFilter gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_Favorites,
                ApplyToSeries   = 0,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            GroupFilterCondition gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.Favourite,
                ConditionOperator  = (int)GroupFilterOperator.Include,
                ConditionParameter = string.Empty
            };

            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);

            // Missing Episodes
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_MissingEpisodes,
                ApplyToSeries   = 0,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.MissingEpisodesCollecting,
                ConditionOperator  = (int)GroupFilterOperator.Include,
                ConditionParameter = string.Empty
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);


            // Newly Added Series
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_Added,
                ApplyToSeries   = 0,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.SeriesCreatedDate,
                ConditionOperator  = (int)GroupFilterOperator.LastXDays,
                ConditionParameter = "10"
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);

            // Newly Airing Series
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_Airing,
                ApplyToSeries   = 0,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.AirDate,
                ConditionOperator  = (int)GroupFilterOperator.LastXDays,
                ConditionParameter = "30"
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);

            // Votes Needed
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_Votes,
                ApplyToSeries   = 1,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.CompletedSeries,
                ConditionOperator  = (int)GroupFilterOperator.Include,
                ConditionParameter = string.Empty
            };
            gf.Conditions.Add(gfc);
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.HasUnwatchedEpisodes,
                ConditionOperator  = (int)GroupFilterOperator.Exclude,
                ConditionParameter = string.Empty
            };
            gf.Conditions.Add(gfc);
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.UserVotedAny,
                ConditionOperator  = (int)GroupFilterOperator.Exclude,
                ConditionParameter = string.Empty
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);

            // Recently Watched
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_RecentlyWatched,
                ApplyToSeries   = 0,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.EpisodeWatchedDate,
                ConditionOperator  = (int)GroupFilterOperator.LastXDays,
                ConditionParameter = "10"
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);

            // TvDB/MovieDB Link Missing
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_LinkMissing,
                ApplyToSeries   = 1, // This makes far more sense as applied to series
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.AssignedTvDBOrMovieDBInfo,
                ConditionOperator  = (int)GroupFilterOperator.Exclude,
                ConditionParameter = string.Empty
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);
        }
Ejemplo n.º 9
0
        private static void CreateInitialGroupFilters()
        {
            // group filters
            GroupFilterRepository          repFilters = new GroupFilterRepository();
            GroupFilterConditionRepository repGFC     = new GroupFilterConditionRepository();

            if (repFilters.GetAll().Count() > 0)
            {
                return;
            }

            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Culture);

            // Favorites
            GroupFilter gf = new GroupFilter();

            gf.GroupFilterName = JMMServer.Properties.Resources.Filter_Favorites;
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;
            gf.Locked          = 0;
            gf.FilterType      = (int)GroupFilterType.UserDefined;
            GroupFilterCondition gfc = new GroupFilterCondition();

            gfc.ConditionType      = (int)GroupFilterConditionType.Favourite;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
            gfc.ConditionParameter = "";
            gf.Conditions.Add(gfc);
            gf.EvaluateAnimeGroups();
            gf.EvaluateAnimeSeries();
            repFilters.Save(gf);

            // Missing Episodes
            gf = new GroupFilter();
            gf.GroupFilterName = JMMServer.Properties.Resources.Filter_MissingEpisodes;
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;
            gf.Locked          = 0;
            gf.FilterType      = (int)GroupFilterType.UserDefined;
            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.MissingEpisodesCollecting;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
            gfc.ConditionParameter = "";
            gf.Conditions.Add(gfc);
            gf.EvaluateAnimeGroups();
            gf.EvaluateAnimeSeries();
            repFilters.Save(gf);


            // Newly Added Series
            gf = new GroupFilter();
            gf.GroupFilterName = JMMServer.Properties.Resources.Filter_Added;
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;
            gf.Locked          = 0;
            gf.FilterType      = (int)GroupFilterType.UserDefined;
            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.SeriesCreatedDate;
            gfc.ConditionOperator  = (int)GroupFilterOperator.LastXDays;
            gfc.ConditionParameter = "10";
            gf.Conditions.Add(gfc);
            gf.EvaluateAnimeGroups();
            gf.EvaluateAnimeSeries();
            repFilters.Save(gf);

            // Newly Airing Series
            gf = new GroupFilter();
            gf.GroupFilterName = JMMServer.Properties.Resources.Filter_Airing;
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;
            gf.Locked          = 0;
            gf.FilterType      = (int)GroupFilterType.UserDefined;
            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.AirDate;
            gfc.ConditionOperator  = (int)GroupFilterOperator.LastXDays;
            gfc.ConditionParameter = "30";
            gf.Conditions.Add(gfc);
            gf.EvaluateAnimeGroups();
            gf.EvaluateAnimeSeries();
            repFilters.Save(gf);

            // Votes Needed
            gf = new GroupFilter();
            gf.GroupFilterName = JMMServer.Properties.Resources.Filter_Votes;
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;
            gf.Locked          = 0;
            gf.FilterType      = (int)GroupFilterType.UserDefined;
            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.CompletedSeries;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
            gfc.ConditionParameter = "";
            gf.Conditions.Add(gfc);
            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.HasUnwatchedEpisodes;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Exclude;
            gfc.ConditionParameter = "";
            gf.Conditions.Add(gfc);
            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.UserVotedAny;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Exclude;
            gfc.ConditionParameter = "";
            gf.Conditions.Add(gfc);
            gf.EvaluateAnimeGroups();
            gf.EvaluateAnimeSeries();
            repFilters.Save(gf);

            // Recently Watched
            gf = new GroupFilter();
            gf.GroupFilterName = JMMServer.Properties.Resources.Filter_RecentlyWatched;
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;
            gf.Locked          = 0;
            gf.FilterType      = (int)GroupFilterType.UserDefined;
            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.EpisodeWatchedDate;
            gfc.ConditionOperator  = (int)GroupFilterOperator.LastXDays;
            gfc.ConditionParameter = "10";
            gf.Conditions.Add(gfc);
            gf.EvaluateAnimeGroups();
            gf.EvaluateAnimeSeries();
            repFilters.Save(gf);

            // TvDB/MovieDB Link Missing
            gf = new GroupFilter();
            gf.GroupFilterName = JMMServer.Properties.Resources.Filter_LinkMissing;
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;
            gf.Locked          = 0;
            gf.FilterType      = (int)GroupFilterType.UserDefined;
            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.AssignedTvDBOrMovieDBInfo;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Exclude;
            gfc.ConditionParameter = "";
            gf.Conditions.Add(gfc);
            gf.EvaluateAnimeGroups();
            gf.EvaluateAnimeSeries();
            repFilters.Save(gf);
        }
Ejemplo n.º 10
0
        public void CreateOrVerifyTagsAndYearsFilters(bool frominit = false, HashSet <string> tags = null, DateTime?airdate = null)
        {
            using (var session = JMMService.SessionFactory.OpenSession())
            {
                string t = "GroupFilter";

                List <GroupFilter> lockedGFs = GetLockedGroupFilters();


                GroupFilter tagsdirec = lockedGFs.FirstOrDefault(a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Tag));
                if (tagsdirec != null)
                {
                    HashSet <string> alltags;
                    if (tags == null)
                    {
                        alltags = new HashSet <string>(RepoFactory.AniDB_Tag.GetAll().Select(a => a.TagName).Distinct(StringComparer.InvariantCultureIgnoreCase), StringComparer.InvariantCultureIgnoreCase);
                    }
                    else
                    {
                        alltags = new HashSet <string>(tags.Distinct(StringComparer.InvariantCultureIgnoreCase), StringComparer.InvariantCultureIgnoreCase);
                    }
                    HashSet <string> notin = new HashSet <string>(lockedGFs.Where(a => a.FilterType == (int)GroupFilterType.Tag).Select(a => a.Conditions.FirstOrDefault()?.ConditionParameter), StringComparer.InvariantCultureIgnoreCase);
                    alltags.ExceptWith(notin);

                    int max = alltags.Count;
                    int cnt = 0;
                    //AniDB Tags are in english so we use en-us culture
                    TextInfo tinfo = new CultureInfo("en-US", false).TextInfo;
                    foreach (string s in alltags)
                    {
                        cnt++;
                        if (frominit)
                        {
                            ServerState.Instance.CurrentSetupStatus = string.Format(JMMServer.Properties.Resources.Database_Cache, t,
                                                                                    Properties.Resources.Filter_CreatingTag + " '" + s + "'" + Properties.Resources.Filter_Filter + cnt + "/" + max);
                        }
                        GroupFilter yf = new GroupFilter
                        {
                            ParentGroupFilterID = tagsdirec.GroupFilterID,
                            InvisibleInClients  = 0,
                            GroupFilterName     = tinfo.ToTitleCase(s.Replace("`", "'")),
                            BaseCondition       = 1,
                            Locked          = 1,
                            SortingCriteria = "5;1",
                            FilterType      = (int)GroupFilterType.Tag
                        };
                        GroupFilterCondition gfc = new GroupFilterCondition();
                        gfc.ConditionType      = (int)GroupFilterConditionType.Tag;
                        gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
                        gfc.ConditionParameter = s;
                        gfc.GroupFilterID      = yf.GroupFilterID;
                        yf.Conditions.Add(gfc);
                        yf.EvaluateAnimeGroups();
                        yf.EvaluateAnimeSeries();
                        Save(yf);
                    }
                }
                GroupFilter yearsdirec = lockedGFs.FirstOrDefault(a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Year));
                if (yearsdirec != null)
                {
                    HashSet <string> allyears;
                    if (airdate == null)
                    {
                        List <Contract_AnimeGroup> grps =
                            RepoFactory.AnimeGroup.GetAll().Select(a => a.Contract).Where(a => a != null).ToList();
                        if (grps.Any(a => a.Stat_AirDate_Min.HasValue && a.Stat_AirDate_Max.HasValue))
                        {
                            DateTime maxtime =
                                grps.Where(a => a.Stat_AirDate_Max.HasValue).Max(a => a.Stat_AirDate_Max.Value);
                            DateTime mintime =
                                grps.Where(a => a.Stat_AirDate_Min.HasValue).Min(a => a.Stat_AirDate_Min.Value);
                            allyears =
                                new HashSet <string>(
                                    Enumerable.Range(mintime.Year, maxtime.Year - mintime.Year + 1)
                                    .Select(a => a.ToString()), StringComparer.InvariantCultureIgnoreCase);
                        }
                        else
                        {
                            allyears = new HashSet <string>();
                        }
                    }
                    else
                    {
                        allyears = new HashSet <string>(new string[] { airdate.Value.Year.ToString() });
                    }
                    HashSet <string> notin =
                        new HashSet <string>(
                            lockedGFs.Where(a => a.FilterType == (int)GroupFilterType.Year)
                            .Select(a => a.Conditions.FirstOrDefault()?.ConditionParameter),
                            StringComparer.InvariantCultureIgnoreCase);
                    allyears.ExceptWith(notin);
                    int max = allyears.Count;
                    int cnt = 0;
                    foreach (string s in allyears)
                    {
                        cnt++;
                        if (frominit)
                        {
                            ServerState.Instance.CurrentSetupStatus = string.Format(JMMServer.Properties.Resources.Database_Cache, t,
                                                                                    Properties.Resources.Filter_CreatingYear + " '" + s + "'  " + Properties.Resources.Filter_Filter + cnt + "/" + max);
                        }
                        GroupFilter yf = new GroupFilter
                        {
                            ParentGroupFilterID = yearsdirec.GroupFilterID,
                            InvisibleInClients  = 0,
                            GroupFilterName     = s,
                            BaseCondition       = 1,
                            Locked          = 1,
                            SortingCriteria = "5;1",
                            FilterType      = (int)GroupFilterType.Year
                        };
                        GroupFilterCondition gfc = new GroupFilterCondition();
                        gfc.ConditionType      = (int)GroupFilterConditionType.Year;
                        gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
                        gfc.ConditionParameter = s;
                        gfc.GroupFilterID      = yf.GroupFilterID;
                        yf.Conditions.Add(gfc);
                        yf.EvaluateAnimeGroups();
                        yf.EvaluateAnimeSeries();
                        Save(yf);
                    }
                }
            }
        }
Ejemplo n.º 11
0
        //TODO Cleanup function for Empty Tags and Empty Years



        public void CreateOrVerifyLockedFilters()
        {
            using (var session = JMMService.SessionFactory.OpenSession())
            {
                string t = "GroupFilter";

                List <GroupFilter> lockedGFs = RepoFactory.GroupFilter.GetLockedGroupFilters();
                //Continue Watching
                // check if it already exists

                ServerState.Instance.CurrentSetupStatus = string.Format(JMMServer.Properties.Resources.Database_Cache, t, " " + Properties.Resources.Filter_CreateContinueWatching);

                GroupFilter cwatching =
                    lockedGFs.FirstOrDefault(
                        a =>
                        a.FilterType == (int)GroupFilterType.ContinueWatching);
                if (cwatching != null && cwatching.FilterType != (int)GroupFilterType.ContinueWatching)
                {
                    ServerState.Instance.CurrentSetupStatus = string.Format(JMMServer.Properties.Resources.Database_Cache, t, " " + Properties.Resources.Filter_CreateContinueWatching);
                    cwatching.FilterType = (int)GroupFilterType.ContinueWatching;
                    Save(cwatching);
                }
                else if (cwatching == null)
                {
                    ServerState.Instance.CurrentSetupStatus = string.Format(JMMServer.Properties.Resources.Database_Cache, t, " " + Properties.Resources.Filter_CreateContinueWatching);
                    GroupFilter gf = new GroupFilter();
                    gf.GroupFilterName    = Constants.GroupFilterName.ContinueWatching;
                    gf.Locked             = 1;
                    gf.SortingCriteria    = "4;2"; // by last watched episode desc
                    gf.ApplyToSeries      = 0;
                    gf.BaseCondition      = 1;     // all
                    gf.FilterType         = (int)GroupFilterType.ContinueWatching;
                    gf.InvisibleInClients = 0;
                    gf.Conditions         = new List <GroupFilterCondition>();

                    GroupFilterCondition gfc = new GroupFilterCondition();
                    gfc.ConditionType      = (int)GroupFilterConditionType.HasWatchedEpisodes;
                    gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
                    gfc.ConditionParameter = "";
                    gfc.GroupFilterID      = gf.GroupFilterID;
                    gf.Conditions.Add(gfc);
                    gfc = new GroupFilterCondition();
                    gfc.ConditionType      = (int)GroupFilterConditionType.HasUnwatchedEpisodes;
                    gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
                    gfc.ConditionParameter = "";
                    gfc.GroupFilterID      = gf.GroupFilterID;
                    gf.Conditions.Add(gfc);
                    gf.EvaluateAnimeGroups();
                    gf.EvaluateAnimeSeries();
                    Save(gf); //Get ID
                }
                //Create All filter
                GroupFilter allfilter = lockedGFs.FirstOrDefault(a => a.FilterType == (int)GroupFilterType.All);
                if (allfilter == null)
                {
                    ServerState.Instance.CurrentSetupStatus = string.Format(JMMServer.Properties.Resources.Database_Cache, t, " " + Properties.Resources.Filter_CreateAll);
                    GroupFilter gf = new GroupFilter
                    {
                        GroupFilterName    = Properties.Resources.Filter_All,
                        Locked             = 1,
                        InvisibleInClients = 0,
                        FilterType         = (int)GroupFilterType.All,
                        BaseCondition      = 1,
                        SortingCriteria    = "5;1"
                    };
                    gf.EvaluateAnimeGroups();
                    gf.EvaluateAnimeSeries();
                    Save(gf);
                }
                GroupFilter tagsdirec =
                    lockedGFs.FirstOrDefault(
                        a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Tag));
                if (tagsdirec == null)
                {
                    tagsdirec = new GroupFilter
                    {
                        GroupFilterName    = Properties.Resources.Filter_Tags,
                        InvisibleInClients = 0,
                        FilterType         = (int)(GroupFilterType.Directory | GroupFilterType.Tag),
                        BaseCondition      = 1,
                        Locked             = 1,
                        SortingCriteria    = "13;1"
                    };
                    Save(tagsdirec);
                }
                GroupFilter yearsdirec =
                    lockedGFs.FirstOrDefault(
                        a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Year));
                if (yearsdirec == null)
                {
                    yearsdirec = new GroupFilter
                    {
                        GroupFilterName    = Properties.Resources.Filter_Years,
                        InvisibleInClients = 0,
                        FilterType         = (int)(GroupFilterType.Directory | GroupFilterType.Year),
                        BaseCondition      = 1,
                        Locked             = 1,
                        SortingCriteria    = "13;1"
                    };
                    Save(yearsdirec);
                }
            }
            CreateOrVerifyTagsAndYearsFilters(true);
        }
        private void CreateAllTagFilters(ISessionWrapper session, SVR_GroupFilter tagsdirec, Dictionary <int, ILookup <string, int> > lookup)
        {
            if (tagsdirec == null)
            {
                return;
            }

            HashSet <string> alltags = new HashSet <string>(
                RepoFactory.AniDB_Tag.GetAllForLocalSeries().Select(a => a.TagName.Replace('`', '\'')),
                StringComparer.InvariantCultureIgnoreCase);
            List <SVR_GroupFilter> toAdd = new List <SVR_GroupFilter>(alltags.Count);

            var users = RepoFactory.JMMUser.GetAll().ToList();

            //AniDB Tags are in english so we use en-us culture
            TextInfo tinfo = new CultureInfo("en-US", false).TextInfo;

            foreach (string s in alltags)
            {
                SVR_GroupFilter yf = new SVR_GroupFilter
                {
                    ParentGroupFilterID = tagsdirec.GroupFilterID,
                    InvisibleInClients  = 0,
                    ApplyToSeries       = 1,
                    GroupFilterName     = tinfo.ToTitleCase(s),
                    BaseCondition       = 1,
                    Locked          = 1,
                    SortingCriteria = "5;1",
                    FilterType      = (int)GroupFilterType.Tag,
                };
                yf.SeriesIds[0] = lookup[0][s.ToLowerInvariant()].ToHashSet();
                yf.GroupsIds[0] = yf.SeriesIds[0]
                                  .Select(id => RepoFactory.AnimeSeries.GetByID(id).TopLevelAnimeGroup?.AnimeGroupID ?? -1)
                                  .Where(id => id != -1).ToHashSet();
                foreach (var user in users)
                {
                    yf.SeriesIds[user.JMMUserID] = lookup[user.JMMUserID][s.ToLowerInvariant()].ToHashSet();
                    yf.GroupsIds[user.JMMUserID] = yf.SeriesIds[user.JMMUserID]
                                                   .Select(id => RepoFactory.AnimeSeries.GetByID(id).TopLevelAnimeGroup?.AnimeGroupID ?? -1)
                                                   .Where(id => id != -1).ToHashSet();
                }

                using (var trans = session.BeginTransaction())
                {
                    // get an ID
                    session.Insert(yf);
                    trans.Commit();
                }

                GroupFilterCondition gfc = new GroupFilterCondition
                {
                    ConditionType      = (int)GroupFilterConditionType.Tag,
                    ConditionOperator  = (int)GroupFilterOperator.In,
                    ConditionParameter = s,
                    GroupFilterID      = yf.GroupFilterID
                };
                yf.Conditions.Add(gfc);
                yf.UpdateEntityReferenceStrings();
                yf.GroupConditions        = Newtonsoft.Json.JsonConvert.SerializeObject(yf._conditions);
                yf.GroupConditionsVersion = SVR_GroupFilter.GROUPCONDITIONS_VERSION;
                toAdd.Add(yf);
            }

            lock (Cache)
            {
                Populate(session, false);
                lock (globalDBLock)
                {
                    foreach (var filters in toAdd.Batch(50))
                    {
                        using (ITransaction trans = session.BeginTransaction())
                        {
                            BatchUpdate(session, filters);
                            trans.Commit();
                        }
                    }
                }
            }
        }
Ejemplo n.º 13
0
        private static void CreateInitialGroupFilters()
        {
            // group filters
            GroupFilterRepository          repFilters = new GroupFilterRepository();
            GroupFilterConditionRepository repGFC     = new GroupFilterConditionRepository();

            if (repFilters.GetAll().Count() > 0)
            {
                return;
            }

            // Favorites
            GroupFilter gf = new GroupFilter();

            gf.GroupFilterName = "Favorites";
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;

            repFilters.Save(gf);

            GroupFilterCondition gfc = new GroupFilterCondition();

            gfc.ConditionType      = (int)GroupFilterConditionType.Favourite;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
            gfc.ConditionParameter = "";
            gfc.GroupFilterID      = gf.GroupFilterID;
            repGFC.Save(gfc);



            // Missing Episodes
            gf = new GroupFilter();
            gf.GroupFilterName = "Missing Episodes";
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;

            repFilters.Save(gf);

            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.MissingEpisodesCollecting;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
            gfc.ConditionParameter = "";
            gfc.GroupFilterID      = gf.GroupFilterID;
            repGFC.Save(gfc);

            // Newly Added Series
            gf = new GroupFilter();
            gf.GroupFilterName = "Newly Added Series";
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;

            repFilters.Save(gf);

            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.SeriesCreatedDate;
            gfc.ConditionOperator  = (int)GroupFilterOperator.LastXDays;
            gfc.ConditionParameter = "10";
            gfc.GroupFilterID      = gf.GroupFilterID;
            repGFC.Save(gfc);

            // Newly Airing Series
            gf = new GroupFilter();
            gf.GroupFilterName = "Newly Airing Series";
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;

            repFilters.Save(gf);

            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.AirDate;
            gfc.ConditionOperator  = (int)GroupFilterOperator.LastXDays;
            gfc.ConditionParameter = "30";
            gfc.GroupFilterID      = gf.GroupFilterID;
            repGFC.Save(gfc);

            // Votes Needed
            gf = new GroupFilter();
            gf.GroupFilterName = "Votes Needed";
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;

            repFilters.Save(gf);

            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.CompletedSeries;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Include;
            gfc.ConditionParameter = "";
            gfc.GroupFilterID      = gf.GroupFilterID;
            repGFC.Save(gfc);

            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.HasUnwatchedEpisodes;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Exclude;
            gfc.ConditionParameter = "";
            gfc.GroupFilterID      = gf.GroupFilterID;
            repGFC.Save(gfc);

            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.UserVotedAny;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Exclude;
            gfc.ConditionParameter = "";
            gfc.GroupFilterID      = gf.GroupFilterID;
            repGFC.Save(gfc);

            // Recently Watched
            gf = new GroupFilter();
            gf.GroupFilterName = "Recently Watched";
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;

            repFilters.Save(gf);

            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.EpisodeWatchedDate;
            gfc.ConditionOperator  = (int)GroupFilterOperator.LastXDays;
            gfc.ConditionParameter = "10";
            gfc.GroupFilterID      = gf.GroupFilterID;
            repGFC.Save(gfc);

            // TvDB/MovieDB Link Missing
            gf = new GroupFilter();
            gf.GroupFilterName = "TvDB/MovieDB Link Missing";
            gf.ApplyToSeries   = 0;
            gf.BaseCondition   = 1;

            repFilters.Save(gf);

            gfc = new GroupFilterCondition();
            gfc.ConditionType      = (int)GroupFilterConditionType.AssignedTvDBOrMovieDBInfo;
            gfc.ConditionOperator  = (int)GroupFilterOperator.Exclude;
            gfc.ConditionParameter = "";
            gfc.GroupFilterID      = gf.GroupFilterID;
            repGFC.Save(gfc);
        }
Ejemplo n.º 14
0
        public void CreateOrVerifyLockedFilters(IProgress <InitProgress> progress = null)
        {
            string t = typeof(GroupFilter).Name;
            List <SVR_GroupFilter> lockedGFs = GetLockedGroupFilters();
            //Continue Watching
            // check if it already exists

            // TODO Replace with a "Validating Default Filters"
            InitProgress regen = new InitProgress();

            regen.Step  = 0;
            regen.Total = 0;
            regen.Title = string.Format(
                Commons.Properties.Resources.Database_Validating, t,
                " " + Commons.Properties.Resources.Filter_CreateContinueWatching);
            progress?.Report(regen);


            SVR_GroupFilter cwatching = lockedGFs.FirstOrDefault(
                a =>
                a.FilterType == (int)GroupFilterType.ContinueWatching);

            if (cwatching != null && cwatching.FilterType != (int)GroupFilterType.ContinueWatching)
            {
                using (var b = BeginAddOrUpdate(() => GetByID(cwatching.GroupFilterID)))
                {
                    b.Entity.FilterType = (int)GroupFilterType.ContinueWatching;
                    b.Commit();
                }
            }
            else if (cwatching == null)
            {
                using (var b = BeginAdd())
                {
                    b.Entity.GroupFilterName    = Constants.GroupFilterName.ContinueWatching;
                    b.Entity.Locked             = 1;
                    b.Entity.SortingCriteria    = "4;2"; // by last watched episode desc
                    b.Entity.ApplyToSeries      = 0;
                    b.Entity.BaseCondition      = 1;     // all
                    b.Entity.FilterType         = (int)GroupFilterType.ContinueWatching;
                    b.Entity.InvisibleInClients = 0;
                    b.Entity.Conditions         = new List <GroupFilterCondition>();
                    GroupFilterCondition gfc = new GroupFilterCondition
                    {
                        ConditionType      = (int)GroupFilterConditionType.HasWatchedEpisodes,
                        ConditionOperator  = (int)GroupFilterOperator.Include,
                        ConditionParameter = string.Empty,
                        GroupFilterID      = b.Entity.GroupFilterID
                    };
                    b.Entity.Conditions.Add(gfc);
                    gfc = new GroupFilterCondition
                    {
                        ConditionType      = (int)GroupFilterConditionType.HasUnwatchedEpisodes,
                        ConditionOperator  = (int)GroupFilterOperator.Include,
                        ConditionParameter = string.Empty,
                        GroupFilterID      = b.Entity.GroupFilterID
                    };
                    b.Entity.Conditions.Add(gfc);
                    b.Entity.CalculateGroupsAndSeries();
                    b.Commit();
                }
            }
            //Create All filter
            SVR_GroupFilter allfilter = lockedGFs.FirstOrDefault(a => a.FilterType == (int)GroupFilterType.All);

            if (allfilter == null)
            {
                using (var b = BeginAdd())
                {
                    b.Entity.GroupFilterName    = Commons.Properties.Resources.Filter_All;
                    b.Entity.Locked             = 1;
                    b.Entity.InvisibleInClients = 0;
                    b.Entity.FilterType         = (int)GroupFilterType.All;
                    b.Entity.BaseCondition      = 1;
                    b.Entity.SortingCriteria    = "5;1";
                    b.Entity.CalculateGroupsAndSeries();
                    b.Commit();
                }
            }
            SVR_GroupFilter tagsdirec = lockedGFs.FirstOrDefault(a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Tag));

            if (tagsdirec == null)
            {
                using (var b = BeginAdd())
                {
                    b.Entity.GroupFilterName    = Commons.Properties.Resources.Filter_Tags;
                    b.Entity.InvisibleInClients = 0;
                    b.Entity.FilterType         = (int)(GroupFilterType.Directory | GroupFilterType.Tag);
                    b.Entity.BaseCondition      = 1;
                    b.Entity.Locked             = 1;
                    b.Entity.SortingCriteria    = "13;1";
                    b.Commit();
                }
            }
            SVR_GroupFilter yearsdirec = lockedGFs.FirstOrDefault(a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Year));

            if (yearsdirec == null)
            {
                using (var b = BeginAdd())
                {
                    b.Entity.GroupFilterName    = Commons.Properties.Resources.Filter_Years;
                    b.Entity.InvisibleInClients = 0;
                    b.Entity.FilterType         = (int)(GroupFilterType.Directory | GroupFilterType.Year);
                    b.Entity.BaseCondition      = 1;
                    b.Entity.Locked             = 1;
                    b.Entity.SortingCriteria    = "13;1";
                    b.Commit();
                }
            }
            SVR_GroupFilter seasonsdirec = lockedGFs.FirstOrDefault(a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Season));

            if (seasonsdirec == null)
            {
                using (var b = BeginAdd())
                {
                    b.Entity.GroupFilterName    = Commons.Properties.Resources.Filter_Seasons;
                    b.Entity.InvisibleInClients = 0;
                    b.Entity.FilterType         = (int)(GroupFilterType.Directory | GroupFilterType.Season);
                    b.Entity.BaseCondition      = 1;
                    b.Entity.Locked             = 1;
                    b.Entity.SortingCriteria    = "13;1";
                    b.Commit();
                }
            }
            CreateOrVerifyDirectoryFilters(progress, true);
        }
Ejemplo n.º 15
0
        public void CreateOrVerifyLockedFilters()
        {
            string t = "GroupFilter";

            List <SVR_GroupFilter> lockedGFs = RepoFactory.GroupFilter.GetLockedGroupFilters();

            ServerState.Instance.CurrentSetupStatus = string.Format(
                Commons.Properties.Resources.Database_Validating, t,
                " " + Commons.Properties.Resources.Filter_CreateContinueWatching);

            SVR_GroupFilter cwatching =
                lockedGFs.FirstOrDefault(
                    a =>
                    a.FilterType == (int)GroupFilterType.ContinueWatching);

            if (cwatching != null && cwatching.FilterType != (int)GroupFilterType.ContinueWatching)
            {
                cwatching.FilterType = (int)GroupFilterType.ContinueWatching;
                Save(cwatching);
            }
            else if (cwatching == null)
            {
                SVR_GroupFilter gf = new SVR_GroupFilter
                {
                    GroupFilterName    = Constants.GroupFilterName.ContinueWatching,
                    Locked             = 1,
                    SortingCriteria    = "4;2", // by last watched episode desc
                    ApplyToSeries      = 0,
                    BaseCondition      = 1,     // all
                    FilterType         = (int)GroupFilterType.ContinueWatching,
                    InvisibleInClients = 0,
                    Conditions         = new List <GroupFilterCondition>()
                };
                GroupFilterCondition gfc = new GroupFilterCondition
                {
                    ConditionType      = (int)GroupFilterConditionType.HasWatchedEpisodes,
                    ConditionOperator  = (int)GroupFilterOperator.Include,
                    ConditionParameter = string.Empty,
                    GroupFilterID      = gf.GroupFilterID
                };
                gf.Conditions.Add(gfc);
                gfc = new GroupFilterCondition
                {
                    ConditionType      = (int)GroupFilterConditionType.HasUnwatchedEpisodes,
                    ConditionOperator  = (int)GroupFilterOperator.Include,
                    ConditionParameter = string.Empty,
                    GroupFilterID      = gf.GroupFilterID
                };
                gf.Conditions.Add(gfc);
                gf.CalculateGroupsAndSeries();
                Save(gf); //Get ID
            }
            //Create All filter
            SVR_GroupFilter allfilter = lockedGFs.FirstOrDefault(a => a.FilterType == (int)GroupFilterType.All);

            if (allfilter == null)
            {
                SVR_GroupFilter gf = new SVR_GroupFilter
                {
                    GroupFilterName    = Commons.Properties.Resources.Filter_All,
                    Locked             = 1,
                    InvisibleInClients = 0,
                    FilterType         = (int)GroupFilterType.All,
                    BaseCondition      = 1,
                    SortingCriteria    = "5;1"
                };
                gf.CalculateGroupsAndSeries();
                Save(gf);
            }
            SVR_GroupFilter tagsdirec =
                lockedGFs.FirstOrDefault(
                    a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Tag));

            if (tagsdirec == null)
            {
                tagsdirec = new SVR_GroupFilter
                {
                    GroupFilterName    = Commons.Properties.Resources.Filter_Tags,
                    InvisibleInClients = 0,
                    FilterType         = (int)(GroupFilterType.Directory | GroupFilterType.Tag),
                    BaseCondition      = 1,
                    Locked             = 1,
                    SortingCriteria    = "13;1"
                };
                Save(tagsdirec);
            }
            SVR_GroupFilter yearsdirec =
                lockedGFs.FirstOrDefault(
                    a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Year));

            if (yearsdirec == null)
            {
                yearsdirec = new SVR_GroupFilter
                {
                    GroupFilterName    = Commons.Properties.Resources.Filter_Years,
                    InvisibleInClients = 0,
                    FilterType         = (int)(GroupFilterType.Directory | GroupFilterType.Year),
                    BaseCondition      = 1,
                    Locked             = 1,
                    SortingCriteria    = "13;1"
                };
                Save(yearsdirec);
            }
            SVR_GroupFilter seasonsdirec =
                lockedGFs.FirstOrDefault(
                    a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Season));

            if (seasonsdirec == null)
            {
                seasonsdirec = new SVR_GroupFilter
                {
                    GroupFilterName    = Commons.Properties.Resources.Filter_Seasons,
                    InvisibleInClients = 0,
                    FilterType         = (int)(GroupFilterType.Directory | GroupFilterType.Season),
                    BaseCondition      = 1,
                    Locked             = 1,
                    SortingCriteria    = "13;1"
                };
                Save(seasonsdirec);
            }
            CreateOrVerifyDirectoryFilters(true);
        }
Ejemplo n.º 16
0
        public void CreateOrVerifyDirectoryFilters(bool frominit         = false, HashSet <string> tags    = null,
                                                   HashSet <int> airdate = null, SortedSet <string> season = null)
        {
            const string t = "GroupFilter";

            List <SVR_GroupFilter> lockedGFs = GetLockedGroupFilters();


            SVR_GroupFilter tagsdirec = lockedGFs.FirstOrDefault(
                a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Tag));

            if (tagsdirec != null)
            {
                HashSet <string> alltags;
                if (tags == null)
                {
                    alltags = new HashSet <string>(
                        RepoFactory.AniDB_Tag.GetAll()
                        .Select(a => a.TagName)
                        .Distinct(StringComparer.InvariantCultureIgnoreCase),
                        StringComparer.InvariantCultureIgnoreCase);
                }
                else
                {
                    alltags = new HashSet <string>(tags.Distinct(StringComparer.InvariantCultureIgnoreCase),
                                                   StringComparer.InvariantCultureIgnoreCase);
                }
                HashSet <string> notin =
                    new HashSet <string>(
                        lockedGFs.Where(a => a.FilterType == (int)GroupFilterType.Tag)
                        .Select(a => a.Conditions.FirstOrDefault()?.ConditionParameter),
                        StringComparer.InvariantCultureIgnoreCase);
                alltags.ExceptWith(notin);

                int max = alltags.Count;
                int cnt = 0;
                //AniDB Tags are in english so we use en-us culture
                TextInfo tinfo = new CultureInfo("en-US", false).TextInfo;
                foreach (string s in alltags)
                {
                    cnt++;
                    if (frominit)
                    {
                        ServerState.Instance.CurrentSetupStatus = string.Format(
                            Commons.Properties.Resources.Database_Validating, t,
                            Commons.Properties.Resources.Filter_CreatingTag + " " +
                            Commons.Properties.Resources.Filter_Filter + " " + cnt + "/" + max + " - " + s);
                    }
                    SVR_GroupFilter yf = new SVR_GroupFilter
                    {
                        ParentGroupFilterID = tagsdirec.GroupFilterID,
                        InvisibleInClients  = 0,
                        ApplyToSeries       = 1,
                        GroupFilterName     = tinfo.ToTitleCase(s.Replace("`", "'")),
                        BaseCondition       = 1,
                        Locked          = 1,
                        SortingCriteria = "5;1",
                        FilterType      = (int)GroupFilterType.Tag
                    };
                    GroupFilterCondition gfc = new GroupFilterCondition
                    {
                        ConditionType      = (int)GroupFilterConditionType.Tag,
                        ConditionOperator  = (int)GroupFilterOperator.In,
                        ConditionParameter = s,
                        GroupFilterID      = yf.GroupFilterID
                    };
                    yf.Conditions.Add(gfc);
                    yf.CalculateGroupsAndSeries();
                    Save(yf);
                }
            }
            SVR_GroupFilter yearsdirec = lockedGFs.FirstOrDefault(
                a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Year));

            if (yearsdirec != null)
            {
                HashSet <string> allyears;
                if (airdate == null || airdate.Count == 0)
                {
                    List <CL_AnimeSeries_User> grps =
                        RepoFactory.AnimeSeries.GetAll().Select(a => a.Contract).Where(a => a != null).ToList();

                    allyears = new HashSet <string>(StringComparer.Ordinal);
                    foreach (CL_AnimeSeries_User ser in grps)
                    {
                        int endyear   = ser.AniDBAnime.AniDBAnime.EndYear;
                        int startyear = ser.AniDBAnime.AniDBAnime.BeginYear;
                        if (endyear == 0)
                        {
                            endyear = DateTime.Today.Year;
                        }
                        if (startyear != 0)
                        {
                            allyears.UnionWith(Enumerable.Range(startyear,
                                                                endyear - startyear + 1)
                                               .Select(a => a.ToString()));
                        }
                    }
                }
                else
                {
                    allyears = new HashSet <string>(airdate.Select(a => a.ToString()), StringComparer.Ordinal);
                }
                HashSet <string> notin =
                    new HashSet <string>(
                        lockedGFs.Where(a => a.FilterType == (int)GroupFilterType.Year)
                        .Select(a => a.Conditions.FirstOrDefault()?.ConditionParameter),
                        StringComparer.InvariantCultureIgnoreCase);
                allyears.ExceptWith(notin);
                int max = allyears.Count;
                int cnt = 0;
                foreach (string s in allyears)
                {
                    cnt++;
                    if (frominit)
                    {
                        ServerState.Instance.CurrentSetupStatus = string.Format(
                            Commons.Properties.Resources.Database_Validating, t,
                            Commons.Properties.Resources.Filter_CreatingYear + " " +
                            Commons.Properties.Resources.Filter_Filter + " " + cnt + "/" + max + " - " + s);
                    }
                    SVR_GroupFilter yf = new SVR_GroupFilter
                    {
                        ParentGroupFilterID = yearsdirec.GroupFilterID,
                        InvisibleInClients  = 0,
                        GroupFilterName     = s,
                        BaseCondition       = 1,
                        Locked          = 1,
                        SortingCriteria = "5;1",
                        FilterType      = (int)GroupFilterType.Year,
                        ApplyToSeries   = 1
                    };
                    GroupFilterCondition gfc = new GroupFilterCondition
                    {
                        ConditionType      = (int)GroupFilterConditionType.Year,
                        ConditionOperator  = (int)GroupFilterOperator.Include,
                        ConditionParameter = s,
                        GroupFilterID      = yf.GroupFilterID
                    };
                    yf.Conditions.Add(gfc);
                    yf.CalculateGroupsAndSeries();
                    Save(yf);
                }
            }
            SVR_GroupFilter seasonsdirectory = lockedGFs.FirstOrDefault(
                a => a.FilterType == (int)(GroupFilterType.Directory | GroupFilterType.Season));

            if (seasonsdirectory != null)
            {
                SortedSet <string> allseasons;
                if (season == null)
                {
                    List <SVR_AnimeSeries> grps =
                        RepoFactory.AnimeSeries.GetAll().ToList();

                    allseasons = new SortedSet <string>(new SeasonComparator());
                    foreach (SVR_AnimeSeries ser in grps)
                    {
                        if ((ser.Contract?.AniDBAnime?.Stat_AllSeasons.Count ?? 0) == 0)
                        {
                            ser.UpdateContract();
                        }
                        if ((ser.Contract?.AniDBAnime?.Stat_AllSeasons.Count ?? 0) == 0)
                        {
                            continue;
                        }
                        allseasons.UnionWith(ser.Contract.AniDBAnime.Stat_AllSeasons);
                    }
                }
                else
                {
                    allseasons = season;
                }
                HashSet <string> notin =
                    new HashSet <string>(
                        lockedGFs.Where(a => a.FilterType == (int)GroupFilterType.Season)
                        .Select(a => a.Conditions.FirstOrDefault()?.ConditionParameter),
                        StringComparer.InvariantCultureIgnoreCase);
                allseasons.ExceptWith(notin);
                int max = allseasons.Count;
                int cnt = 0;
                foreach (string s in allseasons)
                {
                    cnt++;
                    if (frominit)
                    {
                        ServerState.Instance.CurrentSetupStatus = string.Format(
                            Commons.Properties.Resources.Database_Validating, t,
                            Commons.Properties.Resources.Filter_CreatingSeason + " " +
                            Commons.Properties.Resources.Filter_Filter + " " + cnt + "/" + max + " - " + s);
                    }
                    SVR_GroupFilter yf = new SVR_GroupFilter
                    {
                        ParentGroupFilterID = seasonsdirectory.GroupFilterID,
                        InvisibleInClients  = 0,
                        GroupFilterName     = s,
                        BaseCondition       = 1,
                        Locked          = 1,
                        SortingCriteria = "5;1",
                        FilterType      = (int)GroupFilterType.Season,
                        ApplyToSeries   = 1
                    };
                    GroupFilterCondition gfc = new GroupFilterCondition
                    {
                        ConditionType      = (int)GroupFilterConditionType.Season,
                        ConditionOperator  = (int)GroupFilterOperator.In,
                        ConditionParameter = s,
                        GroupFilterID      = yf.GroupFilterID
                    };
                    yf.Conditions.Add(gfc);
                    yf.CalculateGroupsAndSeries();
                    Save(yf);
                }
            }
            CleanUpEmptyDirectoryFilters();
        }
Ejemplo n.º 17
0
        private void CreateInitialGroupFilters()
        {
            // group filters
            // Do to DatabaseFixes, some filters may be made, namely directory filters
            // All, Continue Watching, Years, Seasons, Tags... 6 seems to be enough to tell for now
            // We can't just check the existence of anything specific, as the user can delete most of these
            if (RepoFactory.GroupFilter.GetTopLevel().Count() > 6)
            {
                return;
            }

            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Instance.Culture);

            // Favorites
            SVR_GroupFilter gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_Favorites,
                ApplyToSeries   = 0,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            GroupFilterCondition gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.Favourite,
                ConditionOperator  = (int)GroupFilterOperator.Include,
                ConditionParameter = string.Empty
            };

            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);

            // Missing Episodes
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_MissingEpisodes,
                ApplyToSeries   = 0,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.MissingEpisodesCollecting,
                ConditionOperator  = (int)GroupFilterOperator.Include,
                ConditionParameter = string.Empty
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);


            // Newly Added Series
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_Added,
                ApplyToSeries   = 0,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.SeriesCreatedDate,
                ConditionOperator  = (int)GroupFilterOperator.LastXDays,
                ConditionParameter = "10"
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);

            // Newly Airing Series
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_Airing,
                ApplyToSeries   = 0,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.AirDate,
                ConditionOperator  = (int)GroupFilterOperator.LastXDays,
                ConditionParameter = "30"
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);

            // Votes Needed
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_Votes,
                ApplyToSeries   = 1,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.CompletedSeries,
                ConditionOperator  = (int)GroupFilterOperator.Include,
                ConditionParameter = string.Empty
            };
            gf.Conditions.Add(gfc);
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.HasUnwatchedEpisodes,
                ConditionOperator  = (int)GroupFilterOperator.Exclude,
                ConditionParameter = string.Empty
            };
            gf.Conditions.Add(gfc);
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.UserVotedAny,
                ConditionOperator  = (int)GroupFilterOperator.Exclude,
                ConditionParameter = string.Empty
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);

            // Recently Watched
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_RecentlyWatched,
                ApplyToSeries   = 0,
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.EpisodeWatchedDate,
                ConditionOperator  = (int)GroupFilterOperator.LastXDays,
                ConditionParameter = "10"
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);

            // TvDB/MovieDB Link Missing
            gf = new SVR_GroupFilter
            {
                GroupFilterName = Commons.Properties.Resources.Filter_LinkMissing,
                ApplyToSeries   = 1, // This makes far more sense as applied to series
                BaseCondition   = 1,
                Locked          = 0,
                FilterType      = (int)GroupFilterType.UserDefined
            };
            gfc = new GroupFilterCondition
            {
                ConditionType      = (int)GroupFilterConditionType.AssignedTvDBOrMovieDBInfo,
                ConditionOperator  = (int)GroupFilterOperator.Exclude,
                ConditionParameter = string.Empty
            };
            gf.Conditions.Add(gfc);
            gf.CalculateGroupsAndSeries();
            RepoFactory.GroupFilter.Save(gf);
        }