public void LocalRefresh() { if(App.CurrentAthlete == null) return; var comparer = new LeagueComparer(); var toJoin = DataManager.Instance.Leagues.Where(k => !App.CurrentAthlete.Memberships.Select(m => m.LeagueId).Contains(k.Key)) .Select(k => k.Value).ToList(); var toRemove = Leagues.Where(vm => vm.League != null).Select(vm => vm.League).Except(toJoin, comparer).ToList(); var toAdd = toJoin.Except(Leagues.Select(vm => vm.League), comparer).OrderBy(r => r.Name).Select(l => new LeagueViewModel { LeagueId = l.Id }).ToList(); toRemove.ForEach(l => Leagues.Remove(Leagues.Single(vm => vm.League == l))); if(Leagues.Count == 0 && toAdd.Count == 0) { if(_empty == null) _empty = new LeagueViewModel { EmptyMessage = "There are no available leagues to join." }; if(!Leagues.Contains(_empty)) Leagues.Add(_empty); } var compare = new LeagueSortComparer(); foreach(var lv in toAdd) { int index = 0; foreach(var l in Leagues.ToList()) { if(compare.Compare(lv, l) < 0) break; index++; } Leagues.Insert(index, lv); } if(toAdd.Count > 0 || toRemove.Count > 0) { var last = Leagues.LastOrDefault(); foreach(var l in Leagues) l.IsLast = l == last; } if(Leagues.Count > 0 && Leagues.Contains(_empty) && Leagues.First() != _empty) { Leagues.Remove(_empty); } }
public void LocalRefresh() { if(Athlete == null) return; if(Leagues == null) Leagues = new ObservableCollection<LeagueViewModel>(); var comparer = new LeagueIdComparer(); var toRemove = Leagues.Where(vm => vm.League != null).Select(vm => vm.League).Except(Athlete.Leagues, comparer).ToList(); var toAdd = Athlete.Leagues.Except(Leagues.Select(vm => vm.League), comparer).OrderBy(r => r.Name).Select(l => new LeagueViewModel { LeagueId = l.Id }).ToList(); toRemove.ForEach(l => Leagues.Remove(Leagues.Single(vm => vm.League == l))); foreach(var l in Leagues) l.NotifyPropertiesChanged(); if(Leagues.Count == 0 && toAdd.Count == 0) { if(_empty == null) _empty = new LeagueViewModel { EmptyMessage = "You don't belong to any leagues... yet.\n\n\n\nYou can and will join leagues by tapping the + button above." }; if(!Leagues.Contains(_empty)) Leagues.Add(_empty); } var compare = new LeagueSortComparer(); foreach(var lv in toAdd) { int index = 0; foreach(var l in Leagues.ToList()) { if(compare.Compare(lv, l) < 0) break; index++; } Leagues.Insert(index, lv); } if(toAdd.Count > 0 || toRemove.Count > 0) { var last = Leagues.LastOrDefault(); foreach(var l in Leagues) l.IsLast = l == last; } if(Leagues.Count > 0 && Leagues.Contains(_empty) && Leagues.First() != _empty) { Leagues.Remove(_empty); } }