private void OnSystemMessageReceived(object sender, SystemMessageEventArgs messageEventArgs) { var groupMessage = messageEventArgs.Message as GroupInfoMessage; if (groupMessage != null) { var dialog = new DialogTable { DialogId = groupMessage.DialogId, DialogType = groupMessage.DialogType, LastMessage = "Notification message", LastMessageSent = groupMessage.DateSent, Name = groupMessage.RoomName, Photo = groupMessage.RoomPhoto, OccupantIds = string.Join(",", groupMessage.CurrentOccupantsIds), XmppRoomJid = String.Format("{0}_{1}@{2}", ApplicationKeys.ApplicationId, groupMessage.DialogId, ApplicationKeys.ChatMucEndpoint) }; App.QbProvider.GetXmppClient().JoinToGroup(dialog.XmppRoomJid, App.QbProvider.UserId.ToString()); CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { AddDialogToList(dialog); }); Database.Instance().SaveDialog(dialog); } }
public async Task <DialogTable> UpdateInDialogMessage(string chatDialogId, Message message) { var dialog = Database.Instance().GetDialog(chatDialogId); if (dialog == null) { var dialogInfo = await App.QbProvider.GetDialogAsync(chatDialogId); if (dialogInfo == null) { return(null); } dialog = new DialogTable(dialogInfo); } if (dialog != null) { dialog.LastMessage = System.Net.WebUtility.UrlDecode(message.MessageText); dialog.LastMessageSent = DateTime.UtcNow; if (dialog.UnreadMessageCount != null) { dialog.UnreadMessageCount++; } else { dialog.UnreadMessageCount = 1; } Database.Instance().SaveDialog(dialog); } return(dialog); }
private void SaveDialogToDb(Dialog dialog) { if (dialog != null) { var dialogTable = new DialogTable(dialog); dialogTable.LastMessageSent = DateTime.UtcNow; Database.Instance().SaveDialog(dialogTable); } }
private void TappedCommandExecute(DialogTable dialogItem) { if (dialogItem.DialogType == Quickblox.Sdk.Modules.ChatModule.Models.DialogType.Private) { App.Navigation.PushAsync(new PrivateChatPage(dialogItem.DialogId)); } else { App.Navigation.PushAsync(new GroupChatPage(dialogItem.DialogId)); } }
private void TappedCommandExecute(DialogTable dialogItem) { if (dialogItem.DialogType == Quickblox.Sdk.Modules.ChatModule.Models.DialogType.Private) { App.NavigationFrame.Navigate(typeof(PrivateChatPage), dialogItem.DialogId); } else { App.NavigationFrame.Navigate(typeof(GroupChatPage), dialogItem.DialogId); } }
public void AddDialogToList(DialogTable dialogTable) { lock (dialogAddLock) { var dialog = Dialogs.FirstOrDefault((d => d.DialogId == dialogTable.DialogId)); if (dialog == null) { Dialogs.Insert(0, dialogTable); } else { Dialogs.Remove(dialog); Dialogs.Insert(0, dialogTable); } } }
public void AddDialogToList(DialogTable dialogTable) { lock (dialogAddLock) { var dialog = Dialogs.FirstOrDefault((d => d.DialogId == dialogTable.DialogId)); if (dialog == null) { Dialogs.Insert(0, dialogTable); } else { if (Dialogs.IndexOf(dialog) == 0) { dialog.LastMessage = dialogTable.LastMessage; dialog.LastMessageSent = dialogTable.LastMessageSent; } else { Dialogs.Remove(dialog); Dialogs.Insert(0, dialogTable); } } } }
public void Expect_the_dialog_to_be_in_the_DialogTable() { DialogTable.ContainsKey(ServerDialog.GetId()).Should().BeTrue(); }
protected override async void OnAppearing() { base.OnAppearing(); if (isLoaded) { return; } this.busyIndicator.IsVisible = true; dialog = Database.Instance().GetDialog(dialogId); opponentId = dialog.OccupantIds.Split(',').Select(Int32.Parse).First(id => id != App.QbProvider.UserId); privateChatManager = App.QbProvider.GetXmppClient().GetPrivateChatManager(opponentId, dialogId); chatNameLabel.Text = dialog.Name; chatPhotoImage.Source = Device.OnPlatform(iOS: ImageSource.FromFile("privateholder.png"), Android: ImageSource.FromFile("privateholder.png"), WinPhone: ImageSource.FromFile("privateholder.png")); var users = await App.QbProvider.GetUsersByIdsAsync(dialog.OccupantIds); opponentUser = users.FirstOrDefault(u => u.Id != App.QbProvider.UserId); if (opponentUser != null && opponentUser.BlobId.HasValue) { App.QbProvider.GetImageAsync(opponentUser.BlobId.Value).ContinueWith((task, result) => { var bytes = task.ConfigureAwait(true).GetAwaiter().GetResult(); if (bytes != null) { Device.BeginInvokeOnMainThread(() => chatPhotoImage.Source = ImageSource.FromStream(() => new MemoryStream(bytes))); } }, TaskScheduler.FromCurrentSynchronizationContext()); } List <MessageTable> messages; try { messages = await App.QbProvider.GetMessagesAsync(dialogId); } catch (Exception ex) { await App.Current.MainPage.DisplayAlert("Error", ex.ToString(), "Ok"); return; } if (messages != null) { messages = messages.OrderBy(message => message.DateSent).ToList(); foreach (var message in messages) { if (message.SenderId == App.QbProvider.UserId) { message.RecepientFullName = "Me"; } else { if (opponentUser != null) { message.RecepientFullName = opponentUser.FullName; } } message.Text = System.Net.WebUtility.UrlDecode(message.Text); } Database.Instance().SaveAllMessages(dialogId, messages); //var template = new DataTemplate (typeof(MessageCell)); //listView.HasUnevenRows = true; //listView.ItemTemplate = template; var sorted = messages.OrderBy(d => d.DateSent); listView.ItemsSource = sorted; try { if (messages != null && messages.Count > 10) { listView.ScrollTo(messages [messages.Count - 1], ScrollToPosition.Start, false); } } catch (Exception ex) { } } Database.Instance().SubscribeForMessages(OnMessagesChanged); sendButton.Clicked += SendClicked; this.busyIndicator.IsVisible = false; this.isLoaded = true; }
public void Expect_the_dialog_to_be_removed_from_table() { DialogTable.ContainsKey(ClientDialog.GetId()).Should().BeFalse(); }
protected override async void OnAppearing() { base.OnAppearing(); if (isLoaded) { return; } this.busyIndicator.IsVisible = true; dialog = Database.Instance().GetDialog(dialogId); groupChatManager = App.QbProvider.GetXmppClient().GetGroupChatManager(dialog.XmppRoomJid, dialogId); chatNameLabel.Text = dialog.Name; chatPhotoImage.Source = Device.OnPlatform(iOS: ImageSource.FromFile("groupholder.png"), Android: ImageSource.FromFile("groupholder.png"), WinPhone: ImageSource.FromFile("groupholder.png")); opponentUsers = await App.QbProvider.GetUsersByIdsAsync(dialog.OccupantIds); if (!string.IsNullOrEmpty(dialog.Photo)) { chatPhotoImage.Source = ImageSource.FromUri(new Uri(dialog.Photo)); } List <MessageTable> messages; try { messages = await App.QbProvider.GetMessagesAsync(dialogId); } catch (Exception ex) { await App.Current.MainPage.DisplayAlert("Error", ex.ToString(), "Ok"); return; } if (messages != null) { messages = messages.OrderBy(message => message.DateSent).ToList(); foreach (var message in messages) { if (message.SenderId == App.QbProvider.UserId) { message.RecepientFullName = "Me"; } else { var opponentUser = opponentUsers.FirstOrDefault(u => u.Id == message.SenderId); if (opponentUser != null) { message.RecepientFullName = opponentUser.FullName; } } message.Text = System.Net.WebUtility.UrlDecode(message.Text); } Database.Instance().SaveAllMessages(dialogId, messages); //var template = new DataTemplate (typeof(MessageCell)); //listView.ItemTemplate = template; listView.HasUnevenRows = true; var sorted = messages.OrderBy(d => d.DateSent); listView.ItemsSource = sorted; try { if (messages != null && messages.Count > 10) { listView.ScrollTo(messages [messages.Count - 1], ScrollToPosition.Start, false); } } catch (Exception ex) { } } Database.Instance().SubscribeForMessages(OnMessagesChanged); sendButton.Clicked += SendClicked; this.busyIndicator.IsVisible = false; this.isLoaded = true; }