void FormattedStringHtmlVisitor::visit(const FormattedStringTextBlock *const formattedStringTextBlock)
{
    QString content(replacedNewLine(Qt::escape(formattedStringTextBlock->content()), QStringLiteral("<br/>")));

    if (!formattedStringTextBlock->bold() && !formattedStringTextBlock->italic() &&
        !formattedStringTextBlock->underline())
    {
        append(content);
        return;
    }

    QString span = "<span style=\"";
    if (formattedStringTextBlock->bold())
        span += "font-weight:600;";
    if (formattedStringTextBlock->italic())
        span += "font-style:italic;";
    if (formattedStringTextBlock->underline())
        span += "text-decoration:underline;";

    //  TODO: Ignore colors settings for now. Many clients send black as default color.
    //	This breaks all dark chat themes. We have to find better solution for post 0.9.0 versions
    //	if (Color.isValid())
    //		span += QString("color:%1;").arg(Color.name());

    span += "\">";

    append(span + content + "</span>");
}
Esempio n. 2
0
/**
	Czyszczenie bufora z tag�w HTML i zamienianie znakow specjalnych
**/
QString WeatherParser::tagClean(QString str) const
{
	kdebugf();

	//str.replace("&deg;","�");
	str.replace("&nbsp;"," ");

	int start, end;
	start = 0;
	do
	{
		start = str.find("<",start);
		end = str.find(">",start+1);

		if (start != -1 && end != -1)
			str.replace(start,end+1-start, " ");

	}
	while (start != -1 && end != -1);

	str = replacedNewLine(str, QLatin1String(" "));
	str.replace("  ", " ");
	str.replace(" ,", ",");
	str.replace(" .", ".");
	str.replace(" :", ":");
	str.replace(" / ", "/");

	kdebugf2();
	return str;
}
Esempio n. 3
0
void JabberChatService::handleReceivedMessage(const QXmppMessage &xmppMessage)
{
	if (!m_formattedStringFactory)
		return;

	m_chatStateService->extractReceivedChatState(xmppMessage);

	if (xmppMessage.body().isEmpty())
		return;

	if (xmppMessage.type() == QXmppMessage::Type::Error) // #1642
		return;

	auto message = xmppMessage.type() == QXmppMessage::GroupChat
		? m_roomChatService->handleReceivedMessage(xmppMessage)
		: handleNormalReceivedMessage(xmppMessage);
	if (message.isNull())
		return;

	message.setType(MessageTypeReceived);
	message.setSendDate(xmppMessage.stamp().toLocalTime());
	message.setReceiveDate(QDateTime::currentDateTime());

	auto body = xmppMessage.body();
	if (rawMessageTransformerService())
		body = QString::fromUtf8(rawMessageTransformerService()->transform(body.toUtf8(), message).rawContent());

	auto htmlBody = replacedNewLine(Qt::escape(body), QLatin1String("<br/>"));
	auto formattedString = m_formattedStringFactory.data()->fromHtml(htmlBody);
	if (!formattedString || formattedString->isEmpty())
		return;

	message.setContent(std::move(formattedString));

	auto id = xmppMessage.from();
	auto resourceIndex = id.indexOf('/');
	if (resourceIndex >= 0)
		id = id.mid(0, resourceIndex);
	m_contactMessageTypes.insert(id, xmppMessage.type());

	emit messageReceived(message);
}
Esempio n. 4
0
MessageRenderInfo::MessageRenderInfo(const Message &msg) :
		MyMessage(msg), ShowServerTime(true)
{
	switch (msg.type())
	{
		case Message::TypeSent:
			BackgroundColor = config_file.readEntry("Look", "ChatMyBgColor");
			FontColor = config_file.readEntry("Look", "ChatMyFontColor");
			NickColor = config_file.readEntry("Look", "ChatMyNickColor");
			break;

		case Message::TypeReceived:
			BackgroundColor = config_file.readEntry("Look", "ChatUsrBgColor");
			FontColor = config_file.readEntry("Look", "ChatUsrFontColor");
			NickColor = config_file.readEntry("Look", "ChatUsrNickColor");
			break;

		default:
			// do nothing
			break;
	}

	HtmlMessageContent = replacedNewLine(MyMessage.content(), QLatin1String("<br/>"));
	HtmlMessageContent.replace(QChar::LineSeparator, QLatin1String("<br/>"));

	// compare this regexp with FormattedMessagePart::toHtml()
	QRegExp kaduimgRegExp("<img src=\"kaduimg:///([^\"]*)\" />");
	int pos = 0;
	while ((pos = kaduimgRegExp.indexIn(HtmlMessageContent, pos)) != -1)
	{
		QString imgId = kaduimgRegExp.cap(1);
		if (!QFile(ChatImageService::imagesPath() + imgId).exists())
			HtmlMessageContent.replace(kaduimgRegExp.cap(0), loadingImageHtml(imgId));
		else
			pos += kaduimgRegExp.matchedLength();
	}

// 	convertCharacters(unformattedMessage, backgroundColor,
// 		(EmoticonsStyle)config_file.readNumEntry("Chat", "EmoticonsStyle"));
}