Esempio n. 1
0
        private async Task UpdateItemsAsync(int offset, int maxId, int count, bool forceClear = true)
        {
            //var lastDate = 0;
            //var lastMsgId = 0;
            //var lastPeer = (TLInputPeerBase)new TLInputPeerEmpty();

            //var last = this.LastOrDefault();
            //if (last != null)
            //{
            //    lastDate = last.TopMessageItem.Date;
            //    lastMsgId = last.TopMessage;

            //    if (last.Peer is TLPeerUser)
            //    {
            //        lastPeer = new TLInputPeerUser { UserId = last.Peer.Id };
            //    }
            //    else if (last.Peer is TLPeerChat)
            //    {
            //        lastPeer = new TLInputPeerChat { ChatId = last.Peer.Id };
            //    }
            //    else if (last.Peer is TLPeerChannel)
            //    {
            //        lastPeer = new TLInputPeerChannel { ChannelId = last.Peer.Id };
            //    }
            //}

            var response = await _protoService.GetDialogsAsync(0, 0, new TLInputPeerEmpty(), count);

            if (response.IsSucceeded)
            {
                var result = response.Result;
                var vector = new TLVector <TLDialog>(result.Dialogs.Count);
                foreach (var dialog in result.Dialogs.OrderBy(x => x.GetDateIndex()))
                {
                    vector.Add(dialog);
                }

                //if (!forceClear) forceClear = Count == 0;

                result.Dialogs = vector;
                await Execute.BeginOnUIThreadAsync(() =>
                {
                    var needUpdate = false;
                    var itemsCount = Count;
                    var i          = 0;
                    var k          = 0;
                    while (i < result.Dialogs.Count && k < Count)
                    {
                        if (itemsCount - 1 < i || result.Dialogs[i] != this[k])
                        {
                            var dialog = this[k] as TLDialog;
                            if (dialog != null)
                            {
                                var serviceMessage = dialog.TopMessageItem as TLMessageService;
                                //if (serviceMessage != null && serviceMessage.Action is TLMessageActionContactRegistered)
                                //{
                                //    i--;
                                //    goto IL_AE;
                                //}
                            }

                            //var encryptedDialog = this[k] as TLEncryptedDialog;
                            //if (encryptedDialog == null)
                            //{
                            //    needUpdate = true;
                            //    break;
                            //}
                            i--;
                        }

IL_AE:
                        i++;
                        k++;
                    }
                    //this.Status = ((this.Items.get_Count() == 0 && result.Dialogs.Count == 0) ? string.Format("{0}", AppResources.NoDialogsHere) : string.Empty);
                    if (needUpdate || forceClear)
                    {
                        //var encryptedDialogs = this.OfType<TLEncryptedDialog>();
                        var startIndex = 0;

                        //foreach (var encryptedDialog in encryptedDialogs)
                        //{
                        //    for (int j = startIndex; j < result.Dialogs.Count; j++)
                        //    {
                        //        if (encryptedDialog.GetDateIndex() > result.Dialogs[j].GetDateIndex())
                        //        {
                        //            result.Dialogs.Insert(j, encryptedDialog);
                        //            startIndex = j;
                        //            break;
                        //        }
                        //    }
                        //}

                        //var broadcastDialogs = Enumerable.OfType<TLBroadcastDialog>(this);
                        startIndex = 0;

                        //foreach (var broadcastDialog in broadcastDialogs)
                        //{
                        //    for (int j = startIndex; j < result.Dialogs.Count; j++)
                        //    {
                        //        if (broadcastDialog.GetDateIndex() > result.Dialogs[j].GetDateIndex())
                        //        {
                        //            result.Dialogs.Insert(j, broadcastDialog);
                        //            startIndex = j;
                        //            break;
                        //        }
                        //    }
                        //}

                        if (forceClear)
                        {
                            Clear();
                        }

                        foreach (var dialog in result.Dialogs)
                        {
                            if (forceClear)
                            {
                                Insert(0, dialog);
                            }
                            else
                            {
                                MoveOrInsert(dialog);
                            }
                        }

                        //HasMoreItems = Count > 0;
                    }
                    else
                    {
                        //HasMoreItems = Count > 0;
                    }
                    //this.IsWorking = false;
                });
            }
            //}, delegate (TLRPCError error)
            //{
            //    Execute.BeginOnUIThread(delegate
            //    {
            //        HasMoreItems = Count > 0;
            //    });
            //});
        }