private void PingMainTransportAsync(TLProxyBase item, ITransport transport)
        {
            MTProtoService.PingAsync(TLLong.Random(),
                                     pong => Execute.BeginOnUIThread(() =>
            {
                item.Ping = transport.Ping > 0
                        ? new TLInt((int)transport.Ping)
                        : null;

                Set(_proxyConfig);
            }));
        }
        protected override void OnActivate()
        {
            base.OnActivate();

            _proxyConfig = _transportService.GetProxyConfig() as TLProxyConfig76;
            if (_proxyConfig != null)
            {
                _isEnabled   = _proxyConfig.IsEnabled.Value;
                _useForCalls = _proxyConfig.UseForCalls.Value;

                var now = TLUtils.DateToUniversalTimeTLInt(MTProtoService.ClientTicksDelta, DateTime.Now);
                Items.Clear();
                for (var i = 0; i < _proxyConfig.Items.Count; i++)
                {
                    var item = _proxyConfig.Items[i];
                    item.IsSelected = i == _proxyConfig.SelectedIndex.Value;
                    Items.Add(item);

                    if (CheckProxy(item))
                    {
                        item.Status = ProxyStatus.Connecting;
                        item.Ping   = null;
                        _proxyChecker.CheckAsync(item, 10.0,
                                                 (proxyItem, ping) => Execute.BeginOnUIThread(() =>
                        {
                            proxyItem.Proxy.CheckTime = now;
                            proxyItem.Proxy.Ping      = ping;
                            proxyItem.Proxy.Status    = item.Ping != null ? ProxyStatus.Available : ProxyStatus.Unavailable;

                            Set(_proxyConfig);
                        }));
                    }
                }
            }

            _transportService.TransportConnected  += OnTransportConnected;
            _transportService.TransportConnecting += OnTransportConnecting;
        }
Exemple #3
0
        private void LoadCalls()
        {
            var timespan = Items.Count > 0 ? 1.0 : 0.0;

            BeginOnThreadPool(TimeSpan.FromSeconds(timespan), () =>
            {
                var isAuthorized = SettingsHelper.GetValue <bool>(Constants.IsAuthorizedKey);
                //if (!FirstRun)
                //{
                //    return;
                //}
                if (!isAuthorized)
                {
                    return;
                }

                FirstRun = false;

                Status    = Items.Count == 0 && LazyItems.Count == 0 ? AppResources.Loading : string.Empty;
                var limit = 50;//Constants.DialogsSlice;
                MTProtoService.SearchAsync(
                    new TLInputPeerEmpty(),
                    TLString.Empty,
                    null,
                    new TLInputMessagesFilterPhoneCalls {
                    Flags = new TLInt(0)
                },
                    new TLInt(0),
                    new TLInt(0),
                    new TLInt(0),
                    new TLInt(0),
                    new TLInt(limit),
                    new TLInt(0),
                    result =>
                {
                    CacheService.AddChats(result.Chats, results => { });
                    CacheService.AddUsers(result.Users, results => { });

                    var items       = new List <TLDialogBase>();
                    var newMessages = result as TLMessages;
                    if (newMessages != null)
                    {
                        var usersCache = new Dictionary <int, TLUserBase>();
                        foreach (var user in newMessages.Users)
                        {
                            usersCache[user.Index] = user;
                        }

                        var chatsCache = new Dictionary <int, TLChatBase>();
                        foreach (var chat in newMessages.Chats)
                        {
                            chatsCache[chat.Index] = chat;
                        }

                        foreach (var message in newMessages.Messages.OfType <TLMessageCommon>())
                        {
                            var dialog = new TLDialog {
                                TopMessage = message
                            };
                            var peer = TLUtils.GetPeerFromMessage(message);
                            if (peer is TLPeerUser)
                            {
                                TLUserBase user;
                                if (!usersCache.TryGetValue(peer.Id.Value, out user))
                                {
                                    continue;
                                }
                                dialog.With = user;
                                items.Add(dialog);
                            }
                        }
                    }

                    Telegram.Api.Helpers.Execute.BeginOnUIThread(() =>
                    {
                        IsLastSliceLoaded = result.Messages.Count < limit;
                        _offset           = Constants.DialogsSlice;

                        _isUpdated = true;

                        const int maxMessagesSlice = 8;
                        Items.Clear();
                        for (var i = 0; i < items.Count; i++)
                        {
                            if (i < maxMessagesSlice)
                            {
                                Items.Add(items[i]);
                            }
                            else
                            {
                                LazyItems.Add(items[i]);
                            }
                        }

                        Status = Items.Count == 0 && LazyItems.Count == 0 ? AppResources.NoCallsHere : string.Empty;

                        if (LazyItems.Count > 0)
                        {
                            BeginOnUIThread(() =>
                            {
                                for (var i = 0; i < LazyItems.Count; i++)
                                {
                                    Items.Add(LazyItems[i]);
                                }
                                LazyItems.Clear();
                            });
                        }
                    });
                },
                    error => Execute.BeginOnUIThread(() =>
                {
                    Telegram.Api.Helpers.Execute.ShowDebugMessage("messages.getDialogs error " + error);
                    //_isUpdated = true;
                    Status = string.Empty;
                }));
            });

            base.OnInitialize();
        }