Beispiel #1
0
        public ChooseParticipantsViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, ITelegramEventAggregator eventAggregator)
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            Items  = new ObservableCollection <TLUserBase>();
            Status = AppResources.Loading;
            BeginOnThreadPool(() =>
            {
                _source = _source ??
                          CacheService.GetContacts()
                          .Where(x => !(x is TLUserEmpty) && x.Index != StateService.CurrentUserId)
                          .OrderBy(x => x.FullName)
                          .ToList();

                Status = string.Empty;
                foreach (var contact in _source)
                {
                    LazyItems.Add(contact);
                }

                if (Items.Count == 0 && LazyItems.Count == 0)
                {
                    Status = AppResources.NoUsersHere;
                }

                BeginOnUIThread(() => PopulateItems(() => { _isFullResults = true; }));
            });
        }
Beispiel #2
0
        protected override void OnInitialize()
        {
            Status = AppResources.Loading;
            MTProtoService.GetBlockedAsync(new TLInt(0), new TLInt(int.MaxValue),
                                           result =>
            {
                var contacts = result as TLContactsBlocked;
                if (contacts != null)
                {
                    foreach (var user in contacts.Users)
                    {
                        var cachedUser = CacheService.GetUser(new TLInt(user.Index));
                        if (cachedUser != null)
                        {
                            LazyItems.Add(cachedUser);
                        }
                        else
                        {
                            LazyItems.Add(user);
                        }
                    }

                    Status = Items.Count > 0 || LazyItems.Count > 0? string.Empty : string.Format("{0}", AppResources.NoUsersHere);
                    BeginOnUIThread(PopulateItems);
                }
            },
                                           error => BeginOnUIThread(() => Status = string.Empty));

            base.OnInitialize();
        }
        public ChooseCountryViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, ITelegramEventAggregator eventAggregator) 
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            const string Groups = "abcdefghijklmnopqrstuvwxyz";
            Items = new ObservableCollection<CountriesInGroup>();

            var countries = new List<CountriesInGroup>(Groups.Length);
            var groups = new Dictionary<string, CountriesInGroup>();

            foreach (var c in Groups)
            {
                var group = new CountriesInGroup(c.ToString(CultureInfo.InvariantCulture));
                countries.Add(group);
                groups[c.ToString(CultureInfo.InvariantCulture)] = group;
            }

            foreach (var country in CountryUtils.CountriesSource)
            {
                groups[country.GetKey()].Add(country);
            }

            var count = 0;

            for (var i = 0; i < count; i++)
            {
                Items.Add(countries[i]);
            }

            for (var i = count; i < countries.Count; i++)
            {
                LazyItems.Add(countries[i]);
            }

            BeginOnUIThread(PopulateItems);
        }
        public ChooseCountryViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, ITelegramEventAggregator eventAggregator)
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            const string Groups = "abcdefghijklmnopqrstuvwxyz";

            Items = new ObservableCollection <CountriesInGroup>();

            SearchItems     = new ObservableCollection <Country>();
            LazySearchItems = new List <Country>();

            var countries = new List <CountriesInGroup>(Groups.Length);
            var groups    = new Dictionary <string, CountriesInGroup>();

            foreach (var c in Groups)
            {
                var group = new CountriesInGroup(c.ToString(CultureInfo.InvariantCulture));
                countries.Add(group);
                groups[c.ToString(CultureInfo.InvariantCulture)] = group;
            }

            foreach (var country in CountryUtils.CountriesSource)
            {
                groups[country.GetKey()].Add(country);
            }

            var count = 1;

            for (var i = 0; i < count; i++)
            {
                Items.Add(countries[i]);
            }

            for (var i = count; i < countries.Count; i++)
            {
                LazyItems.Add(countries[i]);
            }

            if (StateService.HideCountryCode)
            {
                StateService.HideCountryCode = false;
                HideCountryCode = true;
            }

            _residenceCountry             = StateService.ResidenceCountry;
            StateService.ResidenceCountry = false;

            PropertyChanged += (sender, args) =>
            {
                if (Property.NameEquals(args.PropertyName, () => IsSearching))
                {
                    if (!IsSearching)
                    {
                        Text = string.Empty;
                    }
                }
            };
        }
        public CreateChannelViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, ITelegramEventAggregator eventAggregator)
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            GroupedUsers = new ObservableCollection <TLUserBase>();
            //GroupedUsers = new ObservableCollection<AlphaKeyGroup<TLUserBase>>();

            BeginOnThreadPool(() =>
            {
                //Thread.Sleep(300);
                _source = _source ??
                          CacheService.GetContacts()
                          .Where(x => !(x is TLUserEmpty) && x.Index != StateService.CurrentUserId)
                          .OrderBy(x => x.FullName)
                          .ToList();

                Status = string.Empty;
                foreach (var contact in _source)
                {
                    contact._isSelected = false;
                    LazyItems.Add(contact);
                }

                if (_source.Count == 0)
                {
                    Status = AppResources.NoUsersHere;
                }

                BeginOnUIThread(PopulateItems);
                Thread.Sleep(500);
                BeginOnUIThread(() =>
                {
                    foreach (var item in _source)
                    {
                        GroupedUsers.Add(item);
                    }
                });
                //var groups = AlphaKeyGroup<TLUserBase>.CreateGroups(
                //    _source,
                //    Thread.CurrentThread.CurrentUICulture,
                //    x => x.FullName,
                //    false);

                //foreach (var @group in groups)
                //{
                //    var gr = new AlphaKeyGroup<TLUserBase>(@group.Key);
                //    foreach (var u in @group.OrderBy(x => x.FullName))
                //    {
                //        gr.Add(u);
                //    }

                //    BeginOnUIThread(() =>
                //    {
                //        GroupedUsers.Add(gr);
                //    });
                //}
            });
        }
