public ChatModel() { Logger.Debug("Создаём ChatModel"); Messages = new ObservableCollection <ChatMsgRec>(); Accounts = new ObservableCollection <SintezUserRec>(); Issues = new ObservableCollection <GoalRec>(); Designes = new ObservableCollection <DocumentRec>(); Manager = new SintezUserRec { idx = 1, CountNotReadedMessages = 0, login = "******" }; //List<SintezUserRec> users = dbrec.loadRange<SintezUserRec>( // "select * from sintezuser", DBConnector.Sintez_Connection); //Accounts = new ObservableCollection<SintezUserRec>(users); //Accounts.Remove(Manager); /*List<GoalRec> goals = dbrec.loadRange<GoalRec>( * "select * from goals where closetype=0", DBConnector.Seller_Connection); * Issues = new ObservableCollection<GoalRec>(goals);*/ //ChatFerm.onUnreadMessagesCount += ChatFerm_onUnreadMessagesCount; Logger.Debug("Создали ChatModel"); }
/// <summary> /// Процедура поиска сообщений привязанных к аккаунту. /// </summary> /// <param name="userRec"></param> public virtual void MessagesRelatedWithAccount(SintezUserRec userRec) { lastQuery = $"select * from chatmsg where " + $"(from_id = {userRec.idx} and to_id = {DBConnector.CurrentSintezUser.idx}) or " + $"(to_id = {userRec.idx} and from_id = {DBConnector.CurrentSintezUser.idx})"; //List<ChatMsgRec> chats = dbrec.loadRange<ChatMsgRec>( // lastQuery, DBConnector.Sintez_Connection); Messages = new ObservableCollection <ChatMsgRec>();//(chats); foreach (var item in Messages) { if (item.readed == false && item.to_id == Manager.idx) { item.readed = true; item.save(); } } }
/// <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); }