public Contract_GroupFilter_SaveResponse SaveGroupFilter(Contract_GroupFilter contract) { Contract_GroupFilter_SaveResponse response = new Contract_GroupFilter_SaveResponse(); response.ErrorMessage = string.Empty; response.GroupFilter = null; GroupFilterRepository repGF = new GroupFilterRepository(); GroupFilterConditionRepository repGFC = new GroupFilterConditionRepository(); // Process the group GroupFilter gf = null; if (contract.GroupFilterID.HasValue) { gf = repGF.GetByID(contract.GroupFilterID.Value); if (gf == null) { response.ErrorMessage = "Could not find existing Group Filter with ID: " + contract.GroupFilterID.Value.ToString(); return response; } } else gf = new GroupFilter(); gf.GroupFilterName = contract.GroupFilterName; gf.ApplyToSeries = contract.ApplyToSeries; gf.BaseCondition = contract.BaseCondition; gf.SortingCriteria = contract.SortingCriteria; if (string.IsNullOrEmpty(gf.GroupFilterName)) { response.ErrorMessage = "Must specify a group filter name"; return response; } repGF.Save(gf); // Process the filter conditions // check for any that have been deleted foreach (GroupFilterCondition gfc in gf.FilterConditions) { bool gfcExists = false; foreach (Contract_GroupFilterCondition gfc_con in contract.FilterConditions) { if (gfc_con.GroupFilterConditionID.HasValue && gfc_con.GroupFilterConditionID.Value == gfc.GroupFilterConditionID) { gfcExists = true; break; } } if (!gfcExists) repGFC.Delete(gfc.GroupFilterConditionID); } // save newly added or modified ones foreach (Contract_GroupFilterCondition gfc_con in contract.FilterConditions) { GroupFilterCondition gfc = null; if (gfc_con.GroupFilterConditionID.HasValue) { gfc = repGFC.GetByID(gfc_con.GroupFilterConditionID.Value); if (gfc == null) { response.ErrorMessage = "Could not find existing Group Filter Condition with ID: " + gfc_con.GroupFilterConditionID.ToString(); return response; } } else gfc = new GroupFilterCondition(); gfc.ConditionOperator = gfc_con.ConditionOperator; gfc.ConditionParameter = gfc_con.ConditionParameter; gfc.ConditionType = gfc_con.ConditionType; gfc.GroupFilterID = gf.GroupFilterID; repGFC.Save(gfc); } response.GroupFilter = gf.ToContract(); return response; }
public string DeleteGroupFilter(int groupFilterID) { try { GroupFilterRepository repGF = new GroupFilterRepository(); GroupFilterConditionRepository repGFC = new GroupFilterConditionRepository(); GroupFilter gf = repGF.GetByID(groupFilterID); if (gf == null) return "Group Filter not found"; // delete all the conditions first foreach (GroupFilterCondition gfc in gf.FilterConditions) repGFC.Delete(gfc.GroupFilterConditionID); repGF.Delete(groupFilterID); return ""; } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); return ex.Message; } }
public Contract_GroupFilterExtended GetGroupFilterExtended(int groupFilterID, int userID) { try { using (var session = JMMService.SessionFactory.OpenSession()) { GroupFilterRepository repGF = new GroupFilterRepository(); GroupFilter gf = repGF.GetByID(session, groupFilterID); if (gf == null) return null; JMMUserRepository repUsers = new JMMUserRepository(); JMMUser user = repUsers.GetByID(session, userID); if (user == null) return null; Contract_GroupFilterExtended contract = gf.ToContractExtended(session, user); return contract; } } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); } return null; }
public List<Contract_AnimeGroup> GetAnimeGroupsForFilter(int groupFilterID, int userID, bool getSingleSeriesGroups) { List<Contract_AnimeGroup> retGroups = new List<Contract_AnimeGroup>(); try { using (var session = JMMService.SessionFactory.OpenSession()) { DateTime start = DateTime.Now; GroupFilterRepository repGF = new GroupFilterRepository(); JMMUserRepository repUsers = new JMMUserRepository(); JMMUser user = repUsers.GetByID(session, userID); if (user == null) return retGroups; GroupFilter gf = null; if (groupFilterID == -999) { // all groups gf = new GroupFilter(); gf.GroupFilterName = "All"; } else { gf = repGF.GetByID(session, groupFilterID); if (gf == null) return retGroups; } //Contract_GroupFilterExtended contract = gf.ToContractExtended(user); AnimeGroupRepository repGroups = new AnimeGroupRepository(); List<AnimeGroup> allGrps = repGroups.GetAll(session); AnimeGroup_UserRepository repUserRecords = new AnimeGroup_UserRepository(); List<AnimeGroup_User> userRecords = repUserRecords.GetByUserID(session, userID); Dictionary<int, AnimeGroup_User> dictUserRecords = new Dictionary<int, AnimeGroup_User>(); foreach (AnimeGroup_User userRec in userRecords) dictUserRecords[userRec.AnimeGroupID] = userRec; TimeSpan ts = DateTime.Now - start; string msg = string.Format("Got groups for filter DB: {0} - {1} in {2} ms", gf.GroupFilterName, allGrps.Count, ts.TotalMilliseconds); logger.Info(msg); start = DateTime.Now; AnimeSeriesRepository repSeries = new AnimeSeriesRepository(); List<AnimeSeries> allSeries = new List<AnimeSeries>(); if (getSingleSeriesGroups) allSeries = repSeries.GetAll(session); if ((StatsCache.Instance.StatUserGroupFilter.ContainsKey(user.JMMUserID)) && (StatsCache.Instance.StatUserGroupFilter[user.JMMUserID].ContainsKey(gf.GroupFilterID))) { HashSet<int> groups = StatsCache.Instance.StatUserGroupFilter[user.JMMUserID][gf.GroupFilterID]; foreach (AnimeGroup grp in allGrps) { AnimeGroup_User userRec = null; if (dictUserRecords.ContainsKey(grp.AnimeGroupID)) userRec = dictUserRecords[grp.AnimeGroupID]; if (groups.Contains(grp.AnimeGroupID)) { Contract_AnimeGroup contractGrp = grp.ToContract(userRec); if (getSingleSeriesGroups) { if (contractGrp.Stat_SeriesCount == 1) { AnimeSeries ser = GetSeriesForGroup(grp.AnimeGroupID, allSeries); if (ser != null) contractGrp.SeriesForNameOverride = ser.ToContract(ser.GetUserRecord(session, userID)); } } retGroups.Add(contractGrp); } } } ts = DateTime.Now - start; msg = string.Format("Got groups for filter EVAL: {0} - {1} in {2} ms", gf.GroupFilterName, retGroups.Count, ts.TotalMilliseconds); logger.Info(msg); return retGroups; } } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); } return retGroups; }
public void UpdateGroupFilterUsingGroupFilter(int groupfilter) { AnimeGroupRepository repGroups = new AnimeGroupRepository(); AnimeGroup_UserRepository repUserGroups = new AnimeGroup_UserRepository(); JMMUserRepository repUser =new JMMUserRepository(); GroupFilterRepository repGrpFilter=new GroupFilterRepository(); GroupFilter gf = repGrpFilter.GetByID(groupfilter); if (gf==null) return; foreach(JMMUser user in repUser.GetAll()) { Dictionary<int, HashSet<int>> groupfilters; if (StatUserGroupFilter.ContainsKey(user.JMMUserID)) groupfilters = StatUserGroupFilter[user.JMMUserID]; else { groupfilters = new Dictionary<int, HashSet<int>>(); StatUserGroupFilter.Add(user.JMMUserID, groupfilters); } HashSet<int> groups; if (groupfilters.ContainsKey(groupfilter)) groups = groupfilters[groupfilter]; else { groups = new HashSet<int>(); groupfilters.Add(groupfilter, groups); } groups.Clear(); List<AnimeGroup> allGrps = repGroups.GetAllTopLevelGroups(); // No Need of subgroups foreach (AnimeGroup grp in allGrps) { AnimeGroup_User userRec = repUserGroups.GetByUserAndGroupID(user.JMMUserID, grp.AnimeGroupID); if (EvaluateGroupFilter(gf, grp, user, userRec)) groups.Add(grp.AnimeGroupID); } } }
private System.IO.Stream GetGroupsFromFilter(int userid, string GroupFilterId) { KodiObject ret=new KodiObject(KodiHelper.NewMediaContainer("Filters",true)); if (!ret.Init()) return new MemoryStream(); //List<Joint> retGroups = new List<Joint>(); List<Video> retGroups=new List<Video>(); try { int groupFilterID ; int.TryParse(GroupFilterId, out groupFilterID); using (var session = JMMService.SessionFactory.OpenSession()) { if (groupFilterID == -1) return new MemoryStream(); DateTime start = DateTime.Now; GroupFilterRepository repGF = new GroupFilterRepository(); GroupFilter gf; if (groupFilterID == -999) { // all groups gf = new GroupFilter(); gf.GroupFilterName = "All"; } else { gf = repGF.GetByID(session, groupFilterID); if (gf == null) return new MemoryStream(); } ret.MediaContainer.Title2 = ret.MediaContainer.Title1 = gf.GroupFilterName; //Contract_GroupFilterExtended contract = gf.ToContractExtended(user); AnimeGroupRepository repGroups = new AnimeGroupRepository(); List<AnimeGroup> allGrps = repGroups.GetAll(session); TimeSpan ts = DateTime.Now - start; string msg = string.Format("Got groups for filter DB: {0} - {1} in {2} ms", gf.GroupFilterName, allGrps.Count, ts.TotalMilliseconds); logger.Info(msg); start = DateTime.Now; if ((StatsCache.Instance.StatUserGroupFilter.ContainsKey(userid)) && (StatsCache.Instance.StatUserGroupFilter[userid].ContainsKey(gf.GroupFilterID))) { HashSet<int> groups = StatsCache.Instance.StatUserGroupFilter[userid][gf.GroupFilterID]; var tas = StatsCache.Instance.StatKodiGroupsCache; foreach (AnimeGroup grp in allGrps) { if (groups.Contains(grp.AnimeGroupID)) { try { //if (grp.GroupName == "Rockman.EXE") //{ // int x = grp.MissingEpisodeCount; //} Video v = StatsCache.Instance.StatKodiGroupsCache[userid][grp.AnimeGroupID]; if (v != null) { //proper naming AniDB_Anime anim = grp.Anime[0]; v.OriginalTitle = ""; foreach (AniDB_Anime_Title title in anim.GetTitles()) { if (title.TitleType == "official" || title.TitleType == "main") { v.OriginalTitle += "{" + title.TitleType + ":" + title.Language + "}" + title.Title + "|"; } } v.OriginalTitle = v.OriginalTitle.Substring(0, v.OriginalTitle.Length - 1); //proper naming end retGroups.Add(v.Clone()); } } catch(Exception e) { int x = retGroups.Count; } } } } ts = DateTime.Now - start; msg = string.Format("Got groups for filter EVAL: {0} - {1} in {2} ms", gf.GroupFilterName, retGroups.Count, ts.TotalMilliseconds); logger.Info(msg); if ((groupFilterID == -999) || (gf.SortCriteriaList.Count == 0)) { ret.Childrens = retGroups.OrderBy(a => a.Group.SortName).ToList(); return ret.GetStream(); } List<Contract_AnimeGroup> grps = retGroups.Select(a => a.Group).ToList(); List<SortPropOrFieldAndDirection> sortCriteria = new List<SortPropOrFieldAndDirection>(); foreach (GroupFilterSortingCriteria g in gf.SortCriteriaList) { sortCriteria.Add(GroupFilterHelper.GetSortDescription(g.SortType, g.SortDirection)); } grps = Sorting.MultiSort(grps, sortCriteria); List<Video> joints2 = new List<Video>(); foreach (Contract_AnimeGroup gr in grps) { foreach (Video j in retGroups) { if (j.Group == gr) { //experiment AniDB_AnimeRepository repAnime = new AniDB_AnimeRepository(); AnimeSeriesRepository repSeries = new AnimeSeriesRepository(); AnimeGroup ag = repGroups.GetByID(gr.AnimeGroupID); List<AnimeSeries> sers = ag.GetAllSeries(); AnimeSeries ser = sers[0]; AniDB_Anime anim = ser.GetAnime(); j.CharactersList = new List<Characters>(); Characters c = new Characters(); c.CharactersList = GetCharactersFromAniDB(anim); j.CharactersList.Add(c); //experimentEND //proper naming j.OriginalTitle = ""; foreach (AniDB_Anime_Title title in anim.GetTitles()) { if (title.TitleType == "official" || title.TitleType == "main") { j.OriginalTitle += "{" + title.TitleType + ":" + title.Language + "}" + title.Title + "|"; } } j.OriginalTitle = j.OriginalTitle.Substring(0, j.OriginalTitle.Length - 1); //proper naming end //community support //CrossRef_AniDB_TraktV2Repository repCrossRef = new CrossRef_AniDB_TraktV2Repository(); //List<CrossRef_AniDB_TraktV2> Trakt = repCrossRef.GetByAnimeID(anim.AnimeID); //if (Trakt != null) //{ // if (Trakt.Count > 0) // { // j.Trakt = Trakt[0].TraktID; // } //} //CrossRef_AniDB_TvDBV2Repository repCrossRefV2 = new CrossRef_AniDB_TvDBV2Repository(); //List<CrossRef_AniDB_TvDBV2> TvDB = repCrossRefV2.GetByAnimeID(anim.AnimeID); //if (TvDB != null) //{ // if (TvDB.Count > 0) // { // j.TvDB = TvDB[0].TvDBID.ToString(); // } //} //community support END joints2.Add(j); retGroups.Remove(j); break; } } } ret.Childrens = joints2; ret.MediaContainer.Art = KodiHelper.GetRandomFanartFromVideoList(ret.Childrens); ts = DateTime.Now - start; msg = string.Format("Got groups final: {0} - {1} in {2} ms", gf.GroupFilterName, retGroups.Count, ts.TotalMilliseconds); logger.Info(msg); return ret.GetStream(); } } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); } return new MemoryStream(); }
private System.IO.Stream GetGroupsFromFilter(int userid, string GroupFilterId, HistoryInfo info) { PlexObject ret=new PlexObject(PlexHelper.NewMediaContainer(MediaContainerTypes.Show,info,false)); if (!ret.Init()) return new MemoryStream(); //List<Joint> retGroups = new List<Joint>(); List<Video> retGroups=new List<Video>(); try { int groupFilterID ; int.TryParse(GroupFilterId, out groupFilterID); using (var session = JMMService.SessionFactory.OpenSession()) { if (groupFilterID == -1) return new MemoryStream(); DateTime start = DateTime.Now; GroupFilterRepository repGF = new GroupFilterRepository(); GroupFilter gf; if (groupFilterID == -999) { // all groups gf = new GroupFilter(); gf.GroupFilterName = "All"; } else { gf = repGF.GetByID(session, groupFilterID); if (gf == null) return new MemoryStream(); } //Contract_GroupFilterExtended contract = gf.ToContractExtended(user); AnimeGroupRepository repGroups = new AnimeGroupRepository(); List<AnimeGroup> allGrps = repGroups.GetAll(session); TimeSpan ts = DateTime.Now - start; string msg = string.Format("Got groups for filter DB: {0} - {1} in {2} ms", gf.GroupFilterName, allGrps.Count, ts.TotalMilliseconds); logger.Info(msg); start = DateTime.Now; if ((StatsCache.Instance.StatUserGroupFilter.ContainsKey(userid)) && (StatsCache.Instance.StatUserGroupFilter[userid].ContainsKey(gf.GroupFilterID))) { HashSet<int> groups = StatsCache.Instance.StatUserGroupFilter[userid][gf.GroupFilterID]; foreach (AnimeGroup grp in allGrps) { if (groups.Contains(grp.AnimeGroupID)) { Video v = StatsCache.Instance.StatPlexGroupsCache[userid][grp.AnimeGroupID]; if (v != null) { v = v.Clone(); retGroups.Add(v, info); } } } } ts = DateTime.Now - start; msg = string.Format("Got groups for filter EVAL: {0} - {1} in {2} ms", gf.GroupFilterName, retGroups.Count, ts.TotalMilliseconds); logger.Info(msg); if ((groupFilterID == -999) || (gf.SortCriteriaList.Count == 0)) { ret.Childrens = PlexHelper.ConvertToDirectoryIfNotUnique(retGroups.OrderBy(a => a.Group.SortName).ToList()); return ret.GetStream(); } List<Contract_AnimeGroup> grps = retGroups.Select(a => a.Group).ToList(); List<SortPropOrFieldAndDirection> sortCriteria = new List<SortPropOrFieldAndDirection>(); foreach (GroupFilterSortingCriteria g in gf.SortCriteriaList) { sortCriteria.Add(GroupFilterHelper.GetSortDescription(g.SortType, g.SortDirection)); } grps = Sorting.MultiSort(grps, sortCriteria); List<Video> joints2 = new List<Video>(); foreach (Contract_AnimeGroup gr in grps) { foreach (Video j in retGroups) { if (j.Group == gr) { joints2.Add(j); retGroups.Remove(j); break; } } } ret.Childrens = PlexHelper.ConvertToDirectoryIfNotUnique(joints2); ts = DateTime.Now - start; msg = string.Format("Got groups final: {0} - {1} in {2} ms", gf.GroupFilterName, retGroups.Count, ts.TotalMilliseconds); logger.Info(msg); return ret.GetStream(); } } catch (Exception ex) { logger.ErrorException(ex.ToString(), ex); } return new MemoryStream(); }