1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
/* -*- c++ -*-
messageviewer/headerstyle.h
This file is part of KMail, the KDE mail client.
SPDX-FileCopyrightText: 2003 Marc Mutz <mutz@kde.org>
SPDX-FileCopyrightText: 2013-2025 Laurent Montel <montel@kde.org>
SPDX-License-Identifier: GPL-2.0-only
*/
#include "briefheaderstyle.h"
#include <MessageViewer/HeaderStrategy>
#include <MessageViewer/MessageViewerSettings>
#include <MessageCore/StringUtil>
#include <KLocalizedString>
#include <QApplication>
#include <QRegularExpression>
using namespace MessageCore;
using namespace MessageViewer;
//
// BriefHeaderStyle
// Show everything in a single line, don't show header field names.
//
QString BriefHeaderStyle::format(KMime::Message *message) const
{
if (!message) {
return {};
}
const HeaderStrategy *strategy = headerStrategy();
// The direction of the header is determined according to the direction
// of the application layout.
const QString dir = QApplication::isRightToLeft() ? QStringLiteral("rtl") : QStringLiteral("ltr");
// However, the direction of the message subject within the header is
// determined according to the contents of the subject itself. Since
// the "Re:" and "Fwd:" prefixes would always cause the subject to be
// considered left-to-right, they are ignored when determining its
// direction.
const QString subjectDir = mHeaderStyleUtil.subjectDirectionString(message);
QString headerStr = QLatin1StringView(R"(<div class="header" dir=")") + dir + QLatin1StringView("\">\n");
if (strategy->showHeader(QStringLiteral("subject"))) {
const KTextToHTML::Options flags = KTextToHTML::PreserveSpaces | KTextToHTML::ReplaceSmileys;
headerStr += QLatin1StringView("<div dir=\"") + subjectDir + QLatin1StringView("\">\n") + QStringLiteral("<b style=\"font-size:130%\">");
headerStr += mHeaderStyleUtil.subjectString(message, flags) + QStringLiteral("</b></div>\n");
}
QStringList headerParts;
if (strategy->showHeader(QStringLiteral("from"))) {
/*TODO(Andras) review if it can happen or not
if ( fromStr.isEmpty() ) // no valid email in from, maybe just a name
fromStr = message->fromStrip(); // let's use that
*/
QString fromPart = StringUtil::emailAddrAsAnchor(message->from(), StringUtil::DisplayFullAddress);
if (!vCardName().isEmpty()) {
fromPart += QLatin1StringView(" <a href=\"") + vCardName() + QLatin1StringView("\">") + i18n("[vCard]") + QLatin1StringView("</a>");
}
headerParts << fromPart;
}
if (strategy->showHeader(QStringLiteral("cc")) && message->cc(false)) {
const QString str = StringUtil::emailAddrAsAnchor(message->cc(), StringUtil::DisplayFullAddress);
if (!str.isEmpty()) {
headerParts << i18n("CC: ") + str;
}
}
if (strategy->showHeader(QStringLiteral("bcc")) && message->bcc(false)) {
const QString str = StringUtil::emailAddrAsAnchor(message->bcc(), StringUtil::DisplayFullAddress);
if (!str.isEmpty()) {
headerParts << i18n("BCC: ") + str;
}
}
if (strategy->showHeader(QStringLiteral("date"))) {
headerParts << mHeaderStyleUtil.strToHtml(HeaderStyleUtil::dateString(message, /* shortDate = */ MessageViewer::HeaderStyleUtil::ShortDate));
}
// remove all empty (modulo whitespace) entries and joins them via ", \n"
headerStr += QLatin1StringView(" (") + headerParts.filter(QRegularExpression(QStringLiteral("\\S"))).join(QLatin1StringView(",\n")) + QLatin1Char(')');
headerStr += QLatin1StringView("</div>\n");
// ### iterate over the rest of strategy->headerToDisplay() (or
// ### all headers if DefaultPolicy == Display) (elsewhere, too)
return headerStr;
}
|