/// <summary> /// Subscribe to updates that involve order change /// </summary> private IDisposable BindOrderUpdates() { return(_chatUpdater.GetOrderUpdates() .Buffer(TimeSpan.FromSeconds(2)) .SubscribeOn(RxApp.TaskpoolScheduler) .ObserveOn(RxApp.MainThreadScheduler) .Where(changes => changes.Count > 0) .SelectMany(_ => _chatLoader.LoadChats() .Select(GetChatEntryModel) .ToList()) .Do(entries => { for (int i = 0; i < entries.Count; i++) { entries[i].Order = i; } }) .Accept(entries => { entries.Insert(0, HomeEntryModel.Instance); _chats.EditDiff(entries, (m1, m2) => m1.Id == m2.Id); _chats.Refresh(); })); }
/// <summary> /// Subscribe to updates that involve order change /// </summary> private IDisposable BindOrderUpdates( IChatLoader chatLoader, IChatUpdater chatUpdater) { return(chatUpdater.GetOrderUpdates() .Buffer(TimeSpan.FromSeconds(1)) .SubscribeOn(RxApp.TaskpoolScheduler) .ObserveOn(RxApp.MainThreadScheduler) .Accept(changes => { if (changes.Count > 0) { LoadChats(chatLoader) .DisposeWith(_serviceDisposable); } })); }