Exemplo n.º 1
0
        public async Task startStream()
        {
            await t.singleUserStream(delegate(){
                CurrentDispatcher.BeginInvoke((Action)(() =>
                {
                    showAlert("Connected to userstream");
                }));
            },
                                     delegate(string json){
                CurrentDispatcher.BeginInvoke((Action)(() => {
                    json = System.Net.WebUtility.HtmlDecode(json);
                    Extension.TweetType type = Extension.checkTweetType(json);
                    if (type != Extension.TweetType.Init)
                    {
                        switch (type)
                        {
                        case Extension.TweetType.Normal:
                            Tweet tweet = Json.Deserialize <Tweet>(json);
                            ((TimelineView)viewDict["timeline"]).InsertTweet(tweet);

                            if (tweet.Entities.Mentions.Count != 0)
                            {
                                bool _Mentioned = false;
                                foreach (Mention m in tweet.Entities.Mentions)
                                {
                                    if (m.Id == me.Id)
                                    {
                                        _Mentioned = true;
                                    }
                                }
                                if (tweet.Text.ToLower().Contains("@" + me.ScreenName.ToLower()))
                                {
                                    _Mentioned = true;
                                }
                                if (_Mentioned)
                                {
                                    ((ConnectView)viewDict["connect"]).InsertTweet(tweet);
                                }
                            }

                            break;

                        case Extension.TweetType.Message:
                            Message message = Json.Deserialize <MessageWrapper>(json).Message;
                            break;

                        case Extension.TweetType.Delete:
                            DeletedStatus status = Json.Deserialize <DeleteWrapper>(json).Delete.Status;
                            ((TimelineView)viewDict["timeline"]).RemoveTweet(status.Id);
                            break;
                        }
                    }
                }));
            }, delegate(){
                CurrentDispatcher.BeginInvoke((Action)(() =>
                {
                    showAlert("Unable to connect to userstream", AlertBox.MessageType.Error);
                }));
            });
        }
Exemplo n.º 2
0
        /// <summary> Обработчик изменения сообщений чата </summary>
        private void OnListModelChatMessageChanged(object sender, List <ModelChatMessage> listModelChatMessages)
        {
            var listSingleModelChatMessages = new List <ModelChatMessage>();

            listSingleModelChatMessages = listModelChatMessages.Where(obj => !listSingleModelChatMessages.Any(message => message.Id == obj.Id)).ToList();

            var listExistMessage = listSingleModelChatMessages.Where(obj => obj.IdChat == CurrentModelChat.Id && ListModelChatMessage.Any(message => message.Id == obj.Id)).ToList();

            if (listExistMessage.Count > 0)
            {
                Action action = () => RefreshExistingModelChatMessage(listExistMessage);

                CurrentDispatcher.BeginInvoke(action);
            }

            var listNewMessage = listSingleModelChatMessages.Where(obj => obj.IdChat == CurrentModelChat.Id && !ListModelChatMessage.Any(message => message.Id == obj.Id)).ToList();

            if (listNewMessage.Count > 0)
            {
                Action action = () => AddNewModelChatMessage(listNewMessage);

                CurrentDispatcher.BeginInvoke(action);
            }

            OnPropertyChanged("ListModelChatMessage");
        }
Exemplo n.º 3
0
        /// <summary> Обработчик изменения подписки контактов внутри логики C++ </summary>
        private void ChangedListModelContactSubscription(List <PackageModelContactSubscription> listPackageModelContactSubscriptions)
        {
            if (ListModelConctactChatMembers == null)
            {
                return;
            }

            //var dictionary = _dataSourceContact.GetDictionaryModelContactSubscriptionByArrayXmppId(arrayXmppId);

            foreach (var i in listPackageModelContactSubscriptions)
            {
                var modelContact = ListModelConctactChatMembers.FirstOrDefault(obj => obj.XmppId == i.XmppId);

                if (modelContact != null)
                {
                    Action action = () => { modelContact.ModelContactSubscriptionObj = i.ModelContactSubscriptionObj.GetDeepCopy(); };

                    CurrentDispatcher.BeginInvoke(action);

                    //modelContact.ModelContactSubscriptionObj = i.Value;
                }
            }

            DataSourceContact.RefreshModelContactStatus(ListModelConctactChatMembers.Where(obj => listPackageModelContactSubscriptions.Any(o => o.XmppId == obj.XmppId)).ToList());
        }
