protected override async void OnAppearing() { base.OnAppearing(); if (isLoaded) { return; } isLoaded = true; busyIndicator.IsVisible = true; ToolbarItems.Clear(); ToolbarItems.Add(new ToolbarItem("Logout", "ic_action_logout.png", async() => { var result = await DisplayAlert("Logout", "Do you really want to logout?", "Ok", "Cancel"); if (result) { try { Database.Instance().UnSubscribeForDialogs(OnDialogsChanged); isLogoutClicked = true; Database.Instance().ResetAll(); App.UserLogin = 0; App.UserPassword = null; DisconnectToXmpp(); } catch (Exception ex) { } finally{ App.SetLoginPage(); } } })); Task.Factory.StartNew(async() => { if (user == null && App.QbProvider.UserId != 0) { user = await App.QbProvider.GetUserAsync(App.QbProvider.UserId); App.UserLogin = user.Id; App.UserPassword = user.Login; } try { // uses login as password because it is the same ConnetToXmpp(user.Id, user.Login); } catch (Exception ex) { } var dialogs = await App.QbProvider.GetDialogsAsync(new List <DialogType>() { DialogType.Private, DialogType.Group }); var sorted = dialogs.Where(d => d.LastMessageSent != null).OrderByDescending(d => d.LastMessageSent.Value).Concat(dialogs.Where(d => d.LastMessageSent == null)).ToList(); foreach (var dialog in sorted) { if (dialog.DialogType == DialogType.Group) { var groupdManager = App.QbProvider.GetXmppClient().GetGroupChatManager(dialog.XmppRoomJid, dialog.DialogId); groupdManager.JoinGroup(App.QbProvider.UserId.ToString()); } dialog.LastMessage = System.Net.WebUtility.UrlDecode(dialog.LastMessage); } Device.BeginInvokeOnMainThread(() => { if (myProfileImage.Source == null) { myNameLabel.Text = user.FullName; InitializeProfilePhoto(); } InitializeDialogsList(sorted); Database.Instance().SubscribeForDialogs(OnDialogsChanged); this.busyIndicator.IsVisible = false; }); }); }
private async void OnMessageReceived(object sender, MessageEventArgs messageEventArgs) { var dialog = Database.Instance().GetDialog(messageEventArgs.Message.ChatDialogId); if (dialog == null) { dialog = await App.QbProvider.GetDialogAsync(messageEventArgs.Message.ChatDialogId); } var decodedMessage = System.Net.WebUtility.UrlDecode(messageEventArgs.Message.MessageText); if (dialog != null) { dialog.LastMessage = decodedMessage; dialog.LastMessageSent = DateTime.UtcNow; if (dialog.UnreadMessageCount != null) { dialog.UnreadMessageCount++; } else { dialog.UnreadMessageCount = 1; } Database.Instance().SaveDialog(dialog); } var messageTable = new MessageTable(); messageTable.SenderId = messageEventArgs.Message.SenderId; messageTable.Text = decodedMessage; messageTable.DialogId = messageEventArgs.Message.ChatDialogId; messageTable.DateSent = messageEventArgs.Message.DateSent; if (messageTable.SenderId == App.QbProvider.UserId) { messageTable.RecepientFullName = "Me"; } else { var user = Database.Instance().GetUser(messageTable.SenderId); if (user == null) { var userRespose = await App.QbProvider.GetUserAsync(messageTable.SenderId); if (userRespose != null) { user = new UserTable(); user.FullName = userRespose.FullName; user.UserId = userRespose.Id; user.PhotoId = userRespose.BlobId.HasValue ? userRespose.BlobId.Value : 0; Database.Instance().SaveUser(user); messageTable.RecepientFullName = user.FullName; } } else { messageTable.RecepientFullName = user.FullName; } } Database.Instance().SaveMessage(messageTable); }