private void ListCollectionChanged <T>(DelayLoadingObservableCollection <T> target, NotifyCollectionChangedEventArgs e) where T : class { switch (e.Action) { case NotifyCollectionChangedAction.Add: target.Insert(e.NewStartingIndex, (T)e.NewItems[0]); break; case NotifyCollectionChangedAction.Move: target.Move(e.OldStartingIndex, e.NewStartingIndex); break; case NotifyCollectionChangedAction.Remove: target.RemoveAt(e.OldStartingIndex); break; case NotifyCollectionChangedAction.Reset: target.Clear(); break; case NotifyCollectionChangedAction.Replace: Debug.Assert(false); break; } }
public BoardsPageViewModel() { Favorites = new DelayLoadingObservableCollection <BoardViewModel>(100, true, 15, 100, 10); All = new DelayLoadingObservableCollection <BoardViewModel>(50, true, 15, 100, 10); Watchlist = new DelayLoadingObservableCollection <ThreadViewModel>(100, true, 15, 100, 10); History = new DelayLoadingObservableCollection <ThreadViewModel>(100, true, 15, 100, 10); Favorites.AddRange(CriticalSettingsManager.Current.Favorites.Select(x => new BoardViewModel(x))); Favorites.Flush(2); All.AddRange(CriticalSettingsManager.Current.Boards.Select(x => new BoardViewModel(x))); CriticalSettingsManager.Current.Favorites.CollectionChanged += FavoritesChanged; CriticalSettingsManager.Current.Boards.CollectionChanged += AllChanged; App.InitialFrameRenderedTask.ContinueWith(task => { if (_removedFromJournal) { return; } Watchlist.AddRange(TransitorySettingsManager.Current.Watchlist.Select(x => new ThreadViewModel(x))); History.AddRange(TransitorySettingsManager.Current.History.Select(x => new ThreadViewModel(x))); TransitorySettingsManager.Current.Watchlist.CollectionChanged += WatchlistChanged; TransitorySettingsManager.Current.History.CollectionChanged += HistoryChanged; }, TaskContinuationOptions.ExecuteSynchronously); }
public override void Initialize(IDictionary <string, string> arguments, NavigationEventArgs e) { base.Initialize(arguments, e); _thread = ThreadCache.Current.EnforceBoard(arguments["board"]).EnforceThread(ulong.Parse(arguments["thread"])); _seenPosts = new HashSet <ulong>(); if (arguments.ContainsKey("post")) { _scrollTarget = ulong.Parse(arguments["post"]); } ViewState = PostsPageViewState.None; PivotTitle = _thread.Board.DisplayName + " - " + (string.IsNullOrEmpty(_thread.Subject) ? _thread.Number + "" : _thread.Subject); IsWatchlisted = TransitorySettingsManager.Current.Watchlist.Count(x => x.Board.Name == _thread.Board.Name && x.Number == _thread.Number) > 0; AllPosts = new DelayLoadingObservableCollection <PostViewModel>(100, false, 15, 100, 10); ImagePosts = new DelayLoadingObservableCollection <PostViewModel>(25, true, 35, 100, 10); SelectedPosts = new DelayLoadingObservableCollection <PostViewModel>(50, true, 3, 100, 10); QuotedTitle = ""; Background = _thread.Board.Brush; QuoteAreaVisibility = Visibility.Collapsed; ReplyAreaVisibility = Visibility.Collapsed; Thread thread = TransitorySettingsManager.Current.History.FirstOrDefault(x => x.Board.Name == _thread.Board.Name && x.Number == _thread.Number); if (thread != null) { TransitorySettingsManager.Current.History.Remove(thread); } TransitorySettingsManager.Current.History.Insert(0, _thread); InsertPostList(_thread.Posts.Values, 20); InitialUpdateTask = Update(); if (!CriticalSettingsManager.Current.EnableManualRefresh) { _refreshTimer = new System.Threading.Timer(state => { Deployment.Current.Dispatcher.BeginInvoke(async() => await Update()); }, null, 30 * 1000, 30 * 1000); } DoLoadCaptcha().ContinueWith(result => { throw result.Exception; }, TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.ExecuteSynchronously); }
public override void Initialize(IDictionary<string, string> arguments, NavigationEventArgs e) { base.Initialize(arguments, e); _thread = ThreadCache.Current.EnforceBoard(arguments["board"]).EnforceThread(ulong.Parse(arguments["thread"])); _seenPosts = new HashSet<ulong>(); if (arguments.ContainsKey("post")) { _scrollTarget = ulong.Parse(arguments["post"]); } ViewState = PostsPageViewState.None; PivotTitle = _thread.Board.DisplayName + " - " + (string.IsNullOrEmpty(_thread.Subject) ? _thread.Number + "" : _thread.Subject); IsWatchlisted = TransitorySettingsManager.Current.Watchlist.Count(x => x.Board.Name == _thread.Board.Name && x.Number == _thread.Number) > 0; AllPosts = new DelayLoadingObservableCollection<PostViewModel>(100, false, 15, 100, 10); ImagePosts = new DelayLoadingObservableCollection<PostViewModel>(25, true, 35, 100, 10); SelectedPosts = new DelayLoadingObservableCollection<PostViewModel>(50, true, 3, 100, 10); QuotedTitle = ""; Background = _thread.Board.Brush; QuoteAreaVisibility = Visibility.Collapsed; ReplyAreaVisibility = Visibility.Collapsed; Thread thread = TransitorySettingsManager.Current.History.FirstOrDefault(x => x.Board.Name == _thread.Board.Name && x.Number == _thread.Number); if (thread != null) { TransitorySettingsManager.Current.History.Remove(thread); } TransitorySettingsManager.Current.History.Insert(0, _thread); InsertPostList(_thread.Posts.Values, 20); InitialUpdateTask = Update(); if (!CriticalSettingsManager.Current.EnableManualRefresh) { _refreshTimer = new System.Threading.Timer(state => { Deployment.Current.Dispatcher.BeginInvoke(async () => await Update()); }, null, 30 * 1000, 30 * 1000); } DoLoadCaptcha().ContinueWith(result => { throw result.Exception; }, TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.ExecuteSynchronously); }