Beispiel #6
0
        private void LoadCache()
        {
            var isAuthorized = SettingsHelper.GetValue <bool>(Constants.IsAuthorizedKey);

            if (!isAuthorized)
            {
                return;
            }

            Status = string.Empty;

            var contacts        = CacheService.GetContacts();
            var orderedContacts = contacts.OrderBy(x => x.FullName).ToList();
            var count           = 0;

            Items.Clear();
            LazyItems.Clear();
            for (var i = 0; i < orderedContacts.Count; i++)
            {
                if (!(orderedContacts[i] is TLUserEmpty) &&
                    orderedContacts[i].Index != StateService.CurrentUserId)
                {
                    if (count < 10)
                    {
                        Items.Add(orderedContacts[i]);
                    }
                    else
                    {
                        LazyItems.Add(orderedContacts[i]);
                    }
                    count++;
                }
            }

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

            if (LazyItems.Count > 0)
            {
                PopulateItems(() =>
                {
                    ImportContactsAsync();
                    GetContactsAsync();
                    EventAggregator.Subscribe(this);
                });
            }
            else
            {
                ImportContactsAsync();
                GetContactsAsync();
                EventAggregator.Subscribe(this);
            }
        }
        protected override void OnInitialize()
        {
            BeginOnThreadPool(() =>
            {
                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;
                MTProtoService.GetDialogsAsync(new TLInt(0), new TLInt(0), new TLInt(Constants.DialogsSlice),
                                               dialogs =>
                {
                    foreach (var dialog in dialogs.Dialogs)
                    {
                        LazyItems.Add(dialog);
                    }

                    Status = Items.Count == 0 && LazyItems.Count == 0? string.Format("{0}", AppResources.NoDialogsHere) : string.Empty;
                    if (LazyItems.Count > 0)
                    {
                        BeginOnUIThread(() => PopulateItems(() =>
                        {
                            EventAggregator.Publish(new InvokeImportContacts());
                        }));
                    }
                    else
                    {
                        EventAggregator.Publish(new InvokeImportContacts());
                    }
                },
                                               error =>
                {
                    EventAggregator.Publish(new InvokeImportContacts());
                    Telegram.Api.Helpers.Execute.ShowDebugMessage("messages.getHistory error " + error);
                    Status = string.Empty;
                });
            });



            base.OnInitialize();
        }
        public AddSecretChatParticipantViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, ITelegramEventAggregator eventAggregator)
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            BeginOnThreadPool(() =>
            {
                var isAuthorized = SettingsHelper.GetValue <bool>(Constants.IsAuthorizedKey);
                if (isAuthorized)
                {
                    var contacts = CacheService.GetContacts()
                                   .Where(x => !(x is TLUserEmpty) && x.Index != StateService.CurrentUserId)
                                   .OrderBy(x => x.FullName)
                                   .ToList();

                    Status = string.Empty;

                    var count = 0;
                    const int firstSliceCount = 10;
                    var secondSlice           = new List <TLUserBase>();
                    foreach (var contact in contacts)
                    {
                        if (count < firstSliceCount)
                        {
                            LazyItems.Add(contact);
                        }
                        else
                        {
                            secondSlice.Add(contact);
                        }
                        count++;
                    }

                    BeginOnUIThread(() => PopulateItems(() =>
                    {
                        foreach (var item in secondSlice)
                        {
                            Items.Add(item);
                        }
                    }));
                }

                GetDHConfig();
            });
        }
Beispiel #9
0
        public CreateChannelStep3ViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, ITelegramEventAggregator eventAggregator)
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            GroupedUsers = new ObservableCollection <TLUserBase>();

            _newChannel             = StateService.NewChannel;
            StateService.NewChannel = null;

            BeginOnThreadPool(() =>
            {
                //Thread.Sleep(300);
                _source = _source ??
                          CacheService.GetContacts()
                          .Where(x => !(x is TLUserEmpty) && x.Index != StateService.CurrentUserId)
                          .OrderBy(x => x.FullName)
                          .ToList();

                Status = string.Empty;
                foreach (var contact in _source)
                {
                    contact._isSelected = false;
                    LazyItems.Add(contact);
                }

                if (_source.Count == 0)
                {
                    Status = AppResources.NoUsersHere;
                }

                BeginOnUIThread(PopulateItems);
                Thread.Sleep(500);
                BeginOnUIThread(() =>
                {
                    foreach (var item in _source)
                    {
                        GroupedUsers.Add(item);
                    }
                });
            });
        }
