//--------------------------------------------------------Set-, Get- Methods:---------------------------------------------------------\\ #region --Set-, Get- Methods-- #endregion //--------------------------------------------------------Misc Methods:---------------------------------------------------------------\\ #region --Misc Methods (Public)-- #endregion #region --Misc Methods (Private)-- private void loadInvitation() { if (!invitationLoaded && ChatMessage != null) { invitationLoaded = true; main_expdr.Visibility = Visibility.Collapsed; error_grid.Visibility = Visibility.Collapsed; loading_grid.Visibility = Visibility.Visible; string chatMessageId = ChatMessage.id; Task.Run(async() => { MUCDirectInvitationTable invitationTable = ChatDBManager.INSTANCE.getMUCDirectInvitation(chatMessageId); await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { Invitation = invitationTable; showInvitation(); }); }); } }
private async void C_NewChatMessage(XMPPClient client, XMPP_API.Classes.Network.Events.NewChatMessageEventArgs args) { MessageMessage msg = args.getMessage(); // Handel MUC room subject messages: if (msg is MUCRoomSubjectMessage) { MUCHandler.INSTANCE.onMUCRoomSubjectMessage(msg as MUCRoomSubjectMessage); return; } string from = Utils.getBareJidFromFullJid(msg.getFrom()); string to = Utils.getBareJidFromFullJid(msg.getTo()); string id; if (msg.CC_TYPE == CarbonCopyType.SENT) { id = ChatTable.generateId(to, from); } else { id = ChatTable.generateId(from, to); } // Check if device id is valid and if, decrypt the OMEMO messages: if (msg is OmemoMessageMessage omemoMessage) { OmemoHelper helper = client.getOmemoHelper(); if (helper is null) { C_OmemoSessionBuildError(client, new OmemoSessionBuildErrorEventArgs(id, OmemoSessionBuildError.KEY_ERROR, new List <OmemoMessageMessage> { omemoMessage })); Logger.Error("Failed to decrypt OMEMO message - OmemoHelper is null"); return; } else if (!client.getXMPPAccount().checkOmemoKeys()) { C_OmemoSessionBuildError(client, new OmemoSessionBuildErrorEventArgs(id, OmemoSessionBuildError.KEY_ERROR, new List <OmemoMessageMessage> { omemoMessage })); Logger.Error("Failed to decrypt OMEMO message - keys are corrupted"); return; } else if (!await omemoMessage.decryptAsync(client.getOmemoHelper(), client.getXMPPAccount().omemoDeviceId)) { return; } } ChatTable chat = ChatDBManager.INSTANCE.getChat(id); bool chatChanged = false; // Spam detection: if (Settings.getSettingBoolean(SettingsConsts.SPAM_DETECTION_ENABLED)) { if (Settings.getSettingBoolean(SettingsConsts.SPAM_DETECTION_FOR_ALL_CHAT_MESSAGES) || chat is null) { if (SpamDBManager.INSTANCE.isSpam(msg.MESSAGE)) { Logger.Warn("Received spam message from " + from); return; } } } if (chat is null) { chatChanged = true; chat = new ChatTable(from, to) { lastActive = msg.getDelay(), chatType = string.Equals(msg.TYPE, MessageMessage.TYPE_GROUPCHAT) ? ChatType.MUC : ChatType.CHAT }; } ChatMessageTable message = new ChatMessageTable(msg, chat); // Handle MUC invite messages: if (msg is DirectMUCInvitationMessage) { DirectMUCInvitationMessage inviteMessage = msg as DirectMUCInvitationMessage; bool doesRoomExist = ChatDBManager.INSTANCE.doesMUCExist(ChatTable.generateId(inviteMessage.ROOM_JID, msg.getTo())); bool doesOutstandingInviteExist = ChatDBManager.INSTANCE.doesOutstandingMUCInviteExist(id, inviteMessage.ROOM_JID); if (doesRoomExist && doesOutstandingInviteExist) { return; } MUCDirectInvitationTable inviteTable = new MUCDirectInvitationTable(inviteMessage, message.id); ChatDBManager.INSTANCE.setMUCDirectInvitation(inviteTable); } bool isMUCMessage = string.Equals(MessageMessage.TYPE_GROUPCHAT, message.type); ChatMessageTable existingMessage = ChatDBManager.INSTANCE.getChatMessageById(message.id); bool doesMessageExist = existingMessage != null; if (isMUCMessage) { MUCChatInfoTable mucInfo = MUCDBManager.INSTANCE.getMUCInfo(chat.id); if (mucInfo != null) { if (Equals(message.fromUser, mucInfo.nickname)) { // Filter MUC messages that already exist: // ToDo: Allow MUC messages being edited and detect it if (doesMessageExist) { return; } else { message.state = MessageState.SEND; } } else { if (doesMessageExist) { message.state = existingMessage.state; } } } } if (chat.lastActive.CompareTo(msg.getDelay()) < 0) { chatChanged = true; chat.lastActive = msg.getDelay(); } if (chatChanged) { ChatDBManager.INSTANCE.setChat(chat, false, true); } // Send XEP-0184 (Message Delivery Receipts) reply: if (msg.RECIPT_REQUESTED && id != null && !Settings.getSettingBoolean(SettingsConsts.DONT_SEND_CHAT_MESSAGE_RECEIVED_MARKERS)) { await Task.Run(async() => { DeliveryReceiptMessage receiptMessage = new DeliveryReceiptMessage(client.getXMPPAccount().getFullJid(), from, msg.ID); await client.sendAsync(receiptMessage); }); } ChatDBManager.INSTANCE.setChatMessage(message, !doesMessageExist, doesMessageExist && !isMUCMessage); // Show toast: if (!doesMessageExist && !chat.muted) { await Task.Run(() => { try { switch (msg.TYPE) { case MessageMessage.TYPE_GROUPCHAT: case MessageMessage.TYPE_CHAT: if (!message.isCC) { if (message.isImage) { ToastHelper.showChatTextImageToast(message, chat); } else { ToastHelper.showChatTextToast(message, chat); } } break; default: break; } } catch (Exception e) { Logger.Error("Failed to send toast notification!", e); } }); } }
public void setMUCDirectInvitation(MUCDirectInvitationTable invite) { dB.InsertOrReplace(invite); }
public AddMucDialog(MUCDirectInvitationTable invite, string accountBareJid) : this() { VIEW_MODEL.FromDirectInvite(invite); accounts_asc.SelectAccount(accountBareJid); }
public void FromDirectInvite(MUCDirectInvitationTable invite) { MODEL.Password = invite.roomPassword; MODEL.RoomBareJid = invite.roomJid; }
private void C_NewChatMessage(XMPPClient client, XMPP_API.Classes.Network.Events.NewChatMessageEventArgs args) { MessageMessage msg = args.getMessage(); // Handel MUC room subject messages: if (msg is MUCRoomSubjectMessage) { MUCHandler.INSTANCE.onMUCRoomSubjectMessage(msg as MUCRoomSubjectMessage); return; } string from = Utils.getBareJidFromFullJid(msg.getFrom()); // Check if device id is valid and if, decrypt the OMEMO messages: if (msg is OmemoMessageMessage omemoMessage) { // Decryption failed: if (!omemoMessage.decrypt(client.getOmemoHelper(), client.getXMPPAccount().omemoDeviceId)) { return; } } string to = Utils.getBareJidFromFullJid(msg.getTo()); string id; if (msg.CC_TYPE == CarbonCopyType.SENT) { id = ChatTable.generateId(to, from); } else { id = ChatTable.generateId(from, to); } ChatTable chat = ChatDBManager.INSTANCE.getChat(id); bool chatChanged = false; if (chat == null) { chatChanged = true; chat = new ChatTable() { id = id, chatJabberId = from, userAccountId = to, ask = null, inRoster = false, lastActive = msg.getDelay(), muted = false, presence = Presence.Unavailable, status = null, subscription = null, chatType = Equals(msg.TYPE, MessageMessage.TYPE_GROUPCHAT) ? ChatType.MUC : ChatType.CHAT, }; } ChatMessageTable message = new ChatMessageTable(msg, chat); // Handle MUC invite messages: if (msg is DirectMUCInvitationMessage) { DirectMUCInvitationMessage inviteMessage = msg as DirectMUCInvitationMessage; bool doesRoomExist = ChatDBManager.INSTANCE.doesMUCExist(ChatTable.generateId(inviteMessage.ROOM_JID, msg.getTo())); bool doesOutstandingInviteExist = ChatDBManager.INSTANCE.doesOutstandingMUCInviteExist(id, inviteMessage.ROOM_JID); if (doesRoomExist && doesOutstandingInviteExist) { return; } MUCDirectInvitationTable inviteTable = new MUCDirectInvitationTable(inviteMessage, message.id); ChatDBManager.INSTANCE.setMUCDirectInvitation(inviteTable); } bool isMUCMessage = string.Equals(MessageMessage.TYPE_GROUPCHAT, message.type); ChatMessageTable existingMessage = ChatDBManager.INSTANCE.getChatMessageById(message.id); bool doesMessageExist = existingMessage != null; if (isMUCMessage) { MUCChatInfoTable mucInfo = MUCDBManager.INSTANCE.getMUCInfo(chat.id); if (mucInfo != null) { if (Equals(message.fromUser, mucInfo.nickname)) { // Filter MUC messages that already exist: // ToDo: Allow MUC messages being edited and detect it if (doesMessageExist) { return; } else { message.state = MessageState.SEND; } } else { if (doesMessageExist) { message.state = existingMessage.state; } } } } if (chat.lastActive.CompareTo(msg.getDelay()) < 0) { chatChanged = true; chat.lastActive = msg.getDelay(); } if (chatChanged) { ChatDBManager.INSTANCE.setChat(chat, false, true); } // Send XEP-0184 (Message Delivery Receipts) reply: if (msg.RECIPT_REQUESTED && id != null && !Settings.getSettingBoolean(SettingsConsts.DONT_SEND_CHAT_MESSAGE_RECEIVED_MARKERS)) { Task.Run(async() => { DeliveryReceiptMessage receiptMessage = new DeliveryReceiptMessage(client.getXMPPAccount().getIdDomainAndResource(), from, msg.ID); await client.sendAsync(receiptMessage, true); }); } ChatDBManager.INSTANCE.setChatMessage(message, !doesMessageExist, doesMessageExist && !isMUCMessage); // Show toast: if (!doesMessageExist && !chat.muted) { Task.Run(() => { try { if (!msg.toasted) { switch (msg.TYPE) { case MessageMessage.TYPE_GROUPCHAT: case MessageMessage.TYPE_CHAT: if (!message.isCC) { if (message.isEncrypted) { ToastHelper.showChatTextEncryptedToast(message, chat); } else if (message.isImage) { ToastHelper.showChatTextImageToast(message, chat); } else { ToastHelper.showChatTextToast(message, chat); } } break; default: break; } msg.setToasted(); } } catch (Exception e) { Logger.Error("Failed to send toast notification!", e); } }); } }
public void setMUCDirectInvitation(MUCDirectInvitationTable invite) { update(invite); }