Exemplo n.º 1
0
 private void OnNewDeliveryReceipt(XMPPClient client, NewDeliveryReceiptEventArgs args)
 {
     Task.Run(() =>
     {
         string to     = Utils.getBareJidFromFullJid(args.MSG.getTo());
         string from   = Utils.getBareJidFromFullJid(args.MSG.getFrom());
         string chatId = ChatTable.generateId(from, to);
         string msgId  = ChatMessageTable.generateId(args.MSG.RECEIPT_ID, chatId);
         ChatDBManager.INSTANCE.setMessageAsDeliverd(msgId, true);
     });
 }
Exemplo n.º 2
0
        private void omemo_tmfo_Click(object sender, RoutedEventArgs e)
        {
            Chat.omemoEnabled = omemo_tmfo.IsChecked;
            showChat();
            ChatTable cpy = Chat;

            Task.Run(() =>
            {
                ChatDBManager.INSTANCE.setChatTableValue(nameof(cpy.id), cpy.id, nameof(cpy.omemoEnabled), cpy.omemoEnabled);
            });
        }
 private void UpdateView(ChatTable chat)
 {
     MODEL.BookmarkText = chat.inRoster ? "Remove bookmark" : "Bookmark";
     MODEL.ChatBareJid  = chat.chatJabberId;
     MODEL.MuteGlyph    = chat.muted ? "\uE74F" : "\uE767";
     MODEL.MuteTooltip  = chat.muted ? "Unmute" : "Mute";
     if (string.IsNullOrEmpty(MODEL.MucName))
     {
         MODEL.MucName          = chat.chatJabberId;
         MODEL.DifferentMucName = !string.Equals(MODEL.ChatBareJid, MODEL.MucName);
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// Tries to add the room.
        /// </summary>
        /// <returns>Returns true if the account got added.</returns>
        private bool addRoom()
        {
            if (checkUserInputAndWarn())
            {
                XMPPClient client = accountSelection_asc.getSelectedAccount();

                string roomJid = roomName_tbx.Text + '@' + server_asbx.Text.ToLower();

                ChatTable muc = new ChatTable()
                {
                    id            = ChatTable.generateId(roomJid, client.getXMPPAccount().getIdAndDomain()),
                    ask           = null,
                    chatJabberId  = roomJid,
                    userAccountId = client.getXMPPAccount().getIdAndDomain(),
                    chatType      = ChatType.MUC,
                    inRoster      = (bool)bookmark_cbx.IsChecked,
                    muted         = false,
                    lastActive    = DateTime.Now,
                    subscription  = "none"
                };
                ChatDBManager.INSTANCE.setChat(muc, false, true);

                MUCChatInfoTable info = new MUCChatInfoTable()
                {
                    chatId        = muc.id,
                    subject       = null,
                    state         = MUCState.DISCONNECTED,
                    name          = null,
                    password      = null,
                    nickname      = nick_tbx.Text,
                    autoEnterRoom = (bool)autoJoin_cbx.IsChecked
                };
                if ((bool)enablePassword_cbx.IsChecked)
                {
                    info.password = password_pwb.Password;
                }
                MUCDBManager.INSTANCE.setMUCChatInfo(info, false, true);

                if (info.autoEnterRoom)
                {
                    Task t = MUCHandler.INSTANCE.enterMUCAsync(client, muc, info);
                }

                if ((bool)bookmark_cbx.IsChecked)
                {
                    List <ConferenceItem> conferenceItems = MUCDBManager.INSTANCE.getXEP0048ConferenceItemsForAccount(client.getXMPPAccount().getIdAndDomain());
                    setBookmarkHelper = client.PUB_SUB_COMMAND_HELPER.setBookmars_xep_0048(conferenceItems, onMessage, onTimeout);
                }

                return(true);
            }
            return(false);
        }
Exemplo n.º 5
0
        public void UpdateLastAction(ChatTable chat)
        {
            Task.Run(() =>
            {
                ChatMessageTable lastMsg = ChatDBManager.INSTANCE.getLastChatMessageForChat(chat.id);
                if (lastMsg is null)
                {
                    LastActionIconText       = "";
                    LastActionIconVisability = Visibility.Collapsed;
                    LastActionState          = MessageState.READ;
                }
                else
                {
                    // Text and icon:
                    LastActionState = lastMsg.state;
                    if (lastMsg.isImage)
                    {
                        LastActionIconText       = "\uE722";
                        LastActionIconVisability = Visibility.Visible;
                        LastActionText           = lastMsg.message ?? "You received an image";
                    }
                    else
                    {
                        switch (lastMsg.type)
                        {
                        case DirectMUCInvitationMessage.TYPE_MUC_DIRECT_INVITATION:
                            LastActionIconText       = "\uE8F2";
                            LastActionIconVisability = Visibility.Visible;
                            LastActionText           = "You have been invited to a MUC room";
                            break;

                        case MessageMessage.TYPE_ERROR:
                            LastActionIconText       = "\xE7BA";
                            LastActionIconVisability = Visibility.Visible;
                            LastActionText           = lastMsg.message ?? "You received an error message";
                            break;

                        case MUCHandler.TYPE_CHAT_INFO:
                            LastActionIconText       = "\uE946";
                            LastActionIconVisability = Visibility.Visible;
                            LastActionText           = (lastMsg.message ?? "-");
                            break;

                        default:
                            LastActionIconVisability = Visibility.Collapsed;
                            LastActionText           = lastMsg.message ?? "";
                            break;
                        }
                    }
                }
            });
        }
Exemplo n.º 6
0
        private async Task onMUCErrorMessageAsync(XMPPClient client, MUCErrorMessage errorMessage)
        {
            string room = Utils.getBareJidFromFullJid(errorMessage.getFrom());

            if (room != null)
            {
                string    chatId = ChatTable.generateId(room, client.getXMPPAccount().getBareJid());
                ChatTable muc    = ChatDBManager.INSTANCE.getChat(chatId);
                if (muc != null)
                {
                    MUCChatInfoTable info = MUCDBManager.INSTANCE.getMUCInfo(chatId);
                    if (info != null)
                    {
                        Logger.Error("Received an error message for MUC: " + muc.chatJabberId + "\n" + errorMessage.ERROR_MESSAGE);

                        stopMUCJoinHelper(muc);

                        if (info.state != MUCState.DISCONNECTED)
                        {
                            await sendMUCLeaveMessageAsync(client, muc, info);
                        }

                        switch (errorMessage.ERROR_CODE)
                        {
                        // No access - user got baned:
                        case 403:
                            MUCDBManager.INSTANCE.setMUCState(info.chatId, MUCState.BANED, true);
                            addChatInfoMessage(info.chatId, room, "Unable to join room!\nYou are baned from this room.");
                            return;

                        default:
                            MUCDBManager.INSTANCE.setMUCState(info.chatId, MUCState.ERROR, true);
                            break;
                        }

                        // Add an error chat message:
                        ChatMessageTable msg = new ChatMessageTable()
                        {
                            id       = ChatMessageTable.generateErrorMessageId(errorMessage.ID ?? AbstractMessage.getRandomId(), muc.id),
                            chatId   = muc.id,
                            date     = DateTime.Now,
                            fromUser = errorMessage.getFrom(),
                            isImage  = false,
                            message  = "Code: " + errorMessage.ERROR_CODE + "\nType: " + errorMessage.ERROR_TYPE + "\nMessage:\n" + errorMessage.ERROR_MESSAGE,
                            state    = MessageState.UNREAD,
                            type     = MessageMessage.TYPE_ERROR
                        };
                        ChatDBManager.INSTANCE.setChatMessage(msg, true, false);
                    }
                }
            }
        }
Exemplo n.º 7
0
        protected override async void OnBackgroundActivated(BackgroundActivatedEventArgs args)
        {
            BackgroundTaskDeferral deferral = args.TaskInstance.GetDeferral();

            switch (args.TaskInstance.Task.Name)
            {
            case BackgroundTaskHelper.TOAST_BACKGROUND_TASK_NAME:
                ToastNotificationActionTriggerDetail details = args.TaskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
                if (details != null)
                {
                    InitLogger();

                    string   arguments = details.Argument;
                    ValueSet userInput = details.UserInput;

                    Logger.Debug("App activated in background through toast with: " + arguments);
                    AbstractToastActivation abstractToastActivation = ToastActivationArgumentParser.parseArguments(arguments);

                    if (abstractToastActivation is null)
                    {
                        Logger.Warn("Unable to evaluate toast activation string - unknown format");
                    }
                    else if (abstractToastActivation is MarkChatAsReadToastActivation markChatAsRead)
                    {
                        ToastHelper.removeToastGroup(markChatAsRead.CHAT_ID);
                        ChatDBManager.INSTANCE.markAllMessagesAsRead(markChatAsRead.CHAT_ID);
                    }
                    else if (abstractToastActivation is MarkMessageAsReadToastActivation markMessageAsRead)
                    {
                        ChatDBManager.INSTANCE.markMessageAsRead(markMessageAsRead.CHAT_MESSAGE_ID);
                    }
                    else if (abstractToastActivation is SendReplyToastActivation sendReply)
                    {
                        ChatTable chat = ChatDBManager.INSTANCE.getChat(sendReply.CHAT_ID);
                        if (!(chat is null) && userInput[ToastHelper.TEXT_BOX_ID] is string text)
                        {
                            string trimedText = text.Trim(UiUtils.TRIM_CHARS);
                            await SendChatMessageAsync(chat, trimedText);
                        }
                        ChatDBManager.INSTANCE.markMessageAsRead(sendReply.CHAT_MESSAGE_ID);
                    }

                    ToastHelper.UpdateBadgeNumber();
                }
                break;

            default:
                break;
            }

            deferral.Complete();
        }
Exemplo n.º 8
0
        private static void popToast(ToastContent content, ChatTable chat, string group)
        {
            ToastNotification toast = new ToastNotification(content.GetXml())
            {
                Group = group
            };

            OnChatMessageToastEventArgs args = new OnChatMessageToastEventArgs(toast, chat);

            OnChatMessageToast?.Invoke(args);

            popToast(toast, args);
        }
Exemplo n.º 9
0
        private void C_NewPresence(XMPPClient client, XMPP_API.Classes.Events.NewPresenceMessageEventArgs args)
        {
            string from = Utils.getBareJidFromFullJid(args.PRESENCE_MESSAGE.getFrom());

            // If received a presence message from your own account, ignore it:
            if (string.Equals(from, client.getXMPPAccount().getIdAndDomain()))
            {
                return;
            }

            string    to   = client.getXMPPAccount().getIdAndDomain();
            string    id   = ChatTable.generateId(from, to);
            ChatTable chat = ChatDBManager.INSTANCE.getChat(id);

            switch (args.PRESENCE_MESSAGE.TYPE)
            {
            case "subscribe":
            case "unsubscribed":
                if (chat == null)
                {
                    chat = new ChatTable
                    {
                        id            = id,
                        chatJabberId  = from,
                        userAccountId = to,
                        inRoster      = false,
                        muted         = false,
                        lastActive    = DateTime.Now,
                        ask           = null,
                        status        = null,
                        chatState     = null
                    };
                }
                chat.subscription = args.PRESENCE_MESSAGE.TYPE;
                break;

            default:
                break;
            }

            if (chat != null)
            {
                chat.status   = args.PRESENCE_MESSAGE.STATUS;
                chat.presence = args.PRESENCE_MESSAGE.PRESENCE;
                ChatDBManager.INSTANCE.setChat(chat, false, true);
            }
            else
            {
                Logger.Warn("Received a presence message for an unknown chat from: " + from + ", to: " + to);
            }
        }
Exemplo n.º 10
0
        public void UpdateViewMuc(ChatTable chat, MUCChatInfoTable muc)
        {
            if (!(muc is null) && !(chat is null))
            {
                NameText             = string.IsNullOrWhiteSpace(muc.name) ? chat.chatJabberId : muc.name;
                RemoveFromRosterText = chat.inRoster ? "Remove bookmark" : "Bookmark";

                // Account image:
                AccountPresence = muc.getMUCPresence();
                AccountInitials = "\uE125";

                MucState = muc.state;
            }
        }
        public async Task ToggleChatMutedAsync(ChatTable chat)
        {
            if (chat is null)
            {
                return;
            }

            await Task.Run(() =>
            {
                chat.muted = !chat.muted;
                MODEL.UpdateView(chat);
                ChatDBManager.INSTANCE.setChat(chat, false, true);
            }).ConfAwaitFalse();
        }
Exemplo n.º 12
0
        private void C_NewBookmarksResultMessage(XMPPClient client, NewBookmarksResultMessageEventArgs args)
        {
            foreach (ConferenceItem c in args.BOOKMARKS_MESSAGE.STORAGE.CONFERENCES)
            {
                bool   newMUC = false;
                string to     = client.getXMPPAccount().getBareJid();
                string from   = c.jid;
                string id     = ChatTable.generateId(from, to);

                // Create / update chat:
                ChatTable chat = ChatDBManager.INSTANCE.getChat(id);
                if (chat is null)
                {
                    chat   = new ChatTable(from, to);
                    newMUC = true;
                }
                chat.chatType     = ChatType.MUC;
                chat.inRoster     = true;
                chat.presence     = Presence.Unavailable;
                chat.isChatActive = true;

                ChatDBManager.INSTANCE.setChat(chat, false, true);

                // Create / update MUC info:
                MUCChatInfoTable info = MUCDBManager.INSTANCE.getMUCInfo(chat.id);
                if (info is null)
                {
                    info = new MUCChatInfoTable
                    {
                        chatId  = chat.id,
                        subject = null
                    };
                    newMUC = true;
                }

                info.autoEnterRoom = c.autoJoin;
                info.name          = c.name;
                info.nickname      = c.nick;
                info.password      = c.password;

                MUCDBManager.INSTANCE.setMUCChatInfo(info, false, true);


                // Enter MUC manually if the MUC is new for this client:
                if (newMUC && info.autoEnterRoom && !Settings.getSettingBoolean(SettingsConsts.DISABLE_AUTO_JOIN_MUC))
                {
                    Task.Run(() => MUCHandler.INSTANCE.enterMUCAsync(client, chat, info));
                }
            }
        }
Exemplo n.º 13
0
        private async Task AddMucAsync(XMPPClient client, string roomBareJid, string nickname, string password, bool bookmark, bool autoJoin)
        {
            ChatTable muc = new ChatTable(roomBareJid, client.getXMPPAccount().getBareJid())
            {
                chatType     = ChatType.MUC,
                inRoster     = bookmark,
                subscription = "none",
                isChatActive = true
            };

            MUCChatInfoTable info = new MUCChatInfoTable()
            {
                chatId        = muc.id,
                subject       = null,
                state         = MUCState.DISCONNECTED,
                name          = null,
                password      = string.IsNullOrEmpty(password) ? null : password,
                nickname      = nickname,
                autoEnterRoom = autoJoin,
            };

            await Task.Run(() =>
            {
                ChatDBManager.INSTANCE.setChat(muc, false, true);
                MUCDBManager.INSTANCE.setMUCChatInfo(info, false, true);
            });

            if (info.autoEnterRoom)
            {
                await MUCHandler.INSTANCE.enterMUCAsync(client, muc, info);
            }

            if (bookmark)
            {
                List <ConferenceItem> conferenceItems          = MUCDBManager.INSTANCE.getXEP0048ConferenceItemsForAccount(client.getXMPPAccount().getBareJid());
                MessageResponseHelperResult <IQMessage> result = await client.PUB_SUB_COMMAND_HELPER.setBookmars_xep_0048Async(conferenceItems);

                if (result.STATE == MessageResponseHelperResultState.SUCCESS)
                {
                    if (result.RESULT is IQErrorMessage errMsg)
                    {
                        Logger.Warn("Failed to set bookmarks: " + errMsg.ToString());
                    }
                }
                else
                {
                    Logger.Warn("Failed to set bookmarks: " + result.STATE);
                }
            }
        }
Exemplo n.º 14
0
        public void setChat(ChatTable chat, bool delete, bool triggerChatChanged)
        {
            if (delete)
            {
                dB.Delete(chat);
            }
            else
            {
                dB.InsertOrReplace(chat);
            }

            if (triggerChatChanged)
            {
                onChatChanged(chat, delete);
            }
        }
Exemplo n.º 15
0
 /// <summary>
 /// Checks if the fingerprint is trusted by the following mechanism:
 /// 1. Does a chat exist for the fingerprint? Yes -> 2. No. -> false
 /// 2. Is "trusted keys only" activated for chats? Yes -> 3. No -> true
 /// 3. Is the key trusted? Yes -> true No -> false
 /// </summary>
 /// <param name="fingerprint">The fingerprint we want to check if it's valid.</param>
 public bool IsFingerprintTrusted(OmemoFingerprint fingerprint)
 {
     // Check for own devices:
     if (string.Equals(fingerprint.ADDRESS.getName(), ACCOUNT.getBareJid()))
     {
         // No trust management for own devices right now.
         return(true);
     }
     // Check for contact devices:
     else
     {
         string    chatId = ChatTable.generateId(fingerprint.ADDRESS.getName(), ACCOUNT.getBareJid());
         ChatTable chat   = ChatDBManager.INSTANCE.getChat(chatId);
         return(!(chat is null) && (!chat.omemoTrustedKeysOnly || fingerprint.trusted));
     }
 }
Exemplo n.º 16
0
 private async void Client_NewChatState(XMPPClient client, XMPP_API.Classes.Network.Events.NewChatStateEventArgs args)
 {
     if (args.Cancel)
     {
         return;
     }
     string chatId = ChatTable.generateId(args.FROM, args.TO);
     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
     {
         if (Chat != null && Chat.chatType == ChatType.CHAT && string.Equals(chatId, Chat.id))
         {
             storeChatState(args.STATE);
             args.Cancel = true;
         }
     });
 }
Exemplo n.º 17
0
        protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
        {
            var deferral = args.TaskInstance.GetDeferral();

            switch (args.TaskInstance.Task.Name)
            {
            case BackgroundTaskHelper.TOAST_BACKGROUND_TASK_NAME:
                ToastNotificationActionTriggerDetail details = args.TaskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
                if (details != null)
                {
                    initLogLevel();

                    string arguments = details.Argument;
                    var    userInput = details.UserInput;

                    Logger.Debug("App activated in background through toast with: " + arguments);
                    AbstractToastActivation abstractToastActivation = ToastActivationArgumentParser.parseArguments(arguments);

                    if (abstractToastActivation is MarkChatAsReadToastActivation markChatAsRead)
                    {
                        ToastHelper.removeToastGroup(markChatAsRead.CHAT_ID);
                        ChatDBManager.INSTANCE.markAllMessagesAsRead(markChatAsRead.CHAT_ID);
                    }
                    else if (abstractToastActivation is MarkMessageAsReadToastActivation markMessageAsRead)
                    {
                        ChatDBManager.INSTANCE.markMessageAsRead(markMessageAsRead.CHAT_MESSAGE_ID);
                    }
                    else if (abstractToastActivation is SendReplyToastActivation sendReply)
                    {
                        ChatTable chat = ChatDBManager.INSTANCE.getChat(sendReply.CHAT_ID);
                        if (chat != null && userInput[ToastHelper.TEXT_BOX_ID] != null)
                        {
                            if (isRunning)
                            {
                            }
                            else
                            {
                            }
                        }
                    }
                }
                break;
            }

            deferral.Complete();
        }
Exemplo n.º 18
0
        private async void C_NewPresence(XMPPClient client, XMPP_API.Classes.Events.NewPresenceMessageEventArgs args)
        {
            string from = Utils.getBareJidFromFullJid(args.PRESENCE_MESSAGE.getFrom());

            // If received a presence message from your own account, ignore it:
            if (string.Equals(from, client.getXMPPAccount().getBareJid()))
            {
                return;
            }

            string    to   = client.getXMPPAccount().getBareJid();
            string    id   = ChatTable.generateId(from, to);
            ChatTable chat = ChatDBManager.INSTANCE.getChat(id);

            switch (args.PRESENCE_MESSAGE.TYPE)
            {
            case "subscribe":
            case "unsubscribed":
                if (chat is null)
                {
                    chat = new ChatTable(from, to);
                }
                chat.subscription = args.PRESENCE_MESSAGE.TYPE;
                break;

            // Answer presence probes:
            case "probe":
                await answerPresenceProbeAsync(from, to, chat, client, args.PRESENCE_MESSAGE);

                return;

            default:
                break;
            }

            if (chat != null)
            {
                chat.status   = args.PRESENCE_MESSAGE.STATUS;
                chat.presence = args.PRESENCE_MESSAGE.PRESENCE;
                ChatDBManager.INSTANCE.setChat(chat, false, true);
            }
            else
            {
                Logger.Warn("Received a presence message for an unknown chat from: " + from + ", to: " + to);
            }
        }
Exemplo n.º 19
0
        public void setChat(ChatTable chat, bool delete, bool triggerChatChanged)
        {
            if (delete)
            {
                dB.Delete(chat);
                OmemoSignalKeyDBManager.INSTANCE.deleteFingerprints(chat.id);
            }
            else
            {
                dB.InsertOrReplace(chat);
            }

            if (triggerChatChanged)
            {
                onChatChanged(chat, delete);
            }
        }
Exemplo n.º 20
0
        /// <summary>
        /// Checks if the user input is valid.
        /// </summary>
        /// <returns>Returns whether the user input is valid.</returns>
        private bool checkUserInputAndWarn()
        {
            XMPPClient client = accountSelection_asc.getSelectedAccount();

            if (client == null)
            {
                accountSelection_asc.showErrorMessage("No account selected!");
                return(false);
            }

            if (!client.isConnected())
            {
                accountSelection_asc.showErrorMessage("Account not connected!");
                return(false);
            }

            if (string.IsNullOrWhiteSpace(nick_tbx.Text))
            {
                accountSelection_asc.showErrorMessage("No nickname given!");
                return(false);
            }

            if (string.IsNullOrWhiteSpace(roomName_tbx.Text))
            {
                accountSelection_asc.showErrorMessage("No room name given!");
                return(false);
            }

            if (!Utils.isValidServerAddress(server_asbx.Text))
            {
                accountSelection_asc.showErrorMessage("Invalid server!");
                return(false);
            }

            string roomJid = roomName_tbx.Text + '@' + server_asbx.Text;

            if (ChatDBManager.INSTANCE.doesChatExist(ChatTable.generateId(roomJid, client.getXMPPAccount().getIdAndDomain())))
            {
                accountSelection_asc.showErrorMessage("Chat already exists!");
                return(false);
            }

            accountSelection_asc.hideErrorMessage();
            return(true);
        }
Exemplo n.º 21
0
        public void loadDummyContent()
        {
            Chat = new ChatTable()
            {
                chatJabberId  = "*****@*****.**",
                userAccountId = "*****@*****.**",
                chatType      = ChatType.CHAT,
                presence      = Presence.Away
            };

            addDummyMessage("Hi", Chat.userAccountId, MessageState.READ);
            addDummyMessage("Hey, what's up?", Chat.chatJabberId, MessageState.SEND);
            addDummyMessage("That's a great app.", Chat.userAccountId, MessageState.READ);
            message_tbx.Text = "Yes, its awesome :D !";

            invertedListView_lstv.Visibility = Visibility.Visible;
            loading_ldng.IsLoading           = false;
        }
        void ReleaseDesignerOutlets()
        {
            if (ChatMessageAuthor != null)
            {
                ChatMessageAuthor.Dispose();
                ChatMessageAuthor = null;
            }

            if (ChatMessageText != null)
            {
                ChatMessageText.Dispose();
                ChatMessageText = null;
            }

            if (ChatTable != null)
            {
                ChatTable.Dispose();
                ChatTable = null;
            }

            if (MessageTextField != null)
            {
                MessageTextField.Dispose();
                MessageTextField = null;
            }

            if (PeerId != null)
            {
                PeerId.Dispose();
                PeerId = null;
            }

            if (PeerName != null)
            {
                PeerName.Dispose();
                PeerName = null;
            }

            if (PeersTable != null)
            {
                PeersTable.Dispose();
                PeersTable = null;
            }
        }
Exemplo n.º 23
0
        public void UpdateViewChat(ChatTable chat, MUCChatInfoTable muc)
        {
            if (!(chat is null))
            {
                // Do not reload chat messages, if for example only the presence changes:
                if (!isDummy && (this.chat is null || !string.Equals(chat.id, this.chat.id)))
                {
                    LoadChatMessages(chat, muc);
                }
                this.chat = chat;
                if (isDummy)
                {
                    AccountText = chat.userAccountId;
                }

                if (chat.chatType == ChatType.MUC)
                {
                    OmemoVisability = Visibility.Collapsed;

                    if (muc.state != MUCState.ENTERD && muc.state != MUCState.ENTERING)
                    {
                        EnterMucVisability = Visibility.Visible;
                        LeaveMucVisability = Visibility.Collapsed;
                    }
                    else
                    {
                        EnterMucVisability = Visibility.Collapsed;
                        LeaveMucVisability = Visibility.Visible;
                    }
                }
                else
                {
                    NameText           = chat.chatJabberId ?? "";
                    StatusText         = chat.chatState ?? chat.status ?? "";
                    EnterMucVisability = Visibility.Collapsed;
                    LeaveMucVisability = Visibility.Collapsed;
                    OmemoEnabled       = chat.omemoEnabled;
                    OmemoVisability    = Visibility.Visible;
                }

                // Account image:
                AccountPresence = chat.presence;
                AccountInitials = "\uE77B";
            }
Exemplo n.º 24
0
        private void showChatMessages(ChatTable newChat, ChatTable oldChat)
        {
            if (newChat != null)
            {
                // Only show chat messages if the chat changed:
                if (oldChat != null && Equals(newChat.id, oldChat.id))
                {
                    return;
                }

                // Show loading:
                loading_ldng.IsLoading           = true;
                invertedListView_lstv.Visibility = Visibility.Collapsed;

                // Create a copy to prevent multi threading issues:
                ChatTable chatCpy = newChat;

                Task.Run(async() =>
                {
                    // Mark all unread messages as read for this chat:
                    ChatDBManager.INSTANCE.markAllMessagesAsRead(chatCpy.id);
                    // Remove notification group:
                    ToastHelper.removeToastGroup(chatCpy.id);

                    // Show all chat messages:
                    List <ChatMessageDataTemplate> msgs = new List <ChatMessageDataTemplate>();
                    foreach (ChatMessageTable msg in ChatDBManager.INSTANCE.getAllChatMessagesForChat(chatCpy.id))
                    {
                        msgs.Add(new ChatMessageDataTemplate()
                        {
                            message = msg,
                            chat    = chatCpy
                        });
                    }
                    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                    {
                        chatMessages.Clear();
                        chatMessages.AddRange(msgs);
                        invertedListView_lstv.Visibility = Visibility.Visible;
                        loading_ldng.IsLoading           = false;
                    });
                });
            }
        }
Exemplo n.º 25
0
        private async Task <bool> UpdateBookmarksAsync(ChatTable chat, XMPPClient client)
        {
            List <ConferenceItem> conferences = MUCDBManager.INSTANCE.getXEP0048ConferenceItemsForAccount(client.getXMPPAccount().getBareJid());
            MessageResponseHelperResult <IQMessage> result = await client.PUB_SUB_COMMAND_HELPER.setBookmars_xep_0048Async(conferences);

            if (string.Equals(result.RESULT.TYPE, IQMessage.RESULT))
            {
                return(true);
            }
            if (result.RESULT is IQErrorMessage errorMessage)
            {
                Logger.Warn("Failed to update XEP-0048 Bookmarks: " + errorMessage.ERROR_OBJ.ToString());
            }
            else
            {
                Logger.Warn("Failed to update XEP-0048 Bookmarks: " + result.RESULT.TYPE);
            }
            return(false);
        }
 private void AddDummyMessage(ChatTable chat, string msg, string fromUser, MessageState state, bool isEncrypted, bool isImage)
 {
     MODEL.CHAT_MESSAGES.Add(new DataTemplates.ChatMessageDataTemplate
     {
         Chat    = chat,
         Message = new ChatMessageTable
         {
             message        = msg,
             chatId         = chat.id,
             fromUser       = fromUser,
             date           = DateTime.Now,
             state          = state,
             type           = MessageMessage.TYPE_CHAT,
             isImage        = isImage,
             isDummyMessage = true,
             isEncrypted    = isEncrypted
         }
     });
 }
Exemplo n.º 27
0
 private void AddDummyMessage(ChatTable chat, string msg, string fromUser, MessageState state, bool isEncrypted, bool isImage)
 {
     /*MODEL.CHAT_MESSAGES.Add(new DataTemplates.ChatMessageDataTemplate
      * {
      *  Chat = chat,
      *  Message = new ChatMessageTable
      *  {
      *      message = msg,
      *      chatId = chat.id,
      *      fromUser = fromUser,
      *      date = DateTime.Now,
      *      state = state,
      *      type = MessageMessage.TYPE_CHAT,
      *      isImage = isImage,
      *      isDummyMessage = true,
      *      isEncrypted = isEncrypted
      *  }
      * });*/
 }
        private async Task AddIoTDevice(string deviceBareJid, XMPPClient client)
        {
            // Run it in a new Task since we want to access the DB and this is a blocking action.
            await Task.Run(async() =>
            {
                // Add to DB:
                ChatTable chat = new ChatTable(deviceBareJid, client.getXMPPAccount().getBareJid())
                {
                    chatType     = ChatType.IOT_DEVICE,
                    isChatActive = true
                };
                ChatDBManager.INSTANCE.setChat(chat, false, true);

                // Add to the roster:
                await client.GENERAL_COMMAND_HELPER.addToRosterAsync(deviceBareJid);

                // Add as a PEP node:
                // TODO
            });
        }
        private async Task SetChatInRosterAsync(XMPPClient client, ChatTable chat, bool inRoster)
        {
            if (chat.inRoster != inRoster)
            {
                await Task.Run(() =>
                {
                    chat.inRoster = inRoster;
                    MODEL.UpdateView(chat);
                    ChatDBManager.INSTANCE.setChat(chat, false, true);
                }).ConfAwaitFalse();
            }

            if (inRoster)
            {
                await client.GENERAL_COMMAND_HELPER.addToRosterAsync(chat.chatJabberId).ConfAwaitFalse();
            }
            else
            {
                await client.GENERAL_COMMAND_HELPER.removeFromRosterAsync(chat.chatJabberId).ConfAwaitFalse();
            }
        }
Exemplo n.º 30
0
        public static void showChatTextImageToast(ChatMessageTable msg, ChatTable chat)
        {
            var toastContent = new ToastContent()
            {
                Visual = new ToastVisual()
                {
                    BindingGeneric = new ToastBindingGeneric()
                    {
                        Children =
                        {
                            new AdaptiveText()
                            {
                                Text         = chat.chatJabberId,
                                HintMaxLines = 1
                            },
                            new AdaptiveText()
                            {
                                Text = "You received an image!"
                            }
                        },
                        HeroImage = new ToastGenericHeroImage()
                        {
                            Source = msg.message
                        },
                        AppLogoOverride = new ToastGenericAppLogo()
                        {
                            Source   = chat.chatType == ChatType.CHAT ? DEFAULT_USER_IMAGE_PATH : DEFAULT_MUC_IMAGE_PATH,
                            HintCrop = ToastGenericAppLogoCrop.Default
                        }
                    }
                },
                Actions          = getActions(msg, chat),
                DisplayTimestamp = msg.date,
                Launch           = new ChatToastActivation(chat.id, false).generate()
            };

            popToast(toastContent, chat);
        }