示例#1
0
        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;
                });
            });
        }
示例#2
0
        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);
        }