File indexing completed on 2025-03-09 04:54:32

0001 /*
0002    SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <KTextToHTML>
0010 #include <QString>
0011 #include <QVariantHash>
0012 
0013 #include "messageviewer/spamheaderanalyzer.h"
0014 #include <KMime/DateFormatter>
0015 #include <KMime/KMimeMessage>
0016 
0017 #include "messageviewer/headerstyle.h"
0018 #include "messageviewer/viewer.h"
0019 #include "messageviewer_export.h"
0020 namespace MessageViewer
0021 {
0022 /**
0023  * @brief The HeaderStyleUtil class
0024  * @author Laurent Montel <montel@kde.org>
0025  */
0026 class MESSAGEVIEWER_EXPORT HeaderStyleUtil
0027 {
0028 public:
0029     HeaderStyleUtil();
0030     struct xfaceSettings {
0031         xfaceSettings()
0032             : photoWidth(60)
0033             , photoHeight(60)
0034         {
0035         }
0036 
0037         QString photoURL;
0038         int photoWidth;
0039         int photoHeight;
0040     };
0041     enum HeaderStyleUtilDateFormat {
0042         ShortDate, /**< Locale Short date format, e.g. 08-04-2007 */
0043         LongDate, /**< Locale Long date format, e.g. Sunday 08 April 2007 */
0044         FancyShortDate, /**< Same as ShortDate for dates a week or more ago. For more
0045                              recent dates, it is represented as Today, Yesterday, or
0046                              the weekday name. */
0047         FancyLongDate, /**< Same as LongDate for dates a week or more ago. For more
0048                             recent dates, it is represented as Today, Yesterday, or
0049                             the weekday name. */
0050         CustomDate
0051     };
0052 
0053     [[nodiscard]] QString directionOf(const QString &str) const;
0054 
0055     [[nodiscard]] static QString strToHtml(const QString &str, KTextToHTML::Options flags = KTextToHTML::PreserveSpaces);
0056     [[nodiscard]] static QString dateString(KMime::Message *message, HeaderStyleUtilDateFormat dateFormat);
0057     [[nodiscard]] static QString dateString(const QDateTime &date, HeaderStyleUtilDateFormat dateFormat);
0058 
0059     [[nodiscard]] QString subjectString(KMime::Message *message, KTextToHTML::Options flags = KTextToHTML::PreserveSpaces) const;
0060 
0061     [[nodiscard]] QString subjectDirectionString(KMime::Message *message) const;
0062 
0063     [[nodiscard]] QString spamStatus(KMime::Message *message) const;
0064 
0065     [[nodiscard]] static QString dateStr(const QDateTime &dateTime);
0066 
0067     [[nodiscard]] static QString dateShortStr(const QDateTime &dateTime);
0068 
0069     [[nodiscard]] MESSAGEVIEWER_DEPRECATED static QSharedPointer<KMime::Headers::Generics::MailboxList> resentFromList(KMime::Message *message);
0070 
0071     [[nodiscard]] MESSAGEVIEWER_DEPRECATED static QSharedPointer<KMime::Headers::Generics::MailboxList> resentToList(KMime::Message *message);
0072 
0073     [[nodiscard]] xfaceSettings xface(const HeaderStyle *style, KMime::Message *message) const;
0074 
0075 private:
0076     void updateXFaceSettings(QImage photo, xfaceSettings &settings) const;
0077     [[nodiscard]] QString
0078     drawSpamMeter(SpamError spamError, double percent, double confidence, const QString &filterHeader, const QString &confidenceHeader) const;
0079     [[nodiscard]] QString imgToDataUrl(const QImage &image) const;
0080 };
0081 }