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); })); }); }
/// <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"); }
/// <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()); }
/// <summary> Обработчик генерации секретного ключа </summary> private void OnSecretKeyMissing(object sender, EventArgs eventArgs) { Action action = () => { OnEventViewModel("SecretKeyMissing"); }; CurrentDispatcher.BeginInvoke(action); }
public void BeginExecute(DispatcherPriority priority, Action action) { if (CurrentDispatcher == null || action == null) { return; } CurrentDispatcher.BeginInvoke(action, priority); }
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); }
/// <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); } } }
///// <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); }
/// <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()); }
/// <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); } }
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; } }
/// <summary> Обработчик изменения истории вызовов </summary> private void OnModelCallHistoryChanged(object sender, ModelCallHistory modelCallHistory) { Action action = () => ChangeModelCallHistory(modelCallHistory); CurrentDispatcher.BeginInvoke(action); }
/// <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)); }
void Dispose() { CurrentDispatcher.BeginInvoke(Children.Dispose, ApplicationIdle, null); }