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); } }
public Condition(GroupFilterCondition condition) { ID = condition.GroupFilterConditionID; Type = (GroupFilterConditionType)condition.ConditionType; Operator = (GroupFilterOperator)condition.ConditionOperator; Parameter = condition.ConditionParameter; }
/// <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); }
/// <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(); } } }
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); }
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); } }
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); }
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); }
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); } } } }
//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(); } } } } }
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); }
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); }
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); }
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(); }
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); }