bool FileWriter::writeMessage(const Message &AMessage, const QString &ASaveMode, bool ADirectionIn) { if (isOpened() && ASaveMode!=ARCHIVE_SAVE_FALSE) { Jid contactJid = AMessage.from(); FGroupchat |= AMessage.type()==Message::GroupChat; if (!FGroupchat || contactJid.hasResource()) { FMessagesCount++; FXmlWriter->writeStartElement(ADirectionIn ? "from" : "to"); int secs = FHeader.start.secsTo(AMessage.dateTime()); if (secs >= 0) FXmlWriter->writeAttribute("secs",QString::number(secs)); else FXmlWriter->writeAttribute("utc",DateTime(AMessage.dateTime()).toX85UTC()); if (FGroupchat) FXmlWriter->writeAttribute("name",contactJid.resource()); if (ASaveMode == ARCHIVE_SAVE_BODY) FXmlWriter->writeTextElement("body",AMessage.body()); else writeElementChilds(AMessage.stanza().element()); FXmlWriter->writeEndElement(); FXmlFile->flush(); checkLimits(); return true; } } return false; }