/// <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);
        }