private void C_OmemoSessionBuildError(XMPPClient client, XMPP_API.Classes.Events.OmemoSessionBuildErrorEventArgs args) { Task.Run(() => { ChatTable chat = ChatDBManager.INSTANCE.getChat(ChatTable.generateId(args.CHAT_JID, client.getXMPPAccount().getBareJid())); if (!(chat is null)) { // Add an error chat message: ChatMessageTable msg = new ChatMessageTable() { id = ChatMessageTable.generateErrorMessageId(AbstractMessage.getRandomId(), chat.id), chatId = chat.id, date = DateTime.Now, fromUser = args.CHAT_JID, isImage = false, message = "Failed to encrypt and send " + args.MESSAGES.Count + " OMEMO message(s) with:\n" + args.ERROR, state = MessageState.UNREAD, type = MessageMessage.TYPE_ERROR }; ChatDBManager.INSTANCE.setChatMessage(msg, true, false); // Set chat messages to encrypted failed: setOmemoChatMessagesSendFailed(args.MESSAGES, chat); } }); }
//--------------------------------------------------------Events:---------------------------------------------------------------------\\ #region --Events-- private void OnOmemoSessionBuildError(XMPPClient xmppClient, OmemoSessionBuildErrorEventArgs args) { Task.Run(() => { ChatModel chat; using (SemaLock semaLock = DataCache.INSTANCE.NewChatSemaLock()) { chat = DataCache.INSTANCE.GetChat(xmppClient.getXMPPAccount().getBareJid(), args.CHAT_JID, semaLock); } if (!(chat is null)) { // Add an error chat message: ChatMessageModel msg = new ChatMessageModel() { chatId = chat.id, date = DateTime.Now, fromBareJid = args.CHAT_JID, isCC = false, isDummyMessage = false, isEncrypted = false, isFavorite = false, isImage = false, message = "Failed to encrypt and send " + args.MESSAGES.Count + " OMEMO message(s) with:\n" + args.ERROR, stableId = AbstractMessage.getRandomId(), state = MessageState.UNREAD, type = MessageMessage.TYPE_ERROR }; DataCache.INSTANCE.AddChatMessage(msg, chat); // Set chat messages to encrypted failed: SetOmemoChatMessagesSendFailed(args.MESSAGES, chat); } }); }
private async Task OnMucErrorMessageAsync(XMPPClient client, MUCErrorMessage errorMessage) { string room = Utils.getBareJidFromFullJid(errorMessage.getFrom()); if (room is null) { return; } ChatModel chat; using (SemaLock semaLock = DataCache.INSTANCE.NewChatSemaLock()) { chat = DataCache.INSTANCE.GetChat(client.getXMPPAccount().getBareJid(), room, semaLock); } if (chat is null || chat.muc is null) { return; } Logger.Error("Received an error message for MUC: " + chat.bareJid + "\n" + errorMessage.ERROR_MESSAGE); StopMucJoinHelper(chat); if (chat.muc.state != MucState.DISCONNECTED) { await SendMucLeaveMessageAsync(client, chat.muc); } using (SemaLock semaLock = chat.muc.NewSemaLock()) { switch (errorMessage.ERROR_CODE) { // No access - user got baned: case 403: chat.muc.state = MucState.BANED; AddChatInfoMessage(chat, room, "Unable to join room!\nYou are baned from this room."); return; default: chat.muc.state = MucState.ERROR; break; } chat.muc.Update(); } // Add an error chat message: ChatMessageModel msg = new ChatMessageModel() { stableId = errorMessage.ID ?? AbstractMessage.getRandomId(), chatId = chat.id, date = DateTime.Now, fromBareJid = Utils.getBareJidFromFullJid(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 }; DataCache.INSTANCE.AddChatMessage(msg, chat); }
private void addChatInfoMessage(string chatId, string fromUser, string message) { ChatMessageTable msg = new ChatMessageTable { id = ChatMessageTable.generateId(AbstractMessage.getRandomId(), chatId), chatId = chatId, date = DateTime.Now, fromUser = fromUser, isImage = false, message = message, state = MessageState.UNREAD, type = TYPE_CHAT_INFO }; ChatDBManager.INSTANCE.setChatMessage(msg, true, false); }
private void AddChatInfoMessage(ChatModel chat, string fromBareJid, string message) { ChatMessageModel msg = new ChatMessageModel { chatId = chat.id, fromBareJid = fromBareJid, fromNickname = fromBareJid, date = DateTime.Now, isImage = false, message = message, state = MessageState.UNREAD, type = TYPE_CHAT_INFO, stableId = AbstractMessage.getRandomId() }; DataCache.INSTANCE.AddChatMessage(msg, chat); }
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); } } } }