/// <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();
            }));
        }
Exemple #2
0
 /// <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);
         }
     }));
 }