File indexing completed on 2024-05-12 05:13:33

0001 /*
0002   SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org>
0003 
0004   SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "genericformatter.h"
0008 #include "grantleeki18nlocalizer.h"
0009 #include "grantleethemeengine.h"
0010 
0011 using namespace GrantleeTheme;
0012 
0013 class GrantleeTheme::GenericFormatterPrivate
0014 {
0015 public:
0016     GenericFormatterPrivate()
0017         : mEngine(new Engine)
0018     {
0019     }
0020 
0021     QString mThemePath;
0022     QString mDefaultMainFile;
0023     std::unique_ptr<Engine> const mEngine;
0024     QString mErrorMessage;
0025     QSharedPointer<KTextTemplate::FileSystemTemplateLoader> mTemplateLoader;
0026     KTextTemplate::Template mTemplate;
0027 };
0028 
0029 GenericFormatter::GenericFormatter(const QString &defaultHtmlMain, const QString &themePath)
0030     : d(new GenericFormatterPrivate)
0031 {
0032     d->mThemePath = themePath;
0033     d->mDefaultMainFile = defaultHtmlMain;
0034     setTemplatePath(d->mThemePath);
0035 }
0036 
0037 GenericFormatter::GenericFormatter()
0038     : d(new GenericFormatterPrivate)
0039 {
0040 }
0041 
0042 GenericFormatter::~GenericFormatter() = default;
0043 
0044 void GenericFormatter::setDefaultHtmlMainFile(const QString &name)
0045 {
0046     if (d->mDefaultMainFile != name) {
0047         d->mDefaultMainFile = name;
0048         reloadTemplate();
0049     }
0050 }
0051 
0052 void GenericFormatter::setTemplatePath(const QString &path)
0053 {
0054     if (!d->mTemplateLoader) {
0055         d->mTemplateLoader.reset(new KTextTemplate::FileSystemTemplateLoader);
0056     }
0057     d->mTemplateLoader->setTemplateDirs(QStringList() << path);
0058     d->mEngine->addTemplateLoader(d->mTemplateLoader);
0059 
0060     reloadTemplate();
0061 }
0062 
0063 void GenericFormatter::setApplicationDomain(const QByteArray &domain)
0064 {
0065     d->mEngine->localizer()->setApplicationDomain(domain);
0066 }
0067 
0068 QString GenericFormatter::errorMessage() const
0069 {
0070     return d->mErrorMessage;
0071 }
0072 
0073 QString GenericFormatter::render(const QVariantHash &mapping) const
0074 {
0075     KTextTemplate::Context context(mapping);
0076     context.setLocalizer(d->mEngine->localizer());
0077 
0078     const QString contentHtml = d->mTemplate->render(&context);
0079     return contentHtml;
0080 }
0081 
0082 void GenericFormatter::setTemplateContent(const QString &content)
0083 {
0084     d->mTemplate = d->mEngine->newTemplate(content, QStringLiteral("content"));
0085     if (d->mTemplate->error()) {
0086         d->mErrorMessage = d->mTemplate->errorString() + QLatin1StringView("<br>");
0087     }
0088 }
0089 
0090 void GenericFormatter::reloadTemplate()
0091 {
0092     d->mTemplate = d->mEngine->loadByName(d->mDefaultMainFile);
0093     if (d->mTemplate->error()) {
0094         d->mErrorMessage += d->mTemplate->errorString() + QLatin1StringView("<br>");
0095     }
0096 }