Beispiel #10
0
        public void Search()
        {
            if (_lastUsersRequest != null)
            {
                _lastUsersRequest.Cancel();
            }

            var text = Text.Trim();

            if (string.IsNullOrEmpty(text))
            {
                LazyItems.Clear();
                Items.Clear();
                Status = string.IsNullOrEmpty(Text)? string.Empty : AppResources.NoResults;
                return;
            }

            SearchUsersRequest nextUsersRequest;

            if (!_searchResultsCache.TryGetValue(text, out nextUsersRequest))
            {
                IList <TLUserBase> source;

                if (_lastUsersRequest != null &&
                    text.IndexOf(_lastUsersRequest.Text, StringComparison.OrdinalIgnoreCase) != -1)
                {
                    source = _lastUsersRequest.Source;
                }
                else
                {
                    _source = _source ??
                              CacheService.GetContacts()
                              .Where(x => !(x is TLUserEmpty) && x.Index != StateService.CurrentUserId)
                              .OrderBy(x => x.FullName)
                              .ToList();

                    source = _source;
                }

                nextUsersRequest = new SearchUsersRequest(text, source);
            }

            IsWorking = true;
            nextUsersRequest.ProcessAsync(results =>
                                          Execute.BeginOnUIThread(() =>
            {
                if (nextUsersRequest.IsCanceled)
                {
                    return;
                }

                Status = string.Empty;
                Items.Clear();
                LazyItems.Clear();
                if (results.Count > 0)
                {
                    Items.Add(new TLServiceText {
                        Text = AppResources.Contacts
                    });
                }
                for (var i = 0; i < results.Count; i++)
                {
                    if (i < 6)
                    {
                        Items.Add(results[i]);
                    }
                    else
                    {
                        LazyItems.Add(results[i]);
                    }
                }

                IsWorking = false;
                //Status = Items.Count == 0 ? AppResources.NoResults : string.Empty;

                //return;

                if (LazyItems.Count > 0)
                {
                    PopulateItems(() => ProcessGlobalSearch(nextUsersRequest));
                }
                else
                {
                    ProcessGlobalSearch(nextUsersRequest);
                }
            }));
            _searchResultsCache[nextUsersRequest.Text] = nextUsersRequest;
            _lastUsersRequest = nextUsersRequest;
        }
        public ChooseParticipantsViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, ITelegramEventAggregator eventAggregator)
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            Items  = new ObservableCollection <TLUserBase>();
            Status = AppResources.Loading;
            BeginOnThreadPool(() =>
            {
                if (_source == null)
                {
                    var source   = new List <TLUserBase>();
                    var contacts = CacheService.GetContacts().OrderBy(x => x.FullName);
                    foreach (var contact in contacts)
                    {
                        if (contact is TLUserEmpty)
                        {
                            continue;
                        }
                        var user = contact as TLUser;
                        if (user != null && user.IsSelf)
                        {
                            CurrentUser = user;
                            //continue;
                        }

                        source.Add(contact);
                    }

                    _source = source;
                }

                Status = string.Empty;
                NotifyOfPropertyChange(() => CurrentUser);

                var count = 0;
                const int firstSliceCount = 10;
                var secondSlice           = new List <TLUserBase>();
                foreach (var contact in _source)
                {
                    if (count < firstSliceCount)
                    {
                        LazyItems.Add(contact);
                    }
                    else
                    {
                        secondSlice.Add(contact);
                    }
                    count++;
                }

                if (Items.Count == 0 && LazyItems.Count == 0)
                {
                    Status = AppResources.NoUsersHere;
                }

                BeginOnUIThread(() => PopulateItems(() =>
                {
                    _isFullResults = true;
                    foreach (var item in secondSlice)
                    {
                        Items.Add(item);
                    }
                }));
            });
        }
        protected override void OnInitialize()
        {
            if (Channel == null)
            {
                return;
            }

            //Status = AppResources.Loading;
            IsWorking = true;
            MTProtoService.GetParticipantsAsync(Channel.ToInputChannel(), new TLChannelParticipantsKicked68 {
                Q = TLString.Empty
            }, new TLInt(0), new TLInt(100), new TLInt(0),
                                                result =>
            {
                var channelParticipants = result as TLChannelParticipants;
                if (channelParticipants != null)
                {
                    var kickedParticipants = new Dictionary <int, int>();
                    foreach (var participant in channelParticipants.Participants)
                    {
                        var kickedParticipant = participant as TLChannelParticipantBanned;
                        if (kickedParticipant != null)
                        {
                            kickedParticipants[kickedParticipant.UserId.Value] = kickedParticipant.UserId.Value;
                        }
                    }

                    var contacts = channelParticipants;
                    foreach (var user in contacts.Users)
                    {
                        if (kickedParticipants.ContainsKey(user.Index))
                        {
                            var cachedUser = CacheService.GetUser(new TLInt(user.Index));
                            if (cachedUser != null)
                            {
                                LazyItems.Add(cachedUser);
                            }
                            else
                            {
                                LazyItems.Add(user);
                            }
                        }
                    }

                    BeginOnUIThread(() =>
                    {
                        IsWorking   = false;
                        IsEmptyList = Items.Count == 0 && LazyItems.Count == 0;
                        Status      = string.Empty;
                        PopulateItems();
                    });
                }
            },
                                                error => BeginOnUIThread(() =>
            {
                IsWorking = false;
                Status    = string.Empty;
            }));

            base.OnInitialize();
        }
Beispiel #13
0
        public void Search()
        {
            if (_lastDocumentsRequest != null)
            {
                _lastDocumentsRequest.Cancel();
            }

            var text = Text.Trim();

            if (string.IsNullOrEmpty(text))
            {
                LazyItems.Clear();
                Items.Clear();
                Status = string.IsNullOrEmpty(Text) ? AppResources.SearchAmongYourFiles : AppResources.NoResults;
                return;
            }

            SearchDocumentsRequest nextDocumentsRequest;

            if (!_searchResultsCache.TryGetValue(text, out nextDocumentsRequest))
            {
                IList <TLMessageBase> source;

                if (_lastDocumentsRequest != null &&
                    text.IndexOf(_lastDocumentsRequest.Text, StringComparison.OrdinalIgnoreCase) != -1)
                {
                    source = _lastDocumentsRequest.Source;
                }
                else
                {
                    source = _source;
                }

                nextDocumentsRequest = new SearchDocumentsRequest(CurrentItem.ToInputPeer(), text, source);
            }

            IsWorking = true;
            nextDocumentsRequest.ProcessAsync(results =>
                                              Telegram.Api.Helpers.Execute.BeginOnUIThread(() =>
            {
                if (nextDocumentsRequest.IsCanceled)
                {
                    return;
                }

                Status = results.Count > 0 ? string.Empty : Status;
                Items.Clear();
                LazyItems.Clear();
                for (var i = 0; i < results.Count; i++)
                {
                    if (i < 6)
                    {
                        Items.Add((TLMessage)results[i]);
                    }
                    else
                    {
                        LazyItems.Add((TLMessage)results[i]);
                    }
                }

                IsWorking = false;
                NotifyOfPropertyChange(() => IsEmptyList);

                if (LazyItems.Count > 0)
                {
                    PopulateItems(() => ProcessGlobalSearch(nextDocumentsRequest));
                }
                else
                {
                    ProcessGlobalSearch(nextDocumentsRequest);
                }
            }));

            _searchResultsCache[nextDocumentsRequest.Text] = nextDocumentsRequest;
            _lastDocumentsRequest = nextDocumentsRequest;
        }
