protected async Task SetRecepientName(MessageTable messageTable) { try { if (messageTable.SenderId == App.QbProvider.UserId) { messageTable.RecepientFullName = "Me"; } else { var opponentUser = opponentUsers.FirstOrDefault(u => u.Id == messageTable.SenderId); if (opponentUser == null) { var userRespose = await App.QbProvider.GetUserAsync(messageTable.SenderId); if (userRespose != null) { this.opponentUsers.Add(userRespose); messageTable.RecepientFullName = userRespose.FullName; } } else { messageTable.RecepientFullName = opponentUser.FullName; } } } catch (Exception ex) { } }
public async Task LoadMessages() { List<Message> 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) { var chatMessage = new MessageTable(); chatMessage.DateSent = message.DateSent; chatMessage.SenderId = message.SenderId; chatMessage.MessageId = message.Id; if (message.RecipientId.HasValue) chatMessage.RecepientId = message.RecipientId.Value; chatMessage.DialogId = message.ChatDialogId; chatMessage.IsRead = message.Read == 1; await this.SetRecepientName(chatMessage); chatMessage.Text = System.Net.WebUtility.UrlDecode(message.MessageText); Device.BeginInvokeOnMainThread(() => Messages.Add(chatMessage) ); } Device.BeginInvokeOnMainThread(() => { var privateChatPage = ((App.Current.MainPage as NavigationPage).CurrentPage as PrivateChatPage); if (privateChatPage != null) privateChatPage.ScrollList(); } ); } }
private void SendMessageCommandExecute(object obj) { var message = this.MessageText != null ? this.MessageText.Trim() : string.Empty; if (!string.IsNullOrEmpty(message)) { var m = new MessageTable(); m.SenderId = (int)App.QbProvider.UserId; m.Text = message; m.DialogId = dialogId; m.RecepientFullName = "Me"; try { var encodedMessage = System.Net.WebUtility.UrlEncode(message); privateChatManager.SendMessage(encodedMessage); } catch (Exception ex) { return; //await App.Current.MainPage.DisplayAlert ("Error", ex.ToString (), "Ok"); } long unixTimestamp = DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks; unixTimestamp /= TimeSpan.TicksPerSecond; m.DateSent = unixTimestamp; m.ID = Database.Instance().SaveMessage(m); var dialog = Database.Instance().GetDialog(this.dialogId); dialog.LastMessage = m.Text; dialog.LastMessageSent = DateTime.UtcNow; Database.Instance().SaveDialog(dialog, true); this.Messages.Add(m); MessageText = ""; Device.BeginInvokeOnMainThread(() => { var page = (App.Current.MainPage as NavigationPage).CurrentPage as PrivateChatPage; if (page != null) page.ScrollList(); }); } }
private async void OnMessageReceived(object sender, MessageEventArgs messageEventArgs) { if (messageEventArgs.MessageType == MessageType.Chat || messageEventArgs.MessageType == MessageType.Groupchat) { string decodedMessage = System.Net.WebUtility.UrlDecode(messageEventArgs.Message.MessageText); var messageTable = new MessageTable(); messageTable.SenderId = messageEventArgs.Message.SenderId; messageTable.DialogId = messageEventArgs.Message.ChatDialogId; messageTable.DateSent = messageEventArgs.Message.DateSent; if (messageEventArgs.Message.NotificationType != 0) { if (messageEventArgs.Message.NotificationType == NotificationTypes.GroupUpdate) { if (messageEventArgs.Message.AddedOccupantsIds.Any()) { var userIds = new List<int>(messageEventArgs.Message.AddedOccupantsIds); userIds.Add(messageEventArgs.Message.SenderId); var users = await App.QbProvider.GetUsersByIdsAsync(string.Join(",", userIds)); var addedUsers = users.Where(u => u.Id != messageEventArgs.Message.SenderId); var senderUser = users.First(u => u.Id == messageEventArgs.Message.SenderId); messageTable.Text = senderUser.FullName + " added users: " + string.Join(",", addedUsers.Select(u => u.FullName)); } else if (messageEventArgs.Message.DeletedOccupantsIds.Any()) { var userIds = new List<int>(messageEventArgs.Message.DeletedOccupantsIds); var users = await App.QbProvider.GetUsersByIdsAsync(string.Join(",", userIds)); messageTable.Text = string.Join(",", users.Select(u => u.FullName)) + " left this room"; } //var dialogInfo = await App.QbProvider.GetDialogAsync(messageEventArgs.Message.ChatDialogId); //if (dialogInfo == null) //{ // return; //} //var dialog = new DialogTable(dialogInfo); //Database.Instance().SaveDialog(dialog); } } else { messageTable.Text = decodedMessage; } await SetRecepientName(messageTable); this.Messages.Add(messageTable); Device.BeginInvokeOnMainThread(() => { var page = (App.Current.MainPage as NavigationPage).CurrentPage as PrivateChatPage; if (page != null) page.ScrollList(); }); } }
public async Task LoadMessages() { List<Message> messages; try { messages = await App.QbProvider.GetMessagesAsync(dialogId); } catch (Exception ex) { new MessageDialog(ex.ToString(), "Error").ShowAsync(); return; } if (messages != null) { messages = messages.OrderBy(message => message.DateSent).ToList(); foreach (var message in messages) { var chatMessage = new MessageTable(); chatMessage.DateSent = message.DateSent; chatMessage.SenderId = message.SenderId; chatMessage.MessageId = message.Id; if (message.RecipientId.HasValue) chatMessage.RecepientId = message.RecipientId.Value; chatMessage.DialogId = message.ChatDialogId; chatMessage.IsRead = message.Read == 1; await this.SetRecepientName(chatMessage); chatMessage.Text = System.Net.WebUtility.UrlDecode(message.MessageText); await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { Messages.Add(chatMessage); }); } var page = App.NavigationFrame.Content as PrivateChatPage; if (page != null) page.ScrollList(); } }
private void SendMessageCommandExecute() { var message = this.MessageText != null ? this.MessageText.Trim() : string.Empty; if (!string.IsNullOrEmpty(message)) { var m = new MessageTable(); m.SenderId = (int)App.QbProvider.UserId; m.Text = message; m.DialogId = dialogId; m.RecepientFullName = "Me"; try { var encodedMessage = System.Net.WebUtility.UrlEncode(message); privateChatManager.SendMessage(encodedMessage); } catch (Exception ex) { this.IsBusy = false; new MessageDialog("Internet connection is lost. Please check it and restart the Application", "Error").ShowAsync(); return; } long unixTimestamp = DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks; unixTimestamp /= TimeSpan.TicksPerSecond; m.DateSent = unixTimestamp; m.ID = Database.Instance().SaveMessage(m); var dialog = Database.Instance().GetDialog(this.dialogId); dialog.LastMessage = m.Text; dialog.LastMessageSent = DateTime.UtcNow; Database.Instance().SaveDialog(dialog, true); this.Messages.Add(m); MessageText = ""; var page = App.NavigationFrame.Content as PrivateChatPage; if (page != null) page.ScrollList(); } }
public async Task LoadMessages() { List<Message> messages; List<MessageTable> chatMessages = new List<MessageTable>(); try { messages = await App.QbProvider.GetMessagesAsync(dialogId); } catch (Exception ex) { new MessageDialog(ex.ToString(), "Error").ShowAsync(); return; } using (await lockAddingObject.LockAsync()) { if (messages != null) { messages = messages.OrderBy(message => message.DateSent).ToList(); foreach (var message in messages) { var chatMessage = new MessageTable(); chatMessage.DateSent = message.DateSent; chatMessage.SenderId = message.SenderId; chatMessage.MessageId = message.Id; if (message.RecipientId.HasValue) chatMessage.RecepientId = message.RecipientId.Value; chatMessage.DialogId = message.ChatDialogId; chatMessage.IsRead = message.Read == 1; await this.SetRecepientName(chatMessage); if (message.NotificationType == NotificationTypes.GroupCreate || message.NotificationType == NotificationTypes.GroupUpdate) { if (message.AddedOccupantsIds.Any()) { var userIds = new List<int>(message.AddedOccupantsIds); userIds.Add(message.SenderId); var users = await App.QbProvider.GetUsersByIdsAsync(string.Join(",", userIds)); var addedUsers = users.Where(u => u.Id != message.SenderId); var senderUser = users.First(u => u.Id == message.SenderId); chatMessage.Text = senderUser.FullName + " added users: " + string.Join(",", addedUsers.Select(u => u.FullName)); } else if (message.DeletedOccupantsIds.Any()) { var userIds = new List<int>(message.DeletedOccupantsIds); var users = await App.QbProvider.GetUsersByIdsAsync(string.Join(",", userIds)); chatMessage.Text = string.Join(",", users.Select(u => u.FullName)) + " left this room"; } } else { chatMessage.Text = System.Net.WebUtility.UrlDecode(message.MessageText); } chatMessages.Add(chatMessage); } } await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { this.Messages.Clear(); foreach (var item in chatMessages) { this.Messages.Add(item); } var page = App.NavigationFrame.Content as GroupChatPage; if (page != null) page.ScrollList(); }); } }
private async void OnMessageReceived(object sender, MessageEventArgs messageEventArgs) { if (messageEventArgs.MessageType == MessageType.Chat || messageEventArgs.MessageType == MessageType.Groupchat) { using (await lockAddingObject.LockAsync()) { string decodedMessage = System.Net.WebUtility.UrlDecode(messageEventArgs.Message.MessageText); var messageTable = new MessageTable(); messageTable.SenderId = messageEventArgs.Message.SenderId; messageTable.DialogId = messageEventArgs.Message.ChatDialogId; messageTable.DateSent = messageEventArgs.Message.DateSent; messageTable.MessageId = messageEventArgs.Message.Id; if (messageEventArgs.Message.NotificationType != 0) { if (messageEventArgs.Message.NotificationType == NotificationTypes.GroupUpdate) { if (messageEventArgs.Message.AddedOccupantsIds.Any()) { var userIds = new List<int>(messageEventArgs.Message.AddedOccupantsIds); userIds.Add(messageEventArgs.Message.SenderId); var users = await App.QbProvider.GetUsersByIdsAsync(string.Join(",", userIds)); var addedUsers = users.Where(u => u.Id != messageEventArgs.Message.SenderId); var senderUser = users.First(u => u.Id == messageEventArgs.Message.SenderId); messageTable.Text = senderUser.FullName + " added users: " + string.Join(",", addedUsers.Select(u => u.FullName)); } else if (messageEventArgs.Message.DeletedOccupantsIds.Any()) { var userIds = new List<int>(messageEventArgs.Message.DeletedOccupantsIds); var users = await App.QbProvider.GetUsersByIdsAsync(string.Join(",", userIds)); messageTable.Text = string.Join(",", users.Select(u => u.FullName)) + " left this room"; } } } else { messageTable.Text = decodedMessage; } await SetRecepientName(messageTable); await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { var message = this.Messages.FirstOrDefault(m => m.MessageId == messageTable.MessageId); if (message == null) this.Messages.Add(messageTable); var page = App.NavigationFrame.Content as GroupChatPage; if (page != null) page.ScrollList(); }); } } }
public int SaveMessage(MessageTable item, bool isNotify = false) { int retVal = 0; lock (locker) { var checkIfPresence = this.database.Table<MessageTable>().FirstOrDefault(x => x.MessageId == item.MessageId); if (checkIfPresence != null) { retVal = item.ID = checkIfPresence.ID; this.database.Update(item); } else { this.database.Insert(item); retVal = item.ID; } } if (isNotify) messageObserver.Invoke (); return retVal; }
private async Task LoadMessages() { List<Message> messages = null; List<MessageTable> chatMessages = new List<MessageTable>(); try { messages = await App.QbProvider.GetMessagesAsync(this.dialogId); var userIds = messages.Select(u => u.SenderId).Distinct().ToList(); userIds.Add(App.UserId); this.opponentUsers = await App.QbProvider.GetUsersByIdsAsync(string.Join(",", userIds)); } catch (Exception ex) { await App.Current.MainPage.DisplayAlert("Error", ex.ToString(), "Ok"); } using (await lockObject.LockAsync()) { if (messages != null) { messages = messages.OrderBy(message => message.DateSent).ToList(); foreach (var message in messages) { var chatMessage = new MessageTable(); chatMessage.DateSent = message.DateSent; chatMessage.SenderId = message.SenderId; chatMessage.MessageId = message.Id; if (message.RecipientId.HasValue) chatMessage.RecepientId = message.RecipientId.Value; chatMessage.DialogId = message.ChatDialogId; chatMessage.IsRead = message.Read == 1; await this.SetRecepientName(chatMessage); if (message.NotificationType == NotificationTypes.GroupCreate || message.NotificationType == NotificationTypes.GroupUpdate) { if (message.AddedOccupantsIds.Any()) { await LoadMessageText(message, chatMessage); } else if (message.DeletedOccupantsIds.Any()) { var userIds = new List<int>(message.DeletedOccupantsIds); var users = await App.QbProvider.GetUsersByIdsAsync(string.Join(",", userIds)); chatMessage.Text = string.Join(",", users.Select(u => u.FullName)) + " left this room"; } } else { chatMessage.Text = System.Net.WebUtility.UrlDecode(message.MessageText); } chatMessages.Add(chatMessage); } var databaseMessages = Database.Instance().GetMessages(this.dialogId); Device.BeginInvokeOnMainThread(() => { var messagesJoined = chatMessages.GroupJoin(databaseMessages, // inner sequence e => e.MessageId, // outerKeySelector o => o.MessageId, // innerKeySelector (e, o) => e); this.Messages.Clear(); foreach (var item in messagesJoined) { this.Messages.Add(item); } var page = (App.Current.MainPage as NavigationPage).CurrentPage as GroupChatPage; if (page != null) { page.ScrollList(); } } ); } } }
private async void OnMessageReceived(object sender, MessageEventArgs messageEventArgs) { if (messageEventArgs.MessageType == MessageType.Chat || messageEventArgs.MessageType == MessageType.Groupchat) { using (await lockObject.LockAsync()) { string decodedMessage = System.Net.WebUtility.UrlDecode(messageEventArgs.Message.MessageText); var messageTable = new MessageTable(); messageTable.SenderId = messageEventArgs.Message.SenderId; messageTable.DialogId = messageEventArgs.Message.ChatDialogId; messageTable.DateSent = messageEventArgs.Message.DateSent; messageTable.MessageId = messageEventArgs.Message.Id; if (messageEventArgs.Message.NotificationType != 0) { if (messageEventArgs.Message.NotificationType == NotificationTypes.GroupUpdate) { if (messageEventArgs.Message.AddedOccupantsIds.Any()) { await LoadMessageText(messageEventArgs.Message, messageTable); } else if (messageEventArgs.Message.DeletedOccupantsIds.Any()) { var userIds = new List<int>(messageEventArgs.Message.DeletedOccupantsIds); var users = await App.QbProvider.GetUsersByIdsAsync(string.Join(",", userIds)); messageTable.Text = string.Join(",", users.Select(u => u.FullName)) + " left this room"; } } } else { messageTable.Text = decodedMessage; } await SetRecepientName(messageTable); var message = this.Messages.FirstOrDefault(m => m.MessageId == messageTable.MessageId); if (message == null) this.Messages.Add(messageTable); Device.BeginInvokeOnMainThread(() => { var groupPage = ((App.Current.MainPage as NavigationPage).CurrentPage as GroupChatPage); if (groupPage != null) groupPage.ScrollList(); } ); } } }
private async Task LoadMessageText(Message message, MessageTable chatMessage) { var userIds = new List<int>(message.AddedOccupantsIds); // Check if we loaded this users var isNeedLoad = false; foreach (var userInAddedCollectionId in message.AddedOccupantsIds) { var user = opponentUsers.FirstOrDefault(u => u.Id == userInAddedCollectionId); if (user == null) { isNeedLoad = true; break; } } userIds.Add(message.SenderId); if (isNeedLoad) { var users = await App.QbProvider.GetUsersByIdsAsync(string.Join(",", userIds)); foreach (var user in users) { var userInCollection = opponentUsers.FirstOrDefault(u => u.Id == user.Id); if (userInCollection == null) opponentUsers.Add(user); } } var addedUsers = opponentUsers.Where(u => userIds.Contains(u.Id) && u.Id != message.SenderId); var senderUser = opponentUsers.First(u => userIds.Contains(u.Id) && u.Id == message.SenderId); chatMessage.Text = senderUser.FullName + " added users: " + string.Join(",", addedUsers.Select(u => u.FullName)); }