Exemplo n.º 4
0
        /// <summary> Обработчик генерации секретного ключа </summary>
        private void OnSecretKeyMissing(object sender, EventArgs eventArgs)
        {
            Action action = () =>
            {
                OnEventViewModel("SecretKeyMissing");
            };

            CurrentDispatcher.BeginInvoke(action);
        }
Exemplo n.º 5
0
        public void BeginExecute(DispatcherPriority priority, Action action)
        {
            if (CurrentDispatcher == null || action == null)
            {
                return;
            }

            CurrentDispatcher.BeginInvoke(action, priority);
        }
Exemplo n.º 6
0
        public void BeginExecute(Action action)
        {
            if (CurrentDispatcher == null || action == null)
            {
                return;
            }

            CurrentDispatcher.BeginInvoke(action);
        }
        /// <summary> Обработчик изменения состояний подписки контактов </summary>
        private void OnListModelContactSubscriptionChanged(object sender, List <PackageModelContactSubscription> packageModelContactSubscriptions)
        {
            CurrentListModelContact = DataSourceContact.GetListModelContact().Where(obj => obj.IsDodicall && obj.Blocked == false && obj.IsAccessStatus).ToList();

            ListModelContactSort();

            Action action = () => OnEventViewModel("ChangedList");

            CurrentDispatcher.BeginInvoke(action);
        }
        /// <summary> Обработчик изменения списка контактов </summary>
        private void OnListModelContactChanged(List <ModelContact> listChangedModelContact, List <ModelContact> listDeletedModelContact)
        {
            foreach (var modelContact in listChangedModelContact.Where(obj => obj.Id > 0))
            {
                var changedModelContact = ListModelContact.FirstOrDefault(obj => obj.Id == modelContact.Id);

                if (changedModelContact != null)
                {
                    Action action = () =>
                    {
                        var modelContactCopy = modelContact.GetDeepCopy();

                        changedModelContact.Avatar     = modelContactCopy.Avatar;
                        changedModelContact.Blocked    = modelContactCopy.Blocked;
                        changedModelContact.DodicallId = modelContactCopy.DodicallId;
                        changedModelContact.NativeId   = modelContactCopy.NativeId;
                        changedModelContact.White      = modelContactCopy.White;
                        changedModelContact.XmppId     = modelContactCopy.XmppId;
                        changedModelContact.FirstName  = modelContactCopy.FirstName;
                        changedModelContact.MiddleName = modelContactCopy.MiddleName;
                        changedModelContact.LastName   = modelContactCopy.LastName;
                        changedModelContact.ModelEnumUserBaseStatusObj  = modelContactCopy.ModelEnumUserBaseStatusObj;
                        changedModelContact.UserExtendedStatus          = modelContactCopy.UserExtendedStatus;
                        changedModelContact.ModelContactSubscriptionObj = modelContactCopy.ModelContactSubscriptionObj;
                        changedModelContact.ListModelUserContact        = modelContactCopy.ListModelUserContact;
                        changedModelContact.ListModelUserContactExtra   = modelContactCopy.ListModelUserContactExtra;
                    };

                    CurrentDispatcher.BeginInvoke(action);
                }
                else
                {
                    Action action = () =>
                    {
                        var modelContactCopy = modelContact.GetDeepCopy();

                        ListModelContact.Add(modelContactCopy);
                    };

                    CurrentDispatcher.BeginInvoke(action);
                }
            }

            foreach (var modelContact in listDeletedModelContact)
            {
                var deletedModelContact = ListModelContact.FirstOrDefault(obj => obj.Id == modelContact.Id);

                Action action = () => { ListModelContact.Remove(deletedModelContact); };

                CurrentDispatcher.BeginInvoke(action);
            }

            CurrentDispatcher.BeginInvoke(new Action(ApplyFilter));
        }
        /// <summary> Обработчик изменения контактов </summary>
        private void InstanceOnListModelContactChanged(List <ModelContact> listChangedModelContact, List <ModelContact> listDeletedModelContact)
        {
            var modelCallHistoryDetail = DataSourceCall.GetChangedModelCallHistoryDetail(_modelCallHistoryPeerObj);

            Action action = () =>
            {
                ModelCallHistoryPeerObj.ListModelCallHistoryEntry = modelCallHistoryDetail.ListModelCallHistoryPeer.First().GetDeepCopy().ListModelCallHistoryEntry;
            };

            CurrentDispatcher.BeginInvoke(action);
        }
        /// <summary> Обработчик изменения звонка </summary>
        private void OnModelCallChanged(object sender, ModelCall modelCall)
        {
            Action action = () =>
            {
                CurrentModelCall = modelCall?.GetDeepCopy();

                if (CurrentModelCall == null || CurrentModelCall.ModelEnumCallStateObj.Code == 6) // Ended (почему то иногда прилетает null, видимо в разных потоках уже закрытый звонок удаляется из списка активных в бизнес логике быстрее чем прилетает данный колбек в этом потоке)
                {
                    OnCloseView();
                }
            };

            CurrentDispatcher.BeginInvoke(action);
        }
        /// <summary> Обработчик изменения истории вызовов </summary>
        private void OnModelCallHistoryChanged(object sender, ModelCallHistory modelCallHistory)
        {
            if (modelCallHistory.ListModelCallHistoryPeer.Any(obj => obj.ModelPeerObj.Id == _modelCallHistoryPeerObj.ModelPeerObj.Id))
            {
                var modelCallHistoryDetail = DataSourceCall.GetChangedModelCallHistoryDetail(_modelCallHistoryPeerObj);

                Action action = () =>
                {
                    ModelCallHistoryPeerObj.ListModelCallHistoryEntry = modelCallHistoryDetail.ListModelCallHistoryPeer.First().GetDeepCopy().ListModelCallHistoryEntry;
                };

                CurrentDispatcher.BeginInvoke(action);
            }
        }
        /// <summary> Обработчик изменения статусов контактов </summary>
        private void OnListModelContactStatusChanged(object sender, List <PackageModelContactStatus> listPackageModelContactStatuses)
        {
            if (_modelContactObj != null && listPackageModelContactStatuses.Any(obj => obj.XmppId == _modelContactObj.XmppId))
            {
                var packageModelContactStatus = listPackageModelContactStatuses.First(obj => obj.XmppId == _modelContactObj.XmppId);

                Action action = () =>
                {
                    ModelContactObj.ModelEnumUserBaseStatusObj = packageModelContactStatus.ModelEnumUserBaseStatusObj;

                    ModelContactObj.UserExtendedStatus = packageModelContactStatus.UserExtendedStatus;
                };

                CurrentDispatcher.BeginInvoke(action);
            }
        }
        /// <summary> Обработчик изменения статусов контактов </summary>
        private void OnListModelContactStatusChanged(object sender, List <PackageModelContactStatus> listPackageModelContactStatuses)
        {
            foreach (var i in listPackageModelContactStatuses)
            {
                var modelContact = ListModelContact.FirstOrDefault(obj => obj.XmppId == i.XmppId);

                if (modelContact != null)
                {
                    Action action = () =>
                    {
                        modelContact.ModelEnumUserBaseStatusObj = i.ModelEnumUserBaseStatusObj;
                        modelContact.UserExtendedStatus         = i.UserExtendedStatus;
                    };

                    CurrentDispatcher.BeginInvoke(action);
                }
            }
        }
        /// <summary> Применить фильтр к контактам </summary>
        private void ApplyFilter()
        {
            if (!String.IsNullOrWhiteSpace(ContactListFilter))
            {
                var filter = ContactListFilter.Trim().ToLower();

                CurrentListModelContact = ListModelContact.Where(obj => obj.FullName.ToLower().Contains(filter)).ToList();
            }
            else
            {
                CurrentListModelContact = ListModelContact;
            }

            ListModelContactSort();

            Action action = () => OnEventViewModel("ChangedList");

            CurrentDispatcher.BeginInvoke(action);
        }