Beispiel #14
0
        public override void Search(string text)
        {
            _lastText = text;
            Status    = string.Empty;
            Items.Clear();

            if (string.IsNullOrEmpty(text))
            {
                Status = AppResources.NoResults;
                return;
            }

            var messages = CacheService.GetMessages().OfType <TLMessage>();

            var cache = new Dictionary <int, TLMessage>();

            LazyItems.Clear();
            foreach (var message in messages)
            {
                if (message.Message.Value.IndexOf(text, StringComparison.OrdinalIgnoreCase) != -1)
                {
                    var dialog = CacheService.GetDialog(message);
                    LazyItems.Add(new TLDialog24 {
                        With = dialog.With, TopMessage = message
                    });
                    cache[message.Index] = message;
                }
            }

            IsWorking          = true;
            _offset            = 0;
            _isLastSliceLoaded = false;
            MTProtoService.SearchAsync(
                new TLInputPeerEmpty(),
                new TLString(text),
                null,
                new TLInputMessagesFilterEmpty(),
                new TLInt(0),
                new TLInt(0),
                new TLInt(_offset),
                new TLInt(0),
                new TLInt(Limit),
                new TLInt(0),
                result =>
            {
                CacheService.AddChats(result.Chats, results => { });
                CacheService.AddUsers(result.Users, results => { });

                _offset  += Limit;
                IsWorking = false;

                var newMessages = result as TLMessages;
                if (newMessages != null)
                {
                    foreach (var message in newMessages.Messages.OfType <TLMessageCommon>())
                    {
                        if (cache.ContainsKey(message.Index))
                        {
                            continue;
                        }

                        var dialog = new TLDialog {
                            TopMessage = message
                        };
                        var peer = TLUtils.GetPeerFromMessage(message);
                        if (peer is TLPeerUser)
                        {
                            var user = newMessages.Users.FirstOrDefault(x => x.Index == peer.Id.Value);
                            if (user == null)
                            {
                                continue;
                            }
                            dialog.With = user;
                        }
                        else if (peer is TLPeerChat)
                        {
                            var chat = newMessages.Chats.FirstOrDefault(x => x.Index == peer.Id.Value);
                            if (chat == null)
                            {
                                continue;
                            }

                            dialog.With = chat;
                        }
                        else if (peer is TLPeerChannel)
                        {
                            var channel = newMessages.Chats.FirstOrDefault(x => x.Index == peer.Id.Value);
                            if (channel == null)
                            {
                                continue;
                            }

                            dialog.With = channel;
                        }
                        LazyItems.Add(dialog);
                    }
                }

                _lastCache = cache;
                if (Items.Count == 0 && LazyItems.Count == 0)
                {
                    Status = AppResources.NoResults;
                }

                Deployment.Current.Dispatcher.BeginInvoke(PopulateItems);
            },
                error =>
            {
                IsWorking = false;
            });

            Deployment.Current.Dispatcher.BeginInvoke(PopulateItems);
        }
Beispiel #15
0
        public void Search()
        {
            if (_lastUsersRequest != null)
            {
                _lastUsersRequest.Cancel();
            }

            var text = Text.Trim();

            if (string.IsNullOrEmpty(text))
            {
                LazyItems.Clear();
                Items.Clear();
                foreach (var item in _source)
                {
                    Items.Add(item);
                }
                //Status = string.IsNullOrEmpty(Text) ? AppResources.SearchAmongYourContacts : AppResources.NoResults;
                return;
            }

            SearchUsersRequest nextUsersRequest;

            if (!_searchResultsCache.TryGetValue(text, out nextUsersRequest))
            {
                IList <TLUserBase> source;

                if (_lastUsersRequest != null &&
                    text.IndexOf(_lastUsersRequest.Text, StringComparison.OrdinalIgnoreCase) != -1)
                {
                    source = _lastUsersRequest.Source;
                }
                else
                {
                    _source = _source ??
                              Items
                              .OrderBy(x => x.FullName)
                              .ToList();

                    source = _source;
                }

                nextUsersRequest = new SearchUsersRequest(text, source);
            }

            IsWorking = true;
            nextUsersRequest.ProcessAsync(results =>
                                          Telegram.Api.Helpers.Execute.BeginOnUIThread(() =>
            {
                if (nextUsersRequest.IsCanceled)
                {
                    return;
                }

                //Status = string.Empty;
                Items.Clear();
                LazyItems.Clear();
                if (results.Count > 0)
                {
                    //Items.Add(new TLServiceText { Text = AppResources.Contacts });
                }
                for (var i = 0; i < results.Count; i++)
                {
                    if (i < 6)
                    {
                        Items.Add(results[i]);
                    }
                    else
                    {
                        LazyItems.Add(results[i]);
                    }
                }

                IsWorking = false;
                //Status = Items.Count == 0 ? AppResources.NoResults : string.Empty;

                //return;

                if (LazyItems.Count > 0)
                {
                    PopulateItems();
                }
            }));
            _searchResultsCache[nextUsersRequest.Text] = nextUsersRequest;
            _lastUsersRequest = nextUsersRequest;
        }
        public void Search(string text)
        {
            if (_lastSearchRequest != null)
            {
                _lastSearchRequest.Cancel();
            }

            var trimmedText = text.Trim();

            if (string.IsNullOrEmpty(trimmedText))
            {
                if (_isFullResults)
                {
                    return;
                }

                LazyItems.Clear();
                Items.Clear();

                //foreach (var contact in _source)
                //{
                //    Items.Add(contact);
                //}

                _isFullResults = true;

                return;
            }

            var nextSearchRequest = CreateSearchRequest(text);

            _isFullResults = false;
            IsWorking      = true;
            nextSearchRequest.ProcessAsync(results =>
                                           Execute.BeginOnUIThread(() =>
            {
                if (nextSearchRequest.IsCanceled)
                {
                    return;
                }

                Items.Clear();
                LazyItems.Clear();

                for (var i = 0; i < results.Count; i++)
                {
                    if (i < 6)
                    {
                        Items.Add(results[i]);
                    }
                    else
                    {
                        LazyItems.Add(results[i]);
                    }
                }

                IsWorking = false;
                Status    = Items.Count == 0 ? AppResources.NoResults : string.Empty;

                PopulateItems();
            }));

            _searchResultsCache[nextSearchRequest.Text] = nextSearchRequest;
            _lastSearchRequest = nextSearchRequest;
        }
        protected override void OnActivate()
        {
            base.OnActivate();

            //if (FirstRun)
            //{
            //    SignInImport();
            //}
            //else
            {
                if (!_runOnce)
                {
                    BeginOnThreadPool(() =>
                    {
                        Thread.Sleep(300);
                        try
                        {
                            foreach (var item in Items)
                            {
                                item.NotifyOfPropertyChange("Status");
                            }
                        }
                        catch (Exception e)
                        {
                            TLUtils.WriteLine(e.ToString(), LogSeverity.Error);
                        }
                    });

                    return;
                }
                _runOnce = false;
                //BeginOnThreadPool(() =>
                {
#if WP7
                    Thread.Sleep(400);
#endif
                    var isAuthorized = SettingsHelper.GetValue <bool>(Constants.IsAuthorizedKey);
                    if (isAuthorized)
                    {
                        Status = Items.Count == 0 && LazyItems.Count == 0 ? AppResources.Loading : string.Empty;
                        var contacts = CacheService.GetContacts();
                        Status = string.Empty;
                        var orderedContacts = contacts.OrderBy(x => x.FullName).ToList();
                        var count           = 0;

                        Items.Clear();
                        for (var i = 0; count < 10 && i < orderedContacts.Count; i++)
                        {
                            if (!(orderedContacts[i] is TLUserEmpty) &&
                                orderedContacts[i].Index != StateService.CurrentUserId)
                            {
                                Items.Add(orderedContacts[i]);
                            }
                            count++;
                        }

                        LazyItems.Clear();
                        for (var i = count; i < orderedContacts.Count; i++)
                        {
                            if (!(orderedContacts[i] is TLUserEmpty) && orderedContacts[i].Index != StateService.CurrentUserId)
                            {
                                LazyItems.Add(orderedContacts[i]);
                            }
                        }


                        Status = Items.Count == 0 && LazyItems.Count == 0 ? AppResources.Loading : string.Empty;
                        if (LazyItems.Count > 0)
                        {
                            PopulateItems(() =>
                            {
                                ImportContactsAsync();
                                UpdateItemsAsync();
                            });
                        }
                        else
                        {
                            ImportContactsAsync();
                            UpdateItemsAsync();
                        }
                    }
                }//);
            }
        }
        protected override void OnInitialize()
        {
            BeginOnThreadPool(() =>
            {
                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 = Constants.DialogsSlice;
                MTProtoService.GetDialogsAsync(
#if LAYER_40
                    new TLInt(0), new TLInt(limit),
#else
                    new TLInt(0), new TLInt(0), new TLInt(limit),
#endif
                    dialogs => Execute.BeginOnUIThread(() =>
                {
                    IsLastSliceLoaded = dialogs.Dialogs.Count < limit;
                    _offset           = Constants.DialogsSlice;

                    _isUpdated = true;
                    const int firstSliceCount = 8;
                    var count = 0;
                    for (var i = 0; i < dialogs.Dialogs.Count; i++)
                    {
                        if (count < firstSliceCount)
                        {
                            Items.Add(dialogs.Dialogs[i]);
                            count++;
                        }
                        else
                        {
                            LazyItems.Add(dialogs.Dialogs[i]);
                        }
                    }

                    Status = Items.Count == 0 && LazyItems.Count == 0 ? string.Format("{0}", AppResources.NoDialogsHere) : string.Empty;

                    if (LazyItems.Count > 0)
                    {
                        BeginOnUIThread(() =>
                        {
                            for (var i = 0; i < LazyItems.Count; i++)
                            {
                                Items.Add(LazyItems[i]);
                            }
                            LazyItems.Clear();

                            InvokeImportContacts();
                            UpdateChannels();
                        });
                    }
                    else
                    {
                        InvokeImportContacts();
                        UpdateChannels();
                    }
                }),
                    error => BeginOnUIThread(() =>
                {
                    InvokeImportContacts();
                    UpdateChannels();

                    Execute.ShowDebugMessage("messages.getDialogs error " + error);
                    _isUpdated = true;
                    Status     = string.Empty;
                }));
            });

            base.OnInitialize();
        }
Beispiel #19
0
        public ChooseDialogViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, ITelegramEventAggregator eventAggregator)
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            EventAggregator.Subscribe(this);

            LogFileName = StateService.LogFileName;
            StateService.LogFileName = null;

            ForwardedMessages            = StateService.ForwardMessages;
            StateService.ForwardMessages = null;

            SharedContact = StateService.SharedContact;
            StateService.SharedContact = null;

            _accessToken             = StateService.AccessToken;
            StateService.AccessToken = null;

            _bot             = StateService.Bot;
            StateService.Bot = null;

            _webLink             = StateService.WebLink;
            StateService.WebLink = null;

            _url             = StateService.Url;
            StateService.Url = null;

            _text = StateService.UrlText;
            StateService.UrlText = null;

            Status = AppResources.Loading;

            BeginOnThreadPool(() =>
            {
                var isAuthorized = SettingsHelper.GetValue <bool>(Constants.IsAuthorizedKey);
                if (isAuthorized)
                {
                    var dialogs = CacheService.GetDialogs();

                    var dialogsCache   = new Dictionary <int, TLDialogBase>();
                    var clearedDialogs = new List <TLDialogBase>();
                    foreach (var dialog in dialogs)
                    {
                        if (!dialogsCache.ContainsKey(dialog.Index))
                        {
                            if (dialog is TLDialog || dialog is TLBroadcastDialog)
                            {
                                if (!SkipDialog(_bot, dialog))
                                {
                                    clearedDialogs.Add(dialog);
                                }
                                dialogsCache[dialog.Index] = dialog;
                            }
                        }
                        else
                        {
                            var cachedDialog = dialogsCache[dialog.Index];
                            if (cachedDialog.Peer is TLPeerUser && dialog.Peer is TLPeerUser)
                            {
                                CacheService.DeleteDialog(dialog);
                                continue;
                            }
                            if (cachedDialog.Peer is TLPeerChat && dialog.Peer is TLPeerChat)
                            {
                                CacheService.DeleteDialog(dialog);
                                continue;
                            }
                        }
                    }

                    BeginOnUIThread(() =>
                    {
                        foreach (var clearedDialog in clearedDialogs)
                        {
                            LazyItems.Add(clearedDialog);
                        }

                        var lastDialog = clearedDialogs.LastOrDefault(x => x.TopMessageId != null);
                        _maxId         = lastDialog != null ? lastDialog.TopMessageId.Value : 0;

                        Status = LazyItems.Count == 0 ? AppResources.Loading : string.Empty;

                        for (var i = 0; i < LazyItems.Count && i < FirstSliceLength; i++)
                        {
                            Items.Add(LazyItems[i]);
                        }

                        BeginOnUIThread(TimeSpan.FromSeconds(0.5), () =>
                        {
                            for (var i = FirstSliceLength; i < LazyItems.Count; i++)
                            {
                                Items.Add(LazyItems[i]);
                            }
                            LazyItems.Clear();

                            LoadNextSlice();
                        });
                    });
                }
            });
        }
Beispiel #20
0
        public SecretDialogDetailsViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, ITelegramEventAggregator eventAggregator)
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            _typingUsersTimer = new Timer(UpdateTypingUsersCache, null, 0, 5000);

            Items = new ObservableCollection <TLDecryptedMessageBase>();

            Chat = GetChat();
            StateService.With = null;
            if (Chat == null)
            {
                return;
            }

            With = GetParticipant();
            StateService.Participant = null;
            if (With == null)
            {
                return;
            }

            eventAggregator.Subscribe(this);

            Status   = string.Format(AppResources.SecretChatCaption, With.FirstName);
            Subtitle = GetSubtitle(With);

            _selfDestructTimer = new DispatcherTimer {
                Interval = TimeSpan.FromSeconds(1.0)
            };
            _selfDestructTimer.Tick += OnSelfDestructTimerTick;

            LoadUnsendedTextAsync(unsendedText =>
            {
                Text = unsendedText;
            });

            BeginOnThreadPool(() =>
            {
                var cachedMessages = CacheService.GetDecryptedHistory(Chat.Index).ToList();

                foreach (var cachedMessage in cachedMessages)
                {
                    var isDisplayedMessage = TLUtils.IsDisplayedDecryptedMessage(cachedMessage);

                    if (isDisplayedMessage)
                    {
                        LazyItems.Add(cachedMessage);
                    }
                }

                if (LazyItems.Count > 0)
                {
                    BeginOnUIThread(() => PopulateItems(() =>
                    {
                        ReadMessages();
                        NotifyOfPropertyChange(() => DescriptionVisibility);
                    }));
                }
                else
                {
                    ReadMessages();
                    NotifyOfPropertyChange(() => DescriptionVisibility);
                }

                NotifyOfPropertyChange(() => DescriptionVisibility);
            });

            PropertyChanged += (sender, args) =>
            {
                if (Property.NameEquals(args.PropertyName, () => Text))
                {
                    if (!_lastTypingTime.HasValue)
                    {
                        SetTypingInternal();
                        return;
                    }
                    var fromLastTypingTimeInSeconds = (DateTime.Now - _lastTypingTime.Value).TotalSeconds;
                    if (fromLastTypingTimeInSeconds > Constants.SetTypingIntervalInSeconds)
                    {
                        SetTypingInternal();
                        return;
                    }
                }
            };
        }
        public ChooseDialogViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, ITelegramEventAggregator eventAggregator)
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            FilteredItems = new CollectionViewSource {
                Source = Items
            }.View;
            FilteredItems.Filter += item =>
            {
                var dialog = item as TLDialog;
                if (dialog != null)
                {
                    var chat = dialog.With as TLChat41;
                    if (chat != null)
                    {
                        return(!chat.IsMigrated);
                    }

                    var user = dialog.With as TLUser;
                    if (user != null)
                    {
                        return(!user.IsSelf);
                    }
                }

                var dialog71 = dialog as TLDialog71;
                if (dialog71 != null)
                {
                    return(!dialog71.IsPromo);
                }

                return(true);
            };

            EventAggregator.Subscribe(this);

            LogFileName = StateService.LogFileName;
            StateService.LogFileName = null;

            ForwardedMessages            = StateService.ForwardMessages;
            StateService.ForwardMessages = null;

            SharedContact = StateService.SharedContact;
            StateService.SharedContact = null;

            _gameString             = StateService.GameString;
            StateService.GameString = null;

            _accessToken             = StateService.AccessToken;
            StateService.AccessToken = null;

            _bot             = StateService.Bot;
            StateService.Bot = null;

            _webLink             = StateService.WebLink;
            StateService.WebLink = null;

            _storageItems             = StateService.StorageItems;
            StateService.StorageItems = null;

            _url             = StateService.Url;
            StateService.Url = null;

            _text = StateService.UrlText;
            StateService.UrlText = null;

            _switchInlineButton             = StateService.SwitchInlineButton;
            StateService.SwitchInlineButton = null;

            Status = AppResources.Loading;

            BeginOnThreadPool(() =>
            {
                var isAuthorized = SettingsHelper.GetValue <bool>(Constants.IsAuthorizedKey);
                if (isAuthorized)
                {
                    var dialogs = CacheService.GetDialogs();

                    var dialogsCache   = new Dictionary <int, TLDialogBase>();
                    var clearedDialogs = new List <TLDialogBase>();
                    foreach (var dialog in dialogs)
                    {
                        if (!dialogsCache.ContainsKey(dialog.Index))
                        {
                            var user = dialog.With as TLUser;
                            if (user != null && user.IsSelf)
                            {
                                CurrentUser = dialog;
                            }

                            if (dialog is TLDialog || dialog is TLBroadcastDialog)
                            {
                                if (!SkipDialogForBot(_bot, dialog))
                                {
                                    clearedDialogs.Add(dialog);
                                }
                                dialogsCache[dialog.Index] = dialog;
                            }
                        }
                        else
                        {
                            var cachedDialog = dialogsCache[dialog.Index];
                            if (cachedDialog.Peer is TLPeerUser && dialog.Peer is TLPeerUser)
                            {
                                CacheService.DeleteDialog(dialog);
                                continue;
                            }
                            if (cachedDialog.Peer is TLPeerChat && dialog.Peer is TLPeerChat)
                            {
                                CacheService.DeleteDialog(dialog);
                                continue;
                            }
                        }
                    }

                    if (CurrentUser == null)
                    {
                        var currentUser = CacheService.GetUser(new TLInt(StateService.CurrentUserId));
                        if (currentUser != null)
                        {
                            var dialog = new TLDialog71
                            {
                                With  = currentUser,
                                Flags = new TLInt(0),
                                Peer  = new TLPeerUser {
                                    Id = currentUser.Id
                                },
                                Messages            = new ObservableCollection <TLMessageBase>(),
                                TopMessageId        = new TLInt(0),
                                ReadInboxMaxId      = new TLInt(0),
                                ReadOutboxMaxId     = new TLInt(0),
                                UnreadCount         = new TLInt(0),
                                UnreadMentionsCount = new TLInt(0),
                                NotifySettings      = new TLPeerNotifySettings78 {
                                    Flags = new TLInt(0), MuteUntil = new TLInt(0), Sound = new TLString("Default")
                                }
                            };
                            CurrentUser = dialog;
                        }
                    }

                    BeginOnUIThread(() =>
                    {
                        NotifyOfPropertyChange(() => CurrentUser);

                        foreach (var clearedDialog in clearedDialogs)
                        {
                            LazyItems.Add(clearedDialog);
                        }

                        var lastDialog = clearedDialogs.LastOrDefault(x => x.TopMessageId != null);
                        _maxId         = lastDialog != null ? lastDialog.TopMessageId.Value : 0;

                        Status             = LazyItems.Count == 0 ? AppResources.Loading : string.Empty;
                        var importantCount = 0;
                        var count          = 0;
                        for (var i = 0; i < LazyItems.Count && importantCount < FirstSliceLength; i++, count++)
                        {
                            Items.Add(LazyItems[i]);
                            var chat41 = LazyItems[i].With as TLChat41;
                            if (chat41 == null || chat41.MigratedTo == null)
                            {
                                importantCount++;
                            }
                        }

                        BeginOnUIThread(TimeSpan.FromSeconds(0.5), () =>
                        {
                            for (var i = count; i < LazyItems.Count; i++)
                            {
                                Items.Add(LazyItems[i]);
                            }
                            LazyItems.Clear();

                            LoadNextSlice();
                        });
                    });
                }
            });
        }
        public DialogsViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, IEventAggregator eventAggregator)
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            Items = new ObservableCollection <TLDialogBase>();
            EventAggregator.Subscribe(this);

            DisplayName = (string)new LowercaseConverter().Convert(AppResources.Dialogs, null, null, null);


            Status = Items.Count == 0 && LazyItems.Count == 0 ? AppResources.Loading : string.Empty;
            //CacheService.DialogAdded += OnDialogAdded;
            //CacheService.TopMessageUpdated += OnTopMessageUpdated;

            BeginOnThreadPool(() =>
            {
                var isAuthorized = SettingsHelper.GetValue <bool>(Constants.IsAuthorizedKey);
                if (isAuthorized)
                {
                    var dialogs = CacheService.GetDialogs();

                    var dialogsCache   = new Dictionary <int, TLDialogBase>();
                    var clearedDialogs = new List <TLDialogBase>();
                    foreach (var dialog in dialogs)
                    {
                        if (!dialogsCache.ContainsKey(dialog.Index))
                        {
                            clearedDialogs.Add(dialog);
                            dialogsCache[dialog.Index] = dialog;
                        }
                        else
                        {
                            var cachedDialog = dialogsCache[dialog.Index];
                            if (cachedDialog.Peer is TLPeerUser && dialog.Peer is TLPeerUser)
                            {
                                CacheService.DeleteDialog(dialog);
                                continue;
                            }
                            if (cachedDialog.Peer is TLPeerChat && dialog.Peer is TLPeerChat)
                            {
                                CacheService.DeleteDialog(dialog);
                                continue;
                            }
                        }
                    }


                    // load cache
                    Status = dialogs.Count == 0? AppResources.Loading : string.Empty;

                    //BeginOnUIThread(() =>
                    //{
                    //    Items.Clear();
                    //    foreach (var d in clearedDialogs)
                    //    {
                    //        Items.Add(d);
                    //    }
                    //});
                    LazyItems.Clear();
                    //((BindableCollection<TLDialog>)Items).AddRange(dialogs);
                    //BeginOnUIThread(() =>
                    {
                        foreach (var dialog in clearedDialogs)
                        {
                            //Items.Add(dialog);
                            LazyItems.Add(dialog);
                        }
                    }
                    //);

                    if (LazyItems.Count == 0)
                    {
                        UpdateItemsAsync(0, 0, Telegram.Api.Constants.CachedDialogsCount);
                    }
                    else
                    {
                        BeginOnUIThread(() => PopulateItems(() => UpdateItemsAsync(0, 0, Telegram.Api.Constants.CachedDialogsCount)));
                    }
                    // update history
                }
            });
        }
Beispiel #23
0
        public void Search()
        {
            if (_lastUsersRequest != null)
            {
                _lastUsersRequest.Cancel();
            }

            var text = Text.Trim();

            if (string.IsNullOrEmpty(text))
            {
                System.Diagnostics.Debug.WriteLine("EmptyText text={0} canceled={1} items_count={2} current_text={3}", text, _lastUsersRequest != null ? _lastUsersRequest.IsCanceled.ToString() : "null", LazyItems.Count, Text);

                LazyItems.Clear();
                Items.Clear();
                Status = string.Empty;
                return;
            }

            SearchUsersRequest nextUsersRequest;

            if (!_searchResultsCache.TryGetValue(text, out nextUsersRequest))
            {
                IList <TLUserBase> source;

                if (_lastUsersRequest != null &&
                    text.IndexOf(_lastUsersRequest.Text, StringComparison.OrdinalIgnoreCase) != -1)
                {
                    source = _lastUsersRequest.Source;
                }
                else
                {
                    source = Source;
                }

                nextUsersRequest = new SearchUsersRequest(text, source);
            }

            IsWorking = true;
            nextUsersRequest.ProcessAsync(results =>
                                          Execute.BeginOnUIThread(() =>
            {
                if (nextUsersRequest.IsCanceled)
                {
                    return;
                }

                Items.Clear();
                LazyItems.Clear();
                for (var i = 0; i < results.Count; i++)
                {
                    if (i < 6)
                    {
                        Items.Add(results[i]);
                    }
                    else
                    {
                        LazyItems.Add(results[i]);
                    }
                }
                Status = Items.Count > 0 ? string.Empty : AppResources.NoResults;

                IsWorking = false;
                if (LazyItems.Count > 0)
                {
                    Execute.BeginOnUIThread(() =>
                    {
                        if (nextUsersRequest.IsCanceled)
                        {
                            return;
                        }

                        System.Diagnostics.Debug.WriteLine("ContinueResults text={0} canceled={1} items_count={2} current_text={3}", nextUsersRequest.Text, nextUsersRequest.IsCanceled, LazyItems.Count, Text);

                        foreach (var item in LazyItems)
                        {
                            Items.Add(item);
                        }
                        LazyItems.Clear();
                        Status = Items.Count > 0 ? string.Empty : AppResources.NoResults;
                    });
                }
            }));
            _searchResultsCache[nextUsersRequest.Text] = nextUsersRequest;
            _lastUsersRequest = nextUsersRequest;
        }
Beispiel #24
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();
        }
        public ShareContactViewModel(ICacheService cacheService, ICommonErrorHandler errorHandler, IStateService stateService, INavigationService navigationService, IMTProtoService mtProtoService, ITelegramEventAggregator eventAggregator)
            : base(cacheService, errorHandler, stateService, navigationService, mtProtoService, eventAggregator)
        {
            Source    = new List <TLUserBase>();
            Items     = new AlphaKeyGroup <TLUserBase>("@");
            _contacts = new ObservableCollection <AlphaKeyGroup <TLUserBase> > {
                (AlphaKeyGroup <TLUserBase>)Items
            };

            PhoneContact = StateService.PhoneContact;
            StateService.PhoneContact = null;

            if (PhoneContact != null)
            {
            }
            else
            {
                Status = AppResources.Loading;
                BeginOnThreadPool(() =>
                                  CacheService.GetContactsAsync(
                                      contacts =>
                {
                    var currentUser = contacts.FirstOrDefault(x => x.Index == StateService.CurrentUserId);
                    if (currentUser == null)
                    {
                        currentUser = CacheService.GetUser(new TLInt(StateService.CurrentUserId));
                        if (currentUser != null)
                        {
                            contacts.Add(currentUser);
                        }
                    }

                    foreach (var contact in contacts)
                    {
                        Source.Add(contact);
                    }

                    foreach (var contact in contacts)
                    {
                        LazyItems.Add(contact);
                    }

                    BeginOnUIThread(() =>
                    {
                        var importantCount = 0;
                        var count          = 0;
                        for (var i = 0; i < LazyItems.Count && importantCount < FirstSliceLength; i++, count++)
                        {
                            Items.Add(LazyItems[i]);
                            importantCount++;
                        }
                        Status = Items.Count == 0 ? string.Format("{0}", AppResources.NoUsersHere) : string.Empty;

                        BeginOnUIThread(TimeSpan.FromSeconds(0.5), () =>
                        {
                            for (var i = count; i < LazyItems.Count; i++)
                            {
                                Items.Add(LazyItems[i]);
                            }
                            LazyItems.Clear();

                            GetContactsAsync();
                        });
                    });
                }));
            }
        }
Beispiel #26
0
        private void LoadCache()
        {
            var isAuthorized = SettingsHelper.GetValue <bool>(Constants.IsAuthorizedKey);

            if (!isAuthorized)
            {
                return;
            }

            Status = string.Empty;

            var contacts        = CacheService.GetContacts();
            var orderedContacts = contacts.OrderBy(x => x.FullName).ToList();
            var count           = 0;


            var currentContact = CacheService.GetUser(new TLInt(StateService.CurrentUserId));

            if (currentContact != null)
            {
                Self = currentContact;
                NotifyOfPropertyChange(() => Self);
            }

            System.Diagnostics.Debug.WriteLine("LoadCache ordered_contacts={0} lazy_items={1}", orderedContacts.Count, LazyItems.Count);

            Items.Clear();
            LazyItems.Clear();
            for (var i = 0; i < orderedContacts.Count; i++)
            {
                if (!(orderedContacts[i] is TLUserEmpty) &&
                    orderedContacts[i].Index != StateService.CurrentUserId)
                {
                    if (count < 10)
                    {
                        Items.Add(orderedContacts[i]);
                    }
                    else
                    {
                        LazyItems.Add(orderedContacts[i]);
                    }
                    count++;
                }
            }

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

            if (LazyItems.Count > 0)
            {
                BeginOnUIThread(TimeSpan.FromSeconds(0.25), () =>
                {
                    foreach (var item in LazyItems)
                    {
                        Items.Add(item);
                    }
                    LazyItems.Clear();

                    Handle(new InvokeImportContacts());
                });
            }
            else
            {
                Handle(new InvokeImportContacts());
            }
        }