File indexing completed on 2024-05-19 04:03:02

0001 /*
0002     SPDX-FileCopyrightText: 2017 Klarälvdalens Datakonsult AB a KDAB Group company info@kdab.com
0003     SPDX-FileContributor: Daniel Vrátil <daniel.vratil@kdab.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-or-later
0006 */
0007 
0008 #include <purpose/pluginbase.h>
0009 
0010 #include <KApplicationTrader>
0011 #include <KEMailClientLauncherJob>
0012 #include <KLocalizedString>
0013 #include <KPluginFactory>
0014 
0015 #include <QDebug>
0016 #include <QDesktopServices>
0017 #include <QJsonArray>
0018 #include <QProcess>
0019 #include <QStandardPaths>
0020 #include <QUrl>
0021 #include <QUrlQuery>
0022 
0023 namespace
0024 {
0025 class EmailJob : public Purpose::Job
0026 {
0027     Q_OBJECT
0028 public:
0029     explicit EmailJob(QObject *parent = nullptr)
0030         : Purpose::Job(parent)
0031     {
0032     }
0033 
0034     void start() override
0035     {
0036         KEMailClientLauncherJob *job = new KEMailClientLauncherJob;
0037 
0038         QList<QUrl> attachments;
0039         QStringList bodyPieces;
0040 
0041         const auto urls = data().value(QLatin1String("urls")).toArray();
0042         for (const QJsonValue &val : urls) {
0043             const QUrl url = val.toVariant().toUrl();
0044             if (url.isLocalFile()) {
0045                 attachments << url;
0046             } else {
0047                 bodyPieces << url.toString();
0048             }
0049         }
0050 
0051         job->setAttachments(attachments);
0052         job->setBody(bodyPieces.join(QLatin1Char('\n')));
0053         job->setSubject(data().value(QLatin1String("title")).toString());
0054 
0055         connect(job, &KJob::result, this, [this](KJob *job) {
0056             setError(job->error());
0057             setErrorText(job->errorText());
0058             emitResult();
0059         });
0060 
0061         job->start();
0062     }
0063 };
0064 
0065 }
0066 
0067 class EmailPlugin : public Purpose::PluginBase
0068 {
0069     Q_OBJECT
0070 public:
0071     using PluginBase::PluginBase;
0072     Purpose::Job *createJob() const override
0073     {
0074         return new EmailJob(nullptr);
0075     }
0076 };
0077 
0078 K_PLUGIN_CLASS_WITH_JSON(EmailPlugin, "emailplugin.json")
0079 
0080 #include "emailplugin.moc"