/// <summary> /// Поиск ещё не прочитанных от всех аккаунтов сообщений. /// </summary> /// <param name="unreadedMsgsInfo">Краткая информация по /// непрочитанным сообщениям.</param> protected override void ChatFerm_onUnreadMessagesCount(List <idxLong> unreadedMsgsInfo) { Logger.Debug("Начинаем получать и обрабатывать информацию о ещё " + "не прочитанных сообщениях"); // Здесь мы сортируем по аккаунтам непрочитанные сообщения. foreach (var msgInfo in unreadedMsgsInfo) { foreach (var acc in Accounts) { if (msgInfo.idx == acc.idx) { acc.CountNotReadedMessages = msgInfo.value; } } } // Здесь мы находим сообщения связанные с перепиской по конкретному макету. string query = $"select * from chatmsg where " + $"(doc_id = {CurrentDoc.idx} and doc_connection_id = " + $"{CurrentDoc.connection.idx} and from_id <> " + $"{DBConnector.CurrentSintezUser.idx} and readed = 'False')"; List <ChatMsgRec> chats = ChatFerm.getMessages(query); //dbrec.loadRange<ChatMsgRec>( //query, DBConnector.Sintez_Connection); foreach (var item in chats) { Messages.Add(item); item.readed = true; item.save(); } Logger.Debug("Закончили обработку информации о ещё " + "не прочитанных сообщениях"); }
/// <summary> /// Поиск ещё не прочитанных от всех аккаунтов сообщений. /// </summary> /// <param name="unreadedMsgsInfo">Краткая информация по /// непрочитанным сообщениям.</param> protected virtual void ChatFerm_onUnreadMessagesCount(List <idxLong> unreadedMsgsInfo) { Logger.Debug("Начинаем получать и обрабатывать информацию о ещё " + "не прочитанных сообщениях"); // Здесь мы сортируем по аккаунтам непрочитанные сообщения. foreach (var msgInfo in unreadedMsgsInfo) { foreach (var acc in Accounts) { if (msgInfo.idx == acc.idx) { acc.CountNotReadedMessages = msgInfo.value; } } } // Здесь мы находим сообщения связанные с перепиской по конкретному аккаунту. if (Talker == null) { return; } System.Threading.Tasks.Task.Run(() => { System.Threading.Thread.Sleep(2000); if (Talker != null) { Talker.CountNotReadedMessages = 0; } }); string query = $"select * from chatmsg where " + $"(from_id = {Talker.idx} and to_id = " + $"{DBConnector.CurrentSintezUser.idx} and readed = 'False')"; List <ChatMsgRec> chats = ChatFerm.getMessages(query); //dbrec.loadRange<ChatMsgRec>( //query, DBConnector.Sintez_Connection); foreach (var item in chats) { Messages.Add(item); item.readed = true; item.save(); } Logger.Debug("Закончили обработку информации о ещё " + "не прочитанных сообщениях"); }
/// <summary> /// Процедура отправления сообщения. /// TODO: ключевой метод. Попробовать порефакторить его. /// </summary> /// <param name="message">Сообщение для отправки</param> /// <returns>true - сообщение отправлено успешно, /// false - сообщение отправлено неуспешно.</returns> public virtual bool SendMessage(SintezUserRec toAccount, string message, bool isAttentionMessage, string file = "") { /*Находим в сообщении пометки, указывающие на аккаунт назначения, * задачу или макет*/ string design = Regex.Match(message, @"(?<=\%\"").*?(?=\"")").Value; message = message.Replace($@"%""{design}""", ""); string pointedAccount = Regex.Match(message, @"(?<=\$\"").*?(?=\"")").Value; message = message.Replace($@"$""{pointedAccount}""", ""); string issue = Regex.Match(message, @"(?<=\#\"").*?(?=\"")").Value; message = message.Replace($@"#""{issue}""", ""); // Формируем и сохраняем сообщение ChatMsgRec sendedMessage = new ChatMsgRec() { //from_id = DBConnector.CurrentSintezUser.idx, //message = message }; if (pointedAccount != "") { sendedMessage.to_id = Convert.ToInt64(Regex.Match(pointedAccount, @"(?<=\()\d*(?=\)$)").Value); } if (toAccount != null) { sendedMessage.to_id = toAccount.idx; } if (issue != "") { sendedMessage.goal_id = Convert.ToInt64(Regex.Match(issue, @"(?<=\()\d*(?=\)$)").Value); } // TODO: сдесь потенциальная ошибка, т.к. мы может задать несколько // макетов и будут проблемы. if (design != "") { // TODO: - добавить привязку к базе данных, в которой находится // таблица с макетом string s = Regex.Match(design, @"(?<=\()\d*\|\d*(?=\))").Value; string[] s1 = s.Split('|'); sendedMessage.doc_id = Convert.ToInt64(s1[0]); sendedMessage.doc_connection_id = Convert.ToInt64(s1[1]); } else if (CurrentDoc != null) { sendedMessage.doc_id = CurrentDoc.baseid; sendedMessage.doc_connection_id = CurrentDoc.connection.connector_id;//.ConnectionId; } if (!string.IsNullOrEmpty(file)) { sendedMessage.filename = (new System.IO.FileInfo(file)).Name; } if (sendedMessage.to_id == 0) { Logger.MsgBox("Введите аккаунт, которому будет адресовано сообщение"); return(false); } sendedMessage.attention = isAttentionMessage; Messages.Add(sendedMessage); //sendedMessage.save(); ChatFerm.sendMessage(sendedMessage); // загружаем файл if (!string.IsNullOrEmpty(file)) { sendedMessage.LoadContent(file); } return(true); }