File indexing completed on 2024-05-19 04:03:04
0001 /* 0002 SPDX-FileCopyrightText: 2018 Nicolas Fella <nicolas.fella@gmx.de> 0003 0004 SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include "debug.h" 0008 #include <KConfigGroup> 0009 #include <KDesktopFile> 0010 #include <KIO/ApplicationLauncherJob> 0011 #include <KLocalizedString> 0012 #include <KPluginFactory> 0013 #include <KShell> 0014 #include <QDebug> 0015 #include <QJsonArray> 0016 #include <QProcess> 0017 #include <QStandardPaths> 0018 #include <QTimer> 0019 #include <QUrl> 0020 #include <purpose/pluginbase.h> 0021 0022 Q_LOGGING_CATEGORY(PLUGIN_TELEGRAM, "kf.purpose.plugins.telegram") 0023 0024 class TelegramJob : public Purpose::Job 0025 { 0026 Q_OBJECT 0027 public: 0028 TelegramJob(QObject *parent) 0029 : Purpose::Job(parent) 0030 { 0031 } 0032 0033 QList<QUrl> arrayToList(const QJsonArray &array) 0034 { 0035 QList<QUrl> ret; 0036 for (const QJsonValue &val : array) { 0037 QUrl url(val.toString()); 0038 ret << url; 0039 } 0040 return ret; 0041 } 0042 0043 void start() override 0044 { 0045 KService::Ptr service = KService::serviceByDesktopName(QStringLiteral("org.telegram.desktop")); 0046 0047 if (!service) { 0048 service = KService::serviceByDesktopName(QStringLiteral("telegramdesktop")); 0049 } 0050 0051 if (!service) { 0052 service = KService::serviceByDesktopName(QStringLiteral("telegram-desktop")); 0053 } 0054 0055 if (!service) { 0056 // Failed to find the application 0057 QTimer::singleShot(0, this, [this]() { 0058 setError(KJob::UserDefinedError + 1); 0059 setErrorText(i18n("Could not find telegram")); 0060 setOutput({{QStringLiteral("url"), QString()}}); 0061 emitResult(); 0062 }); 0063 return; 0064 } 0065 0066 QString exec = service->exec(); 0067 exec.replace(QLatin1String("%u"), QLatin1String("%f")); 0068 exec.replace(QLatin1String("@@u"), QLatin1String("@@")); 0069 exec.replace(QLatin1String(" -- "), QLatin1String(" -sendpath ")); 0070 service->setExec(exec); 0071 0072 auto *job = new KIO::ApplicationLauncherJob(service); 0073 job->setUrls(arrayToList(data().value(QLatin1String("urls")).toArray())); 0074 connect(job, &KIO::ApplicationLauncherJob::result, this, [this](KJob *job) { 0075 if (job->error()) { 0076 qWarning() << "telegram share error:" << job->error() << job->errorString(); 0077 setError(job->error()); 0078 setErrorText(job->errorString()); 0079 } else { 0080 setOutput({{QStringLiteral("url"), QString()}}); 0081 } 0082 0083 emitResult(); 0084 }); 0085 job->start(); 0086 } 0087 }; 0088 0089 class TelegramPlugin : public Purpose::PluginBase 0090 { 0091 Q_OBJECT 0092 public: 0093 using PluginBase::PluginBase; 0094 Purpose::Job *createJob() const override 0095 { 0096 return new TelegramJob(nullptr); 0097 } 0098 }; 0099 0100 K_PLUGIN_CLASS_WITH_JSON(TelegramPlugin, "telegramplugin.json") 0101 0102 #include "telegramplugin.moc"