Beispiel #1
0
        async Task DoLoad()
        {
            SchoolVplan.Value = await Persistence.LoadVplan();

            NewSchoolClassBookmarks.AddRange(await Persistence.LoadNewSchoolClassBookmarks());
            SchoolBookmarks.UpdateOrInsertRange(await Persistence.LoadSchoolBookmarks());
            TeacherBookmarks.UpdateOrInsertRange(await Persistence.LoadTeacherBookmarks());
            (await Persistence.LoadSchoolClassBookmarks()).ForEach(UpdateSchoolClassBookmark);
            UpdateBookmarkedVplan();
        }
Beispiel #2
0
        async Task <VplanDiff> DoRefresh()
        {
            LastRefreshFailed.Value = false;
            IsRefreshing.Value      = true;

            var oldVplan            = MyVplan.Value;
            var oldNewSchoolClasses = NewSchoolClassBookmarks.ToList();

            try
            {
                var newVplan = await Loader.Load();

                if (newVplan.Equals(SchoolVplan.Value))
                {
                    IsRefreshing.Value = false;
                    return(new VplanDiff(false, new List <Change>(), new List <SchoolClassBookmark>()));
                }
                SchoolVplan.Value = newVplan;
            }
            catch (Exception e)
            {
                Debug.Print("Failed to refresh data: " + e);
                LastRefreshFailed.Value = true;
                IsRefreshing.Value      = false;
                return(null);
            }

            AddNewSchoolClasses(SchoolVplan.Value.Changes.Select(c => c.SchoolClass));
            AddNewTeachers(SchoolVplan.Value.Changes.Select(c => c.OldLesson.Teacher).Where(teacher => teacher != null));
            AddNewTeachers(SchoolVplan.Value.Changes.Select(c => c.NewLesson.Teacher).Where(teacher => teacher != null));
            UpdateBookmarkedVplan();

            await PersistAll();

            var gotUpdated           = SchoolVplan.Value != null && (oldVplan == null || !oldVplan.LastUpdate.Equals(SchoolVplan.Value.LastUpdate));
            var oldBookmarkedChanges = new HashSet <Change>(oldVplan != null ? oldVplan.Changes : new ImmutableArray <Change>());
            var newBookmarkedChanges = new HashSet <Change>(MyVplan.Value != null ? MyVplan.Value.Changes : new ImmutableArray <Change>());
            var newBookmarks         = newBookmarkedChanges.Except(oldBookmarkedChanges);
            var newNewClasses        = new HashSet <SchoolClassBookmark>(NewSchoolClassBookmarks).Except(new HashSet <SchoolClassBookmark>(oldNewSchoolClasses));

            IsRefreshing.Value = false;
            return(new VplanDiff(gotUpdated, newBookmarks.ToList(), newNewClasses.ToList()));
        }
Beispiel #3
0
        void UpdateSchoolClassBookmark(SchoolClassBookmark newBookmark)
        {
            // Replace bookmark
            AllSchoolClassBookmarks.Remove(newBookmark);
            AllSchoolClassBookmarks.Add(newBookmark);

            var newBookmarkIndex = NewSchoolClassBookmarks.IndexOf(newBookmark);

            if (newBookmarkIndex >= 0)
            {
                NewSchoolClassBookmarks[newBookmarkIndex] = newBookmark;
            }

            if (newBookmark.SchoolBookmarked)
            {
                SchoolClassBookmarks.UpdateOrInsert(newBookmark);
            }
            else
            {
                SchoolClassBookmarks.Remove(newBookmark);
            }
        }
Beispiel #4
0
        void AddNewSchoolClasses(IEnumerable <SchoolClass> schoolClasses)
        {
            foreach (SchoolClass schoolClass in schoolClasses)
            {
                var schoolBookmark = GetSchoolBookmark(schoolClass.School);
                Debug.Assert(schoolBookmark != null, string.Format("School class bookmark {0} schould exist", schoolClass));
                var newBookmark = new SchoolClassBookmark(schoolClass,
                                                          false,
                                                          schoolBookmark.Bookmarked);

                if (AllSchoolClassBookmarks.Contains(newBookmark))
                {
                    return;
                }

                if (schoolBookmark.Bookmarked)
                {
                    NewSchoolClassBookmarks.Add(newBookmark);
                }
                UpdateSchoolClassBookmark(newBookmark);
            }
        }
Beispiel #5
0
 async Task PersistNewSchoolClasses()
 {
     await Persistence.PersistNewSchoolClassBookmarks(NewSchoolClassBookmarks.ToList());
 }
Beispiel #6
0
 public async Task ClearNewSchoolClassBookmarks()
 {
     NewSchoolClassBookmarks.Clear();
     await PersistNewSchoolClasses();
 }