private bool HasConflictsWithMemory(IScheduleGroup group, Dictionary <ScheduleGroupType, IScheduleGroup> memory) { if (group != null) { if (!memory.ContainsKey(group.GType)) { memory.Add(group.GType, group); return(false); } return(!group.Equals(memory[group.GType])); } throw new ArgumentNullException("Name for group cannot be null"); }
private void AddGroupToUserInMemory(long chatId, IScheduleGroup group) { var clearOther = group.Name.StartsWith("11-"); IScheduleGroup duplicate = null; IList <IScheduleGroup> otherGroups = null; usersGroups.AddOrUpdate(chatId, new List <IScheduleGroup> { group }, (id, oldList) => { duplicate = oldList.FirstOrDefault(g => g.GType == group.GType); if (duplicate != null) { if (!duplicate.Equals(group)) { oldList.Remove(duplicate); if (clearOther) { otherGroups = oldList.ToList(); oldList.Clear(); } oldList.Add(group); } } else { oldList.Add(group); } return(oldList); }); try { if (!groupToUsers.ContainsKey(group)) { group.ScheduleChanged += HandleGroupScheduleChanged; } groupToUsers.AddOrUpdate(group, new List <long> { chatId }, (schGroup, oldList) => { if (!oldList.Contains(chatId)) { oldList.Add(chatId); } return(oldList); }); if (duplicate != null && !duplicate.Equals(group)) { RemoveIdFromGroup(duplicate, chatId); if (clearOther && otherGroups != null && otherGroups.Any()) { foreach (var otherGroup in otherGroups) { RemoveIdFromGroup(otherGroup, chatId); } } } } catch (Exception e) { logger?.LogError(e, "Exc"); } void RemoveIdFromGroup(IScheduleGroup rgroup, long id) { if (groupToUsers.TryGetValue(rgroup, out var list)) { list.Remove(id); if (!list.Any()) { groupToUsers.Remove(rgroup, out list); } } if (!groupToUsers.ContainsKey(rgroup)) { rgroup.ScheduleChanged -= HandleGroupScheduleChanged; } } }