1 /*
2 * %kadu copyright begin%
3 * Copyright 2012, 2013 Bartosz Brachaczek (b.brachaczek@gmail.com)
4 * Copyright 2011, 2012, 2013, 2014, 2015 Rafał Przemysław Malinowski (rafal.przemyslaw.malinowski@gmail.com)
5 * %kadu copyright end%
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License as
9 * published by the Free Software Foundation; either version 2 of
10 * the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include "message-render-info.h"
22
23 #include "core/core.h"
24 #include "gui/configuration/chat-configuration-holder.h"
25 #include "message/message-html-renderer-service.h"
26 #include "misc/date-time.h"
27 #include "parser/parser.h"
28
getMessage(MessageHtmlRendererService * messageHtmlRendererService,const ParserData * const object)29 static QString getMessage(MessageHtmlRendererService *messageHtmlRendererService, const ParserData * const object)
30 {
31 const MessageRenderInfo * const messageRenderInfo = dynamic_cast<const MessageRenderInfo * const>(object);
32 if (messageRenderInfo)
33 return messageHtmlRendererService->renderMessage(messageRenderInfo->message());
34 else
35 return QString();
36 }
37
getMessageId(const ParserData * const object)38 static QString getMessageId(const ParserData * const object)
39 {
40 const MessageRenderInfo * const messageRenderInfo = dynamic_cast<const MessageRenderInfo * const>(object);
41 if (messageRenderInfo)
42 return messageRenderInfo->message().id();
43 return QString();
44 }
45
getMessageStatus(const ParserData * const object)46 static QString getMessageStatus(const ParserData * const object)
47 {
48 const MessageRenderInfo * const messageRenderInfo = dynamic_cast<const MessageRenderInfo * const>(object);
49 if (messageRenderInfo)
50 return QString::number(messageRenderInfo->message().status());
51 return QString();
52 }
53
getBackgroundColor(const ParserData * const object)54 static QString getBackgroundColor(const ParserData * const object)
55 {
56 const MessageRenderInfo * const messageRenderInfo = dynamic_cast<const MessageRenderInfo * const>(object);
57 if (messageRenderInfo)
58 return messageRenderInfo->backgroundColor();
59 else
60 return QString();
61 }
62
getFontColor(const ParserData * const object)63 static QString getFontColor(const ParserData * const object)
64 {
65 const MessageRenderInfo * const messageRenderInfo = dynamic_cast<const MessageRenderInfo * const>(object);
66 if (messageRenderInfo)
67 return messageRenderInfo->fontColor();
68 else
69 return QString();
70 }
71
getNickColor(const ParserData * const object)72 static QString getNickColor(const ParserData * const object)
73 {
74 const MessageRenderInfo * const messageRenderInfo = dynamic_cast<const MessageRenderInfo * const>(object);
75 if (messageRenderInfo)
76 return messageRenderInfo->nickColor();
77 else
78 return QString();
79 }
80
getSentDate(bool niceDateFormat,const ParserData * const object)81 static QString getSentDate(bool niceDateFormat, const ParserData * const object)
82 {
83 const MessageRenderInfo * const messageRenderInfo = dynamic_cast<const MessageRenderInfo * const>(object);
84 if (messageRenderInfo && messageRenderInfo->showServerTime())
85 return printDateTime(niceDateFormat, messageRenderInfo->message().sendDate());
86 else
87 return QString();
88 }
89
getReceivedDate(bool niceDateFormat,const ParserData * const object)90 static QString getReceivedDate(bool niceDateFormat, const ParserData * const object)
91 {
92 const MessageRenderInfo * const messageRenderInfo = dynamic_cast<const MessageRenderInfo * const>(object);
93 if (messageRenderInfo)
94 return printDateTime(niceDateFormat, messageRenderInfo->message().receiveDate());
95 else
96 return QString();
97 }
98
getSeparator(const ParserData * const object)99 static QString getSeparator(const ParserData * const object)
100 {
101 const MessageRenderInfo * const messageRenderInfo = dynamic_cast<const MessageRenderInfo * const>(object);
102 if (!messageRenderInfo)
103 return QString();
104
105 int separatorSize = messageRenderInfo->separatorSize();
106 if (separatorSize)
107 return "<div style=\"margin: 0; margin-top:" + QString::number(separatorSize) + "px\"></div>";
108 else
109 return QString();
110 }
111
registerParserTags(Parser * parser,ChatConfigurationHolder * chatConfigurationHolder,MessageHtmlRendererService * messageHtmlRendererService)112 void MessageRenderInfo::registerParserTags(Parser *parser, ChatConfigurationHolder *chatConfigurationHolder, MessageHtmlRendererService *messageHtmlRendererService)
113 {
114 parser->registerObjectTag("message", [messageHtmlRendererService](const ParserData * const object){ return getMessage(messageHtmlRendererService, object); });
115 parser->registerObjectTag("messageId", getMessageId);
116 parser->registerObjectTag("messageStatus", getMessageStatus);
117 parser->registerObjectTag("backgroundColor", getBackgroundColor);
118 parser->registerObjectTag("fontColor", getFontColor);
119 parser->registerObjectTag("nickColor", getNickColor);
120 parser->registerObjectTag("sentDate", [chatConfigurationHolder](const ParserData * const object){ return getSentDate(chatConfigurationHolder->niceDateFormat(), object); } );
121 parser->registerObjectTag("receivedDate", [chatConfigurationHolder](const ParserData * const object){ return getReceivedDate(chatConfigurationHolder->niceDateFormat(), object); });
122 parser->registerObjectTag("separator", getSeparator);
123 }
124
unregisterParserTags(Parser * parser)125 void MessageRenderInfo::unregisterParserTags(Parser *parser)
126 {
127 parser->unregisterObjectTag("message");
128 parser->unregisterObjectTag("messageId");
129 parser->unregisterObjectTag("messageStatus");
130 parser->unregisterObjectTag("backgroundColor");
131 parser->unregisterObjectTag("fontColor");
132 parser->unregisterObjectTag("nickColor");
133 parser->unregisterObjectTag("sentDate");
134 parser->unregisterObjectTag("receivedDate");
135 parser->unregisterObjectTag("separator");
136 }
137
MessageRenderInfo(Message message,QString backgroundColor,QString fontColor,QString nickColor,bool includeHeader,int separatorSize,bool showServerTime)138 MessageRenderInfo::MessageRenderInfo(Message message, QString backgroundColor, QString fontColor, QString nickColor,
139 bool includeHeader, int separatorSize, bool showServerTime) :
140 m_message{std::move(message)}, m_backgroundColor{std::move(backgroundColor)}, m_fontColor{std::move(fontColor)}, m_nickColor{std::move(nickColor)},
141 m_includeHeader(includeHeader), m_separatorSize{separatorSize}, m_showServerTime{showServerTime}
142 {
143 }
144
~MessageRenderInfo()145 MessageRenderInfo::~MessageRenderInfo()
146 {
147 }
148
message() const149 Message MessageRenderInfo::message() const
150 {
151 return m_message;
152 }
153
backgroundColor() const154 QString MessageRenderInfo::backgroundColor() const
155 {
156 return m_backgroundColor;
157 }
158
fontColor() const159 QString MessageRenderInfo::fontColor() const
160 {
161 return m_fontColor;
162 }
163
nickColor() const164 QString MessageRenderInfo::nickColor() const
165 {
166 return m_nickColor;
167 }
168
includeHeader() const169 bool MessageRenderInfo::includeHeader() const
170 {
171 return m_includeHeader;
172 }
173
separatorSize() const174 int MessageRenderInfo::separatorSize() const
175 {
176 return m_separatorSize;
177 }
178
showServerTime() const179 bool MessageRenderInfo::showServerTime() const
180 {
181 return m_showServerTime;
182 }
183