예제 #1
0
 public override void PopulateIndexes()
 {
     Changes.AddOrUpdateRange(Cache.Keys);
     Parents            = Cache.CreateIndex(a => a.ParentGroupFilterID ?? 0);
     Types              = new BiDictionaryManyToMany <int, GroupFilterConditionType>(Cache.Values.ToDictionary(a => a.GroupFilterID, a => a.Types));
     PostProcessFilters = new List <GroupFilter>();
 }
예제 #2
0
        public override void PostInit(IProgress <InitProgress> progress, int batchSize)
        {
            string       t     = typeof(GroupFilter).Name;
            InitProgress regen = new InitProgress();

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

            foreach (SVR_GroupFilter g in Where(a => a.GroupsIdsVersion < SVR_GroupFilter.GROUPFILTER_VERSION ||
                                                a.GroupConditionsVersion <
                                                SVR_GroupFilter.GROUPCONDITIONS_VERSION ||
                                                a.SeriesIdsVersion < SVR_GroupFilter.SERIEFILTER_VERSION))
            {
                if (!PostProcessFilters.Contains(g))
                {
                    PostProcessFilters.Add(g);
                }
            }
            regen.Total = PostProcessFilters.Count;
            regen.Title = string.Format(Commons.Properties.Resources.Database_Validating, t, Commons.Properties.Resources.Filter_Recalc);
            BatchAction(PostProcessFilters, batchSize, (gf, original) =>
            {
                regen.Step++;
                if (gf.GroupsIdsVersion < SVR_GroupFilter.GROUPFILTER_VERSION ||
                    gf.GroupConditionsVersion < SVR_GroupFilter.GROUPCONDITIONS_VERSION ||
                    gf.SeriesIdsVersion < SVR_GroupFilter.SERIEFILTER_VERSION ||
                    gf.GroupConditionsVersion < SVR_GroupFilter.GROUPCONDITIONS_VERSION)
                {
                    gf.CalculateGroupsAndSeries();
                }

                progress.Report(regen);
            });
            regen.Total = PostProcessFilters.Count;
            regen.Title = string.Format(Commons.Properties.Resources.Database_Validating, t, " " + Commons.Properties.Resources.GroupFilter_Cleanup);

            // Clean up. This will populate empty conditions and remove duplicate filters
            IReadOnlyList <SVR_GroupFilter> all   = GetAll();
            HashSet <SVR_GroupFilter>       set   = new HashSet <SVR_GroupFilter>(all);
            List <SVR_GroupFilter>          notin = all.Except(set).ToList();

            Delete(notin);
            PostProcessFilters = null;
            lock (Changes)
            {
                Changes.AddOrUpdateRange(Cache.Keys);
            }
        }
예제 #3
0
 public override void PopulateIndexes()
 {
     Changes.AddOrUpdateRange(Cache.Keys);
     AniDBIds = Cache.CreateIndex(a => a.AniDB_ID);
     Groups   = Cache.CreateIndex(a => a.AnimeGroupID);
 }
 public override void PopulateIndexes()
 {
     Changes.AddOrUpdateRange(Cache.Keys);
     Parents = Cache.CreateIndex(a => a.AnimeGroupParentID ?? 0);
 }