Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 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));
     }
 }
Exemplo n.º 5
0
 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);
         }
     }
 }
Exemplo n.º 7
0
 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);
             }
         }
     }
 }
Exemplo n.º 8
0
 public void Expect_the_dialog_to_be_in_the_DialogTable()
 {
     DialogTable.ContainsKey(ServerDialog.GetId()).Should().BeTrue();
 }
Exemplo n.º 9
0
        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;
        }
Exemplo n.º 10
0
 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;
        }