Exemplo n.º 15
0
        /// <summary> Обработчик изменения состояния подписок контактов </summary>
        private void OnListModelContactSubscriptionChanged(object sender, List <PackageModelContactSubscription> listPackageModelContactSubscriptions)
        {
            if (CurrentModelCallHistory == null)
            {
                return;
            }

            foreach (var i in listPackageModelContactSubscriptions)
            {
                var modelCallHistoryPeer = CurrentModelCallHistory.ListModelCallHistoryPeer.FirstOrDefault(obj => obj.ModelPeerObj.ModelContactObj != null ? obj.ModelPeerObj.ModelContactObj.XmppId == i.XmppId : false);

                if (modelCallHistoryPeer != null && modelCallHistoryPeer.ModelPeerObj.ModelContactObj.XmppId == i.XmppId)
                {
                    Action action = () => { modelCallHistoryPeer.ModelPeerObj.ModelContactObj.ModelContactSubscriptionObj = i.ModelContactSubscriptionObj.GetDeepCopy(); };

                    CurrentDispatcher.BeginInvoke(action);
                }
            }
        }
Exemplo n.º 16
0
        ///// <summary> Обработчик изменения модели внутри логики C++ </summary>
        //public void DoCallback(object sender, DoCallbackArgs e)
        //{
        //if (e.ModelName == "Chats")
        //{
        //    Action action = () => ChangedListModelChat(e.EntityIds);

        //    CurrentDispatcher.BeginInvoke(action);
        //}

        //if (e.ModelName == "ChatMessages")
        //{
        //    Action action = () => ChangedListModelChatMessages(e.EntityIds);

        //    CurrentDispatcher.BeginInvoke(action);
        //}

        //if (e.ModelName == "ContactsPresence")
        //{
        //    CurrentDispatcher.BeginInvoke(new Action(ChangedStatusListModelContact));
        //}
        //}

        ///// <summary> Обработчик изменения списка чатов внутри логики C++ </summary>
        //private void ChangedListModelChatMessages(string[] entityIds)
        //{
        //    // вот этот код перенести в колбеки в обработку колбека "ChatMessages"

        //    var listChatIds = _dataSourceChat.GetListModelChatByIdMessage(entityIds);

        //    ChangedListModelChat(listChatIds, new List<ModelChat>());
        //}

        /// <summary> Обработчик изменения списка чатов внутри логики C++ </summary>
        private void ChangedListModelChat(List <ModelChat> listChangedModelChat, List <ModelChat> listDeletedModelChat)
        {
            var listModelChatCurrent = CurrentListModelChat.ToList();

            // удаление
            foreach (var i in listDeletedModelChat)
            {
                listModelChatCurrent.Remove(listModelChatCurrent.FirstOrDefault(obj => obj.Id == i.Id));
            }

            Action action = () =>
            {
                // добавление и обновление
                foreach (var i in listChangedModelChat)
                {
                    var modelChat = listModelChatCurrent.FirstOrDefault(obj => obj.Id == i.Id);

                    if (modelChat != null)
                    {
                        // изменение (пошел через переприсвоение свойств, а не через удалить и добавить заново, что бы не слетало выделение)
                        modelChat.ListModelContact = ListModelContactSort(i.ListModelContact);

                        modelChat.Active             = i.Active;
                        modelChat.LastMessage        = i.LastMessage;
                        modelChat.LastModifiedDate   = i.LastModifiedDate;
                        modelChat.NewMessagesCount   = i.NewMessagesCount;
                        modelChat.Title              = i.Title;// LocalizationApp.GetInstance().GetValueByKey(@"ModelChatMessage_Untitled");
                        modelChat.TotalMessagesCount = i.TotalMessagesCount;
                    }
                    else
                    {
                        listModelChatCurrent.Add(i);
                    }
                }

                CurrentListModelChat = new ObservableCollection <ModelChat>(SortCurrentListModelChat(listModelChatCurrent));

                DataSourceChat.RefreshModelContactChatStatus(CurrentListModelChat.ToList());
            };

            CurrentDispatcher.BeginInvoke(action);
        }
Exemplo n.º 17
0
        /// <summary> Обработчик изменения звонка </summary>
        private void OnModelCallChanged(object sender, ModelCall modelCall)
        {
            // хз какой брать currentModelCall.ModelEnumCallStateObj.Code потому что СВ в отпуске, а в дебаггере приходит Ringing, наверно его надо брать
            if (modelCall != null && modelCall.ModelEnumCallDirectionObj.Code == 1 /* Incoming */ && modelCall.ModelEnumCallStateObj.Code == 2 /* Ringing */)
            {
                Action action = () => OnEventViewModel("IncomingCall");

                CurrentDispatcher.BeginInvoke(action);
            }

            // Ended (почему то иногда прилетает null, видимо в разных потоках уже закрытый звонок удаляется из списка активных в бизнес логике быстрее чем прилетает данный колбек в этом потоке)
            if (modelCall == null || modelCall.ModelEnumCallStateObj.Code == 6)
            {
                OnEventViewModel("CallEnableChanged", true);
            }
            else
            {
                OnEventViewModel("CallEnableChanged", false);
            }
        }
        /// <summary> Обработчик изменения подписок контактов </summary>
        private void OnListModelContactSubscriptionChanged(object sender, List <PackageModelContactSubscription> listPackageModelContactSubscriptions)
        {
            foreach (var i in listPackageModelContactSubscriptions)
            {
                var modelContact = ListModelContact.FirstOrDefault(obj => obj.XmppId == i.XmppId);

                if (modelContact != null)
                {
                    Action action = () => { modelContact.ModelContactSubscriptionObj = i.ModelContactSubscriptionObj.GetDeepCopy(); };

                    //Debug.WriteLine(modelContact.FullName + " - " + i.ModelContactSubscriptionObj.Ask);

                    Thread.Sleep(1000);

                    CurrentDispatcher.BeginInvoke(action);
                }
            }

            DataSourceContact.RefreshModelContactStatus(ListModelContact.Where(obj => listPackageModelContactSubscriptions.Exists(o => o.XmppId == obj.XmppId)).ToList());
        }
Exemplo n.º 19
0
        /// <summary> Обработчик генерации секретного ключа </summary>
        private void OnSecretKeyGenerated(string login, int serverAreaCode, SecureString secretKey)
        {
            var saveResult = false;

            _currentUserCryptKey = secretKey;

            if (_currentUserCryptKey != null)
            {
                saveResult = UtilitySecurity.SavePrivateCryptKeyToIsolatedStorage(_currentUserCryptKey, login, serverAreaCode.ToString());
            }

            if (saveResult)
            {
                Action action = () =>
                {
                    OnEventViewModel("SecretKeyGenerated");
                };

                CurrentDispatcher.BeginInvoke(action);
            }
        }
Exemplo n.º 20
0
 public override async Task <TResult> InvokeAsync <TResult>(Func <Task <TResult> > workItem)
 {
     try
     {
         if (CurrentDispatcher.CheckAccess())
         {
             return(await workItem());
         }
         else
         {
             return(await CurrentDispatcher.InvokeAsync(workItem).Task.Unwrap());
         }
     }
     catch (Exception ex)
     {
         // TODO: Determine whether this is the right kind of rethrowing pattern
         // You do have to do something like this otherwise unhandled exceptions
         // throw from inside Dispatcher.InvokeAsync are simply lost.
         _ = CurrentDispatcher.BeginInvoke(RethrowException, ex);
         throw;
     }
 }
Exemplo n.º 21
0
        /// <summary> Обработчик изменения истории вызовов </summary>
        private void OnModelCallHistoryChanged(object sender, ModelCallHistory modelCallHistory)
        {
            Action action = () => ChangeModelCallHistory(modelCallHistory);

            CurrentDispatcher.BeginInvoke(action);
        }
Exemplo n.º 22
0
        /// <summary> Обработчик изменения статусов контактов </summary>
        private void OnListModelContactStatusChanged(object sender, List <PackageModelContactStatus> packageModelContactStatuses)
        {
            Action action = () => DataSourceChat.RefreshModelContactChatStatus(CurrentListModelChat.ToList());

            CurrentDispatcher.BeginInvoke(action);
        }
        /// <summary> Обработчик изменения состояния подключений </summary>
        private void OnModelConnectStateChanged(object sender, ModelConnectState modelConnectState)
        {
            Action action = () => ModelConnectStateObj = DataSourceUtility.GetCurrentModelConnectState();

            CurrentDispatcher.BeginInvoke(action);
        }
 /// <summary> Обработчик изменения состояния подписок контактов </summary>
 private void OnListModelContactSubscriptionChanged(object sender, List <PackageModelContactSubscription> packageModelContactSubscriptions)
 {
     CurrentDispatcher.BeginInvoke(new Action(RefreshRequestInvite));
 }
Exemplo n.º 25
0
 void Dispose()
 {
     CurrentDispatcher.BeginInvoke(Children.Dispose, ApplicationIdle, null);
 }