diff --git a/extraJsonTranslationKeys.txt b/extraJsonTranslationKeys.txt new file mode 100644 index 0000000..1160bd7 --- /dev/null +++ b/extraJsonTranslationKeys.txt @@ -0,0 +1 @@ +X-Purpose-ActionDisplay diff --git a/src/alternativesmodel.cpp b/src/alternativesmodel.cpp index 18a0e9e..0df2b88 100644 --- a/src/alternativesmodel.cpp +++ b/src/alternativesmodel.cpp @@ -1,336 +1,341 @@ /* Copyright 2014 Aleix Pol Gonzalez This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #include "alternativesmodel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "helper.h" #include "configuration.h" #include "job.h" using namespace Purpose; static const QStringList s_defaultDisabledPlugins = {QStringLiteral("saveasplugin")}; typedef bool (*matchFunction)(const QString& constraint, const QJsonValue& value); static bool defaultMatch(const QString& constraint, const QJsonValue& value) { return value == QJsonValue(constraint); } static bool mimeTypeMatch(const QString& constraint, const QJsonValue& value) { if(value.isArray()) { const auto array = value.toArray(); for (const QJsonValue& val : array) { if (mimeTypeMatch(constraint, val)) return true; } return false; } else if(value.isObject()) { for(const QJsonValue& val : value.toObject()) { if (mimeTypeMatch(constraint, val)) return true; } return false; } else if(constraint.contains(QLatin1Char('*'))) { return QRegExp(constraint, Qt::CaseInsensitive, QRegExp::Wildcard).exactMatch(value.toString()); } else { QMimeDatabase db; QMimeType mime = db.mimeTypeForName(value.toString()); return mime.inherits(constraint); } } static bool dbusMatch(const QString& constraint, const QJsonValue& value) { Q_UNUSED(value) return QDBusConnection::sessionBus().interface()->isServiceRegistered(constraint); } static bool executablePresent(const QString& constraint, const QJsonValue& value) { Q_UNUSED(value) return !QStandardPaths::findExecutable(constraint).isEmpty(); } static bool desktopFilePresent(const QString& constraint, const QJsonValue& value) { Q_UNUSED(value) return !QStandardPaths::locate(QStandardPaths::ApplicationsLocation, constraint).isEmpty(); } static QMap s_matchFunctions = { { QStringLiteral("mimeType"), mimeTypeMatch }, { QStringLiteral("dbus"), dbusMatch }, { QStringLiteral("application"), desktopFilePresent }, { QStringLiteral("exec"), executablePresent } }; class Purpose::AlternativesModelPrivate { public: QVector m_plugins; QJsonObject m_inputData; QString m_pluginType; QStringList m_disabledPlugins = s_defaultDisabledPlugins; QJsonObject m_pluginTypeData; const QRegularExpression constraintRx { QStringLiteral("(\\w+):(.*)") }; bool isPluginAcceptable(const KPluginMetaData &meta, const QStringList &disabledPlugins) const { const QJsonObject obj = meta.rawData(); if(!obj.value(QStringLiteral("X-Purpose-PluginTypes")).toArray().contains(m_pluginType)) { qDebug() << "discarding" << meta.name() << KPluginMetaData::readStringList(meta.rawData(), QStringLiteral("X-Purpose-PluginTypes")); return false; } if (disabledPlugins.contains(meta.pluginId()) || m_disabledPlugins.contains(meta.pluginId())) { //qDebug() << "disabled plugin" << meta.name() << meta.pluginId(); return false; } //All constraints must match const QJsonArray constraints = obj.value(QStringLiteral("X-Purpose-Constraints")).toArray(); for(const QJsonValue& constraint: constraints) { if (!constraintMatches(meta, constraint)) return false; } return true; } bool constraintMatches(const KPluginMetaData &meta, const QJsonValue &constraint) const { //Treat an array as an OR if (constraint.isArray()) { const QJsonArray options = constraint.toArray(); for (const auto &option: options) { if (constraintMatches(meta, option)) { return true; } } return false; } Q_ASSERT(constraintRx.isValid()); QRegularExpressionMatch match = constraintRx.match(constraint.toString()); if (!match.isValid() || !match.hasMatch()) { qWarning() << "wrong constraint" << constraint.toString(); return false; } const QString propertyName = match.captured(1); const QString constrainedValue = match.captured(2); const bool acceptable = s_matchFunctions.value(propertyName, defaultMatch)(constrainedValue, m_inputData.value(propertyName)); if (!acceptable) { // qDebug() << "not accepted" << meta.name() << propertyName << constrainedValue << m_inputData[propertyName]; } return acceptable; } }; AlternativesModel::AlternativesModel(QObject* parent) : QAbstractListModel(parent) , d_ptr(new AlternativesModelPrivate) { } AlternativesModel::~AlternativesModel() { Q_D(AlternativesModel); delete d; } QHash AlternativesModel::roleNames() const { QHash roles = QAbstractListModel::roleNames(); roles.unite({ { IconNameRole, "iconName" }, - { PluginIdRole, "pluginId" } + { PluginIdRole, "pluginId" }, + { ActionDisplayRole, "actionDisplay" } }); return roles; } void AlternativesModel::setInputData(const QJsonObject &input) { Q_D(AlternativesModel); if (input == d->m_inputData) return; d->m_inputData = input; initializeModel(); Q_EMIT inputDataChanged(); } void AlternativesModel::setPluginType(const QString& pluginType) { Q_D(AlternativesModel); if (pluginType == d->m_pluginType) return; d->m_pluginTypeData = Purpose::readPluginType(pluginType); d->m_pluginType = pluginType; Q_ASSERT(d->m_pluginTypeData.isEmpty() == d->m_pluginType.isEmpty()); initializeModel(); Q_EMIT pluginTypeChanged(); } QStringList AlternativesModel::disabledPlugins() const { Q_D(const AlternativesModel); return d->m_disabledPlugins; } void AlternativesModel::setDisabledPlugins(const QStringList &pluginIds) { Q_D(AlternativesModel); if (pluginIds == d->m_disabledPlugins) return; d->m_disabledPlugins = pluginIds; initializeModel(); Q_EMIT disabledPluginsChanged(); } QString AlternativesModel::pluginType() const { Q_D(const AlternativesModel); return d->m_pluginType; } QJsonObject AlternativesModel::inputData() const { Q_D(const AlternativesModel); return d->m_inputData; } Purpose::Configuration* AlternativesModel::configureJob(int row) { Q_D(AlternativesModel); const KPluginMetaData pluginData = d->m_plugins.at(row); return new Configuration(d->m_inputData, d->m_pluginType, d->m_pluginTypeData, pluginData); } int AlternativesModel::rowCount(const QModelIndex& parent) const { Q_D(const AlternativesModel); return parent.isValid() ? 0 : d->m_plugins.count(); } QVariant AlternativesModel::data(const QModelIndex& index, int role) const { Q_D(const AlternativesModel); if (!index.isValid() || index.row()>d->m_plugins.count()) return QVariant(); KPluginMetaData data = d->m_plugins[index.row()]; switch (role) { case Qt::DisplayRole: return data.name(); case Qt::ToolTip: return data.description(); case IconNameRole: return data.iconName(); case Qt::DecorationRole: return QIcon::fromTheme(data.iconName()); case PluginIdRole: return data.pluginId(); + case ActionDisplayRole: { + QString action = data.value(QStringLiteral("X-Purpose-ActionDisplay")); + return action.isEmpty() ? data.name() : action; + } } return QVariant(); } static QVector findScriptedPackages(std::function filter) { QVector ret; QSet addedPlugins; const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kpackage/Purpose"), QStandardPaths::LocateDirectory); for (const QString &dir : dirs) { QDirIterator dirIt(dir, QDir::Dirs | QDir::NoDotAndDotDot); for(; dirIt.hasNext(); ) { QDir dir(dirIt.next()); Q_ASSERT(dir.exists()); if (!dir.exists(QStringLiteral("metadata.json"))) continue; const KPluginMetaData info = Purpose::createMetaData(dir.absoluteFilePath(QStringLiteral("metadata.json"))); if (!addedPlugins.contains(info.pluginId()) && filter(info)) { addedPlugins << info.pluginId(); ret += info; } } } return ret; } void AlternativesModel::initializeModel() { Q_D(AlternativesModel); if (d->m_pluginType.isEmpty()) { return; } const QJsonArray inbound = d->m_pluginTypeData.value(QStringLiteral("X-Purpose-InboundArguments")).toArray(); for (const QJsonValue& arg : inbound) { if(!d->m_inputData.contains(arg.toString())) { qWarning() << "Cannot initialize model with data" << d->m_inputData << ". missing:" << arg; return; } } const auto config = KSharedConfig::openConfig(QStringLiteral("purposerc")); const auto group = config->group("plugins"); const QStringList disabledPlugins = group.readEntry("disabled", QStringList()); auto pluginAcceptable = [d, disabledPlugins](const KPluginMetaData& meta) { return d->isPluginAcceptable(meta, disabledPlugins); }; beginResetModel(); d->m_plugins.clear(); const auto plugins = KPluginLoader::findPlugins(QStringLiteral("kf5/purpose")); QSet addedPlugins; for (const auto &metaData : plugins) { if (!addedPlugins.contains(metaData.pluginId()) && pluginAcceptable(metaData)) { addedPlugins << metaData.pluginId(); d->m_plugins << metaData; } } d->m_plugins += findScriptedPackages(pluginAcceptable); endResetModel(); } diff --git a/src/alternativesmodel.h b/src/alternativesmodel.h index 6356bf9..22a84a4 100644 --- a/src/alternativesmodel.h +++ b/src/alternativesmodel.h @@ -1,104 +1,105 @@ /* Copyright 2014 Aleix Pol Gonzalez This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #ifndef PURPOSEALTERNATIVESMODEL_H #define PURPOSEALTERNATIVESMODEL_H #include #include #include namespace Purpose { class Configuration; class AlternativesModelPrivate; /** * @short Interface for client applications to share data * * Lists all the alternatives to share a specified type of data then provides * a method to trigger a job. */ class PURPOSE_EXPORT AlternativesModel : public QAbstractListModel { Q_OBJECT /** * Specifies the type of the plugin we want to list * * @sa inputData */ Q_PROPERTY(QString pluginType READ pluginType WRITE setPluginType NOTIFY pluginTypeChanged) /** * Specifies the information that will be given to the plugin once it's started * * @note some plugins might be filtered out based on this setting */ Q_PROPERTY(QJsonObject inputData READ inputData WRITE setInputData NOTIFY inputDataChanged) /** * Provides a list of plugin names to have filtered out */ Q_PROPERTY(QStringList disabledPlugins READ disabledPlugins WRITE setDisabledPlugins NOTIFY disabledPluginsChanged) public: enum Roles { PluginIdRole = Qt::UserRole+1, - IconNameRole + IconNameRole, + ActionDisplayRole }; explicit AlternativesModel(QObject* parent = nullptr); ~AlternativesModel() override; QJsonObject inputData() const; void setInputData(const QJsonObject& input); QString pluginType() const; void setPluginType(const QString& pluginType); QStringList disabledPlugins() const; void setDisabledPlugins(const QStringList& pluginIds); /** * This shouldn't require to have the job actually running on the same process as the app. * * @param row specifies the alternative to be used * @param data specifies the data to have shared * * @returns the configuration instance that will offer the job. */ Q_SCRIPTABLE Purpose::Configuration* configureJob(int row); QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; int rowCount(const QModelIndex& parent = QModelIndex()) const override; QHash roleNames() const override; Q_SIGNALS: void inputDataChanged(); void pluginTypeChanged(); void disabledPluginsChanged(); private: void initializeModel(); AlternativesModelPrivate *const d_ptr; Q_DECLARE_PRIVATE(AlternativesModel) }; } #endif diff --git a/src/plugins/bluetooth/bluetoothplugin.json b/src/plugins/bluetooth/bluetoothplugin.json index 268e4e9..a3c0b47 100644 --- a/src/plugins/bluetooth/bluetoothplugin.json +++ b/src/plugins/bluetooth/bluetoothplugin.json @@ -1,103 +1,104 @@ { "KPlugin": { "Authors": [ { "Name": "Nicolas Fella", "Name[ar]": "Nicolas Fella", "Name[ca@valencia]": "Nicolas Fella", "Name[ca]": "Nicolas Fella", "Name[cs]": "Nicolas Fella", "Name[da]": "Nicolas Fella", "Name[de]": "Nicolas Fella", "Name[en_GB]": "Nicolas Fella", "Name[es]": "Nicolas Fella", "Name[eu]": "Nicolas Fella", "Name[fi]": "Nicolas Fella", "Name[fr]": "Nicolas Fella", "Name[gl]": "Nicolas Fella", "Name[hu]": "Nicolas Fella", "Name[id]": "Nicolas Fella", "Name[it]": "Nicolas Fella", "Name[ko]": "Nicolas Fella", "Name[nl]": "Nicolas Fella", "Name[nn]": "Nicolas Fella", "Name[pl]": "Nicolas Fella", "Name[pt]": "Nicolas Fella", "Name[pt_BR]": "Nicolas Fella", "Name[ru]": "Nicolas Fella", "Name[sk]": "Nicolas Fella", "Name[sv]": "Nicolas Fella", "Name[uk]": "Nicolas Fella", "Name[x-test]": "xxNicolas Fellaxx", "Name[zh_CN]": "Nicolas Fella", "Name[zh_TW]": "Nicolas Fella" } ], "Category": "Utilities", "Description": "Send via Bluetooth", "Description[ca@valencia]": "Envia per Bluetooth", "Description[ca]": "Envia per Bluetooth", "Description[cs]": "Poslat přes Bluetooth", "Description[da]": "Send via Bluetooth", "Description[de]": "Über Bluetooth versenden", "Description[en_GB]": "Send via Bluetooth", "Description[es]": "Enviar por Bluetooth", "Description[eu]": "Bidali bluetooth bidez", "Description[fi]": "Lähetä Bluetoothilla", "Description[fr]": "Envoyer via Bluetooth", "Description[gl]": "Enviar por Bluetooth…", "Description[hu]": "Küldés Bluetoothon", "Description[id]": "Mengirim via Bluetooth", "Description[it]": "Invia tramite Bluetooth", "Description[ko]": "블루투스로 보내기", "Description[nl]": "Verzenden over bluetooth", "Description[nn]": "Send over Bluetooth", "Description[pl]": "Prześlij przez Bluetooth", "Description[pt]": "Enviar por Bluetooth", "Description[pt_BR]": "Enviar por Bluetooth", "Description[ru]": "Отправка по Bluetooth", "Description[sk]": "Poslať cez Bluetooth", "Description[sv]": "Skicka via Blåtand", "Description[uk]": "Надсилання за допомогою Bluetooth", "Description[x-test]": "xxSend via Bluetoothxx", "Description[zh_CN]": "通过蓝牙发送", "Description[zh_TW]": "透過藍牙傳送", "Icon": "preferences-system-bluetooth", "License": "GPL", - "Name": "Send via Bluetooth...", + "Name": "Send via Bluetooth", "Name[ca@valencia]": "Envia per Bluetooth...", "Name[ca]": "Envia per Bluetooth...", "Name[cs]": "Poslat přes Bluetooth...", "Name[da]": "Send via Bluetooth...", "Name[de]": "Über Bluetooth versenden ...", "Name[en_GB]": "Send via Bluetooth...", "Name[es]": "Enviar por Bluetooth...", "Name[eu]": "Bidali bluetooth bidez...", "Name[fi]": "Lähetä Bluetoothilla…", "Name[fr]": "Envoyer via Bluetooth...", "Name[gl]": "Enviar por Bluetooth…", "Name[hu]": "Küldés Bluetoothon…", "Name[id]": "Kirim via Bluetooth...", "Name[it]": "Invia tramite Bluetooth...", "Name[ko]": "블루투스로 보내기...", "Name[nl]": "Verzenden over bluetooth...", "Name[nn]": "Send over Bluetooth …", "Name[pl]": "Prześlij przez Bluetooth...", "Name[pt]": "Enviar por Bluetooth...", "Name[pt_BR]": "Enviar por Bluetooth...", "Name[ru]": "Отправить по Bluetooth...", "Name[sk]": "Poslať cez Bluetooth...", "Name[sv]": "Skicka via Blåtand...", "Name[uk]": "Надіслати за допомогою Bluetooth…", "Name[x-test]": "xxSend via Bluetooth...xx", "Name[zh_CN]": "通过蓝牙发送...", "Name[zh_TW]": "透過藍牙傳送……" }, "X-Purpose-Configuration": [ "device" ], "X-Purpose-Constraints": [], "X-Purpose-PluginTypes": [ "Export" - ] + ], + "X-Purpose-ActionDisplay": "Send via Bluetooth..." } diff --git a/src/plugins/email/emailplugin.json b/src/plugins/email/emailplugin.json index e5c3b9e..a2cf782 100644 --- a/src/plugins/email/emailplugin.json +++ b/src/plugins/email/emailplugin.json @@ -1,107 +1,108 @@ { "KPlugin": { "Authors": [ { "Name": "Daniel Vrátil", "Name[ar]": "Daniel Vrátil", "Name[ca@valencia]": "Daniel Vrátil", "Name[ca]": "Daniel Vrátil", "Name[cs]": "Daniel Vrátil", "Name[da]": "Daniel Vrátil", "Name[de]": "Daniel Vrátil", "Name[en_GB]": "Daniel Vrátil", "Name[es]": "Daniel Vrátil", "Name[eu]": "Daniel Vrátil", "Name[fi]": "Daniel Vrátil", "Name[fr]": "Daniel Vrátil", "Name[gl]": "Daniel Vrátil", "Name[hu]": "Daniel Vrátil", "Name[id]": "Daniel Vrátil", "Name[it]": "Daniel Vrátil", "Name[ko]": "Daniel Vrátil", "Name[nl]": "Daniel Vrátil", "Name[nn]": "Daniel Vrátil", "Name[pl]": "Daniel Vrátil", "Name[pt]": "Daniel Vrátil", "Name[pt_BR]": "Daniel Vrátil", "Name[ru]": "Daniel Vrátil", "Name[sk]": "Daniel Vrátil", "Name[sv]": "Daniel Vrátil", "Name[tr]": "Daniel Vrátil", "Name[uk]": "Daniel Vrátil", "Name[x-test]": "xxDaniel Vrátilxx", "Name[zh_CN]": "Daniel Vrátil", "Name[zh_TW]": "Daniel Vrátil" } ], "Category": "Utilities", "Description": "Send via Email", "Description[ar]": "أرسِل عبر البريد الإلكتروني", "Description[ca@valencia]": "Envia per correu electrònic", "Description[ca]": "Envia per correu electrònic", "Description[cs]": "Poslat emailem", "Description[da]": "Send via e-mail", "Description[de]": "Als E-Mail senden", "Description[en_GB]": "Send via Email", "Description[es]": "Enviar por correo electrónico", "Description[eu]": "Bidali e-posta bidez", "Description[fi]": "Lähetä sähköpostitse", "Description[fr]": "Envoyer par courriel", "Description[gl]": "Enviar por correo electrónico", "Description[hu]": "Küldés e-mailben", "Description[id]": "Mengirim via Email", "Description[it]": "Invia per posta elettronica", "Description[ko]": "이메일로 보내기", "Description[nl]": "Verzenden via e-mail", "Description[nn]": "Send via e-post", "Description[pl]": "Wyślij pocztą", "Description[pt]": "Enviar por E-mail", "Description[pt_BR]": "Envia por e-mail", "Description[ru]": "Отправка по электронной почте", "Description[sk]": "Poslať cez Email", "Description[sv]": "Skicka med e-post", "Description[tr]": "Eposta olarak gönder", "Description[uk]": "Надсилання електронною поштою", "Description[x-test]": "xxSend via Emailxx", "Description[zh_CN]": "通过电子邮件发送", "Description[zh_TW]": "透過電子郵件傳送", "Icon": "mail-message", "License": "GPL", - "Name": "Send via Email...", + "Name": "Send via Email", "Name[ar]": "أرسِل عبر البريد الإلكتروني…", "Name[ca@valencia]": "Envia per correu electrònic....", "Name[ca]": "Envia per correu electrònic....", "Name[cs]": "Poslat emailem...", "Name[da]": "Send via e-mail...", "Name[de]": "Als E-Mail senden ...", "Name[en_GB]": "Send via Email...", "Name[es]": "Enviar por correo electrónico...", "Name[eu]": "Bidali e-posta bidez...", "Name[fi]": "Lähetä sähköpostitse…", "Name[fr]": "Envoyer par courriel...", "Name[gl]": "Enviar por correo electrónico…", "Name[hu]": "Küldés e-mailben…", "Name[id]": "Kirim via Email...", "Name[it]": "Invia per posta elettronica...", "Name[ko]": "이메일로 보내기...", "Name[nl]": "Verzenden via e-mail...", "Name[nn]": "Send via e-post …", "Name[pl]": "Wyślij pocztą...", "Name[pt]": "Enviar por E-mail...", "Name[pt_BR]": "Enviar por e-mail...", "Name[ru]": "Отправить по электронной почте...", "Name[sk]": "Poslať cez Email...", "Name[sv]": "Skicka med e-post...", "Name[tr]": "Eposta olarak gönder...", "Name[uk]": "Надіслати електронною поштою…", "Name[x-test]": "xxSend via Email...xx", "Name[zh_CN]": "通过电子邮件发送...", "Name[zh_TW]": "透過電子郵件傳送……" }, "X-Purpose-Configuration": [], "X-Purpose-Constraints": [], "X-Purpose-PluginTypes": [ "Export", "ShareUrl" - ] + ], + "X-Purpose-ActionDisplay": "Send via Email..." } diff --git a/src/plugins/imgur/imgurplugin.json b/src/plugins/imgur/imgurplugin.json index 534e345..d28c9aa 100644 --- a/src/plugins/imgur/imgurplugin.json +++ b/src/plugins/imgur/imgurplugin.json @@ -1,113 +1,114 @@ { "KPlugin": { "Authors": [ { "Name": "Aleix Pol", "Name[ar]": "Aleix Pol", "Name[ca@valencia]": "Aleix Pol", "Name[ca]": "Aleix Pol", "Name[cs]": "Aleix Pol", "Name[da]": "Aleix Pol", "Name[de]": "Aleix Pol", "Name[el]": "Aleix Pol", "Name[en_GB]": "Aleix Pol", "Name[es]": "Aleix Pol", "Name[eu]": "Aleix Pol", "Name[fi]": "Aleix Pol", "Name[fr]": "Aleix Pol", "Name[gl]": "Aleix Pol", "Name[hu]": "Aleix Pol", "Name[id]": "Aleix Pol", "Name[it]": "Aleix Pol", "Name[ko]": "Aleix Pol", "Name[nl]": "Aleix Pol", "Name[nn]": "Aleix Pol", "Name[pl]": "Aleix Pol", "Name[pt]": "Aleix Pol", "Name[pt_BR]": "Aleix Pol", "Name[ru]": "Aleix Pol", "Name[sk]": "Aleix Pol", "Name[sv]": "Aleix Pol", "Name[tr]": "Aleix Pol", "Name[uk]": "Aleix Pol", "Name[x-test]": "xxAleix Polxx", "Name[zh_CN]": "Aleix Pol", "Name[zh_TW]": "Aleix Pol" } ], "Category": "Utilities", "Description": "Upload pictures to Imgur", "Description[ar]": "ارفع الصور على Imgur", "Description[ca@valencia]": "Puja imatges a Imgur", "Description[ca]": "Puja imatges a Imgur", "Description[cs]": "Odeslat obrázky na Imgur", "Description[da]": "Upload billeder til Imgur", "Description[de]": "Bilder zu Imgur hochladen", "Description[el]": "Αποστολή εικόνων στο Imgur", "Description[en_GB]": "Upload pictures to Imgur", "Description[es]": "Enviar imágenes a imgur", "Description[eu]": "Igo irudia Imgur-rera", "Description[fi]": "Lähetä kuvia Imguriin", "Description[fr]": "Envoyer des images vers Imgur", "Description[gl]": "Enviar imaxes a Imgur.", "Description[hu]": "Képek feltöltése az Imgurre", "Description[id]": "Mengunggah gambar ke Imgur", "Description[it]": "Carica immagini su Imgur", "Description[ko]": "Imgur에 사진 업로드", "Description[nl]": "Afbeeldingen uploaden naar Imgur", "Description[nn]": "Last opp bilete til Imgur", "Description[pl]": "Wyślij zdjęcia na imgur", "Description[pt]": "Enviar as imagens para o Imgur", "Description[pt_BR]": "Envia imagens para Imgur", "Description[ru]": "Загрузка изображений на Imgur", "Description[sk]": "Nahrať obrázky na Imgur", "Description[sv]": "Ladda upp bilder till Imgur", "Description[tr]": "Resimleri Imgur'e yükle", "Description[uk]": "Вивантаження зображень на Imgur", "Description[x-test]": "xxUpload pictures to Imgurxx", "Description[zh_CN]": "将图片上传到 Imgur", "Description[zh_TW]": "上傳圖片到 Imgur", "Icon": "edit-paste", "License": "GPL", "Name": "Imgur", "Name[ar]": "Imgur", "Name[bs]": "Imgur", "Name[ca@valencia]": "Imgur", "Name[ca]": "Imgur", "Name[cs]": "Imgur", "Name[da]": "Imgur", "Name[de]": "Imgur", "Name[el]": "Imgur", "Name[en_GB]": "Imgur", "Name[es]": "Imgur", "Name[eu]": "Imgur", "Name[fi]": "Imgur", "Name[fr]": "Imgur", "Name[gl]": "Imgur", "Name[hu]": "Imgur", "Name[id]": "Imgur", "Name[it]": "Imgur", "Name[ko]": "Imgur", "Name[nl]": "Imgur", "Name[nn]": "Imgur", "Name[pl]": "Imgur", "Name[pt]": "Imgur", "Name[pt_BR]": "Imgur", "Name[ro]": "Imgur", "Name[ru]": "Imgur", "Name[sk]": "Imgur", "Name[sv]": "Imgur", "Name[tr]": "Imgur", "Name[uk]": "Imgur", "Name[x-test]": "xxImgurxx", "Name[zh_CN]": "Imgur", "Name[zh_TW]": "Imgur" }, "X-Purpose-Configuration": [], "X-Purpose-Constraints": [ "mimeType:image/*" ], "X-Purpose-PluginTypes": [ "Export" - ] + ], + "X-Purpose-ActionDisplay": "Imgur" } diff --git a/src/plugins/kdeconnect/kdeconnectplugin.json b/src/plugins/kdeconnect/kdeconnectplugin.json index 940e309..f1362de 100644 --- a/src/plugins/kdeconnect/kdeconnectplugin.json +++ b/src/plugins/kdeconnect/kdeconnectplugin.json @@ -1,115 +1,116 @@ { "KPlugin": { "Authors": [ { "Name": "Aleix Pol", "Name[ar]": "Aleix Pol", "Name[ca@valencia]": "Aleix Pol", "Name[ca]": "Aleix Pol", "Name[cs]": "Aleix Pol", "Name[da]": "Aleix Pol", "Name[de]": "Aleix Pol", "Name[el]": "Aleix Pol", "Name[en_GB]": "Aleix Pol", "Name[es]": "Aleix Pol", "Name[eu]": "Aleix Pol", "Name[fi]": "Aleix Pol", "Name[fr]": "Aleix Pol", "Name[gl]": "Aleix Pol", "Name[hu]": "Aleix Pol", "Name[id]": "Aleix Pol", "Name[it]": "Aleix Pol", "Name[ko]": "Aleix Pol", "Name[nl]": "Aleix Pol", "Name[nn]": "Aleix Pol", "Name[pl]": "Aleix Pol", "Name[pt]": "Aleix Pol", "Name[pt_BR]": "Aleix Pol", "Name[ru]": "Aleix Pol", "Name[sk]": "Aleix Pol", "Name[sv]": "Aleix Pol", "Name[tr]": "Aleix Pol", "Name[uk]": "Aleix Pol", "Name[x-test]": "xxAleix Polxx", "Name[zh_CN]": "Aleix Pol", "Name[zh_TW]": "Aleix Pol" } ], "Category": "Utilities", "Description": "Send through KDE Connect", "Description[ar]": "أرسِل عبر «كدي المتّصل»", "Description[ca@valencia]": "Envia a través del KDE Connect", "Description[ca]": "Envia a través del KDE Connect", "Description[cs]": "Poslat přes KDE Connect", "Description[da]": "Send via KDE Connect", "Description[de]": "Mit KDE-Connect versenden", "Description[el]": "Αποστολή μέσω KDE Connect", "Description[en_GB]": "Send through KDE Connect", "Description[es]": "Enviar a través de KDE Connect", "Description[eu]": "Bidali KDE Connect bitartez", "Description[fi]": "Lähetä KDE Connectilla", "Description[fr]": "Envoyer via KDE Connect", "Description[gl]": "Enviar mediante KDE Connect.", "Description[hu]": "Küldés a KDE Connecttel", "Description[id]": "Pengiriman melalui KDE Connect", "Description[it]": "Invia tramite KDE Connect", "Description[ko]": "KDE Connect로 보내기", "Description[nl]": "Via KDE Connect verzenden", "Description[nn]": "Send via KDE Connect", "Description[pl]": "Wyślij przez KDE Connect", "Description[pt]": "Enviar pelo KDE Connect", "Description[pt_BR]": "Enviar através do KDE Connect", "Description[ru]": "Отправка через KDE Connect", "Description[sk]": "Poslať cez KDE Connect", "Description[sv]": "Skicka via KDE-anslut", "Description[tr]": "KDE Bağlantısı ile gönder", "Description[uk]": "Надіслати за допомогою KDE Connect", "Description[x-test]": "xxSend through KDE Connectxx", "Description[zh_CN]": "通过 KDE Connect 发送", "Description[zh_TW]": "透過 KDE Connect 傳送", "Icon": "kdeconnect", "License": "GPL", - "Name": "Send To Device...", + "Name": "Send To Device", "Name[ar]": "أرسِل إلى جهاز…", "Name[ca@valencia]": "Envia a un dispositiu...", "Name[ca]": "Envia a un dispositiu...", "Name[cs]": "Poslat na zařízení...", "Name[da]": "Send til enhed...", "Name[de]": "An Gerät senden ...", "Name[el]": "Αποστολή σε συσκευή...", "Name[en_GB]": "Send To Device...", "Name[es]": "Enviar a dispositivo...", "Name[eu]": "Bidali gailura...", "Name[fi]": "Lähetä laitteeseen…", "Name[fr]": "Envoyer vers un périphérique...", "Name[gl]": "Enviar a un dispositivo…", "Name[hu]": "Küldés eszközre…", "Name[id]": "Kirim Ke Perangkat...", "Name[it]": "Invia al dispositivo...", "Name[ko]": "장치로 보내기...", "Name[nl]": "Naar apparaat verzenden...", "Name[nn]": "Send til eining …", "Name[pl]": "Wyślij na urządzenie...", "Name[pt]": "Enviar para o Dispositivo...", "Name[pt_BR]": "Enviar para o dispositivo...", "Name[ro]": "Trimite către dispozitiv...", "Name[ru]": "Отправить на устройство...", "Name[sk]": "Poslať na zariadenie...", "Name[sv]": "Skicka till enhet...", "Name[tr]": "Aygıta Gönder...", "Name[uk]": "Надіслати на пристрій…", "Name[x-test]": "xxSend To Device...xx", "Name[zh_CN]": "发送到设备", "Name[zh_TW]": "傳送到裝置..." }, "X-Purpose-Configuration": [ "device" ], "X-Purpose-Constraints": [ "dbus:org.kde.kdeconnect" ], "X-Purpose-PluginTypes": [ "Export", "ShareUrl" - ] + ], + "X-Purpose-ActionDisplay": "Send To Device..." } diff --git a/src/plugins/kdeconnect_sms/kdeconnectsmsplugin.json b/src/plugins/kdeconnect_sms/kdeconnectsmsplugin.json index aa353b2..cf31206 100644 --- a/src/plugins/kdeconnect_sms/kdeconnectsmsplugin.json +++ b/src/plugins/kdeconnect_sms/kdeconnectsmsplugin.json @@ -1,95 +1,96 @@ { "KPlugin": { "Authors": [ { "Name": "Nicolas Fella", "Name[ar]": "Nicolas Fella", "Name[ca@valencia]": "Nicolas Fella", "Name[ca]": "Nicolas Fella", "Name[cs]": "Nicolas Fella", "Name[da]": "Nicolas Fella", "Name[de]": "Nicolas Fella", "Name[en_GB]": "Nicolas Fella", "Name[es]": "Nicolas Fella", "Name[eu]": "Nicolas Fella", "Name[fi]": "Nicolas Fella", "Name[fr]": "Nicolas Fella", "Name[gl]": "Nicolas Fella", "Name[hu]": "Nicolas Fella", "Name[id]": "Nicolas Fella", "Name[it]": "Nicolas Fella", "Name[ko]": "Nicolas Fella", "Name[nl]": "Nicolas Fella", "Name[nn]": "Nicolas Fella", "Name[pl]": "Nicolas Fella", "Name[pt]": "Nicolas Fella", "Name[pt_BR]": "Nicolas Fella", "Name[ru]": "Nicolas Fella", "Name[sk]": "Nicolas Fella", "Name[sv]": "Nicolas Fella", "Name[uk]": "Nicolas Fella", "Name[x-test]": "xxNicolas Fellaxx", "Name[zh_CN]": "Nicolas Fella", "Name[zh_TW]": "Nicolas Fella" } ], "Category": "Utilities", "Description": "Send SMS via KDE Connect", "Description[ca@valencia]": "Envia un SMS a través del KDE Connect", "Description[ca]": "Envia un SMS a través del KDE Connect", "Description[da]": "Send sms via KDE Connect", "Description[de]": "SMS mit KDE-Connect versenden", "Description[en_GB]": "Send SMS via KDE Connect", "Description[es]": "Enviar SMS a través de KDE Connect", "Description[eu]": "Bidali SMS bat KDE Connect bitartez", "Description[fi]": "Lähetä KDE Connectilla tekstiviesti", "Description[fr]": "Envoyer un SMS via KDE Connect", "Description[gl]": "Enviar unha SMS mediante KDE Connect", "Description[id]": "Kirim SMS via KDE Connect", "Description[it]": "Invia SMS con KDE Connect", "Description[ko]": "KDE Connect로 문자 메시지 보내기", "Description[nl]": "SMS via KDE Connect verzenden", "Description[nn]": "Send SMS via KDE Connect", "Description[pl]": "Wyślij esemesa przez KDE Connect", "Description[pt]": "Enviar um SMS pelo KDE Connect", "Description[pt_BR]": "Enviar SMS via KDE Connect", "Description[sv]": "Skicka SMS via KDE-anslut", "Description[uk]": "Надсилання SMS за допомогою KDE Connect", "Description[x-test]": "xxSend SMS via KDE Connectxx", "Description[zh_CN]": "通过 KDE Connect 发送短信", "Description[zh_TW]": "透過 KDE 連線傳送簡訊", "Icon": "kdeconnect", "License": "GPL", - "Name": "Send SMS via KDE Connect...", + "Name": "Send SMS via KDE Connect", "Name[ca@valencia]": "Envia un SMS a través del KDE Connect...", "Name[ca]": "Envia un SMS a través del KDE Connect...", "Name[da]": "Send sms via KDE Connect...", "Name[de]": "SMS mit KDE-Connect versenden ...", "Name[en_GB]": "Send SMS via KDE Connect...", "Name[es]": "Enviar SMS a través de KDE Connect...", "Name[eu]": "Bidali SMS bat KDE Connect bitartez...", "Name[fi]": "Lähetä KDE Connectilla tekstiviesti…", "Name[fr]": "Envoyer un SMS via KDE Connect...", "Name[gl]": "Enviar unha SMS mediante KDE Connect…", "Name[id]": "Kirim SMS via KDE Connect...", "Name[it]": "Invia SMS con KDE Connect...", "Name[ko]": "KDE Connect로 문자 메시지 보내기...", "Name[nl]": "SMS via KDE Connect verzenden...", "Name[nn]": "Send SMS via KDE Connect …", "Name[pl]": "Wyślij esemesa przez KDE Connect...", "Name[pt]": "Enviar um SMS pelo KDE Connect...", "Name[pt_BR]": "Enviar SMS via KDE Connect...", "Name[sv]": "Skicka SMS via KDE-anslut...", "Name[uk]": "Надіслати SMS за допомогою KDE Connect…", "Name[x-test]": "xxSend SMS via KDE Connect...xx", "Name[zh_CN]": "通过 KDE Connect 发送短信...", "Name[zh_TW]": "透過 KDE 連線傳送簡訊…" }, "X-Purpose-Configuration": [], "X-Purpose-Constraints": [ "application:org.kde.kdeconnect.sms.desktop" ], "X-Purpose-PluginTypes": [ "ShareUrl" - ] + ], + "X-Purpose-ActionDisplay": "Send SMS via KDE Connect..." } diff --git a/src/plugins/ktp-sendfile/ktpsendfileplugin.json b/src/plugins/ktp-sendfile/ktpsendfileplugin.json index 1ba1863..e47a2a4 100644 --- a/src/plugins/ktp-sendfile/ktpsendfileplugin.json +++ b/src/plugins/ktp-sendfile/ktpsendfileplugin.json @@ -1,113 +1,114 @@ { "KPlugin": { "Authors": [ { "Name": "Aleix Pol", "Name[ar]": "Aleix Pol", "Name[ca@valencia]": "Aleix Pol", "Name[ca]": "Aleix Pol", "Name[cs]": "Aleix Pol", "Name[da]": "Aleix Pol", "Name[de]": "Aleix Pol", "Name[el]": "Aleix Pol", "Name[en_GB]": "Aleix Pol", "Name[es]": "Aleix Pol", "Name[eu]": "Aleix Pol", "Name[fi]": "Aleix Pol", "Name[fr]": "Aleix Pol", "Name[gl]": "Aleix Pol", "Name[hu]": "Aleix Pol", "Name[id]": "Aleix Pol", "Name[it]": "Aleix Pol", "Name[ko]": "Aleix Pol", "Name[nl]": "Aleix Pol", "Name[nn]": "Aleix Pol", "Name[pl]": "Aleix Pol", "Name[pt]": "Aleix Pol", "Name[pt_BR]": "Aleix Pol", "Name[ru]": "Aleix Pol", "Name[sk]": "Aleix Pol", "Name[sv]": "Aleix Pol", "Name[tr]": "Aleix Pol", "Name[uk]": "Aleix Pol", "Name[x-test]": "xxAleix Polxx", "Name[zh_CN]": "Aleix Pol", "Name[zh_TW]": "Aleix Pol" } ], "Category": "Utilities", "Description": "Send through Instant Messaging", "Description[ar]": "أرسِل عبر «التراسل الآني»", "Description[ca@valencia]": "Envia a través de missatgeria instantània", "Description[ca]": "Envia a través de missatgeria instantània", "Description[cs]": "Poslat skrz chat", "Description[da]": "Send via instant messaging", "Description[de]": "Mit Instant-Messaging versenden", "Description[el]": "Αποστολή με στιγμιαίο μήνυμα", "Description[en_GB]": "Send through Instant Messaging", "Description[es]": "Enviar por mensajería instantánea", "Description[eu]": "Bidali berehalako mezularitza bitartez", "Description[fi]": "Lähetä pikaviestinnän välityksellä", "Description[fr]": "Envoyer via messagerie instantanée", "Description[gl]": "Enviar por mensaxaría instantánea.", "Description[hu]": "Küldés azonnali üzenetküldéssel", "Description[id]": "Pengiriman melalui Instant Messaging", "Description[it]": "Invia tramite messaggistica istantanea", "Description[ko]": "인스턴트 메신저로 보내기", "Description[nl]": "Via Instant Messaging verzenden", "Description[nn]": "Send via lynmelding", "Description[pl]": "Wyślij przez komunikatora internetowego", "Description[pt]": "Enviar pelas Mensagens Instantâneas", "Description[pt_BR]": "Envia por mensagem instantânea", "Description[ru]": "Отправка в личном сообщении", "Description[sk]": "Poslať cez instantné správy", "Description[sv]": "Skicka via direktmeddelanden", "Description[tr]": "Anında Mesajlaşma ile Gönder", "Description[uk]": "Надіслати за допомогою служби обміну повідомленнями", "Description[x-test]": "xxSend through Instant Messagingxx", "Description[zh_CN]": "通过即时消息发送", "Description[zh_TW]": "透過即時訊息傳送", "Icon": "im-user", "License": "GPL", - "Name": "Send To Contact...", + "Name": "Send To Contact", "Name[ar]": "أرسِل إلى متراسل…", "Name[bs]": "Šalji na kontakt...", "Name[ca@valencia]": "Envia a un contacte...", "Name[ca]": "Envia a un contacte...", "Name[cs]": "Poslat kontaktu...", "Name[da]": "Send til kontakt...", "Name[de]": "An Kontakt senden ...", "Name[el]": "Αποστολή σε επαφή...", "Name[en_GB]": "Send To Contact...", "Name[es]": "Enviar a contacto...", "Name[eu]": "Bidali kontaktuari...", "Name[fi]": "Lähetä yhteystiedolle…", "Name[fr]": "Envoyer au contact...", "Name[gl]": "Enviar a un contacto…", "Name[hu]": "Küldés névjegynek…", "Name[id]": "Kirim Ke Contact...", "Name[it]": "Invia a contatto...", "Name[ko]": "연락처에게 보내기...", "Name[nl]": "Naar contactpersoon verzenden...", "Name[nn]": "Send til kontakt …", "Name[pl]": "Wyślij do kontaktu...", "Name[pt]": "Enviar para o Contacto...", "Name[pt_BR]": "Enviar para o contato...", "Name[ro]": "Trimite către contact...", "Name[ru]": "Отправить в сообщении...", "Name[sk]": "Poslať do kontaktu...", "Name[sv]": "Skicka till kontakt...", "Name[tr]": "Bağlantıya Gönder...", "Name[uk]": "Надіслати контакту…", "Name[x-test]": "xxSend To Contact...xx", "Name[zh_CN]": "发送到联系人...", "Name[zh_TW]": "傳送給聯絡人..." }, "X-Purpose-Configuration": "", "X-Purpose-Constraints": [ "exec:ktp-send-file" ], "X-Purpose-PluginTypes": [ "Export" - ] + ], + "X-Purpose-ActionDisplay": "Send To Contact..." } diff --git a/src/plugins/nextcloud/nextcloudplugin.json b/src/plugins/nextcloud/nextcloudplugin.json index 149f5f9..37ff173 100644 --- a/src/plugins/nextcloud/nextcloudplugin.json +++ b/src/plugins/nextcloud/nextcloudplugin.json @@ -1,108 +1,109 @@ { "KPlugin": { "Authors": [ { "Name": "Lim Yuen Hoe", "Name[ar]": "Lim Yuen Hoe", "Name[ca@valencia]": "Lim Yuen Hoe", "Name[ca]": "Lim Yuen Hoe", "Name[cs]": "Lim Yuen Hoe", "Name[da]": "Lim Yuen Hoe", "Name[de]": "Lim Yuen Hoe", "Name[en_GB]": "Lim Yuen Hoe", "Name[es]": "Lim Yuen Hoe", "Name[eu]": "Lim Yuen Hoe", "Name[fi]": "Lim Yuen Hoe", "Name[fr]": "Lim Yuen Hoe", "Name[gl]": "Lim Yuen Hoe", "Name[hu]": "Lim Yuen Hoe", "Name[id]": "Lim Yuen Hoe", "Name[it]": "Lim Yuen Hoe", "Name[ko]": "Lim Yuen Hoe", "Name[nl]": "Lim Yuen Hoe", "Name[nn]": "Lim Yuen Hoe", "Name[pl]": "Lim Yuen Hoe", "Name[pt]": "Lim Yuen Hoe", "Name[pt_BR]": "Lim Yuen Hoe", "Name[ru]": "Lim Yuen Hoe", "Name[sk]": "Lim Yuen Hoe", "Name[sv]": "Lim Yuen Hoe", "Name[tr]": "Lim Yuen Hoe", "Name[uk]": "Lim Yuen Hoe", "Name[x-test]": "xxLim Yuen Hoexx", "Name[zh_CN]": "Lim Yuen Hoe", "Name[zh_TW]": "Lim Yuen Hoe" } ], "Category": "Utilities", "Description": "Upload files to Nextcloud", "Description[ar]": "ارفع الملفات على «نِكست‌كلاود»", "Description[ca@valencia]": "Puja els fitxers al Nextcloud", "Description[ca]": "Puja els fitxers al Nextcloud", "Description[cs]": "Odeslat soubory do Nextcloudu", "Description[da]": "Upload filer til Nextcloud", "Description[de]": "Dateien auf Nextcloud hochladen", "Description[en_GB]": "Upload files to Nextcloud", "Description[es]": "Enviar archivos a Nextcloud", "Description[eu]": "Igo fitxategiak NextCloud-era", "Description[fi]": "Lähetä Nextcloudiin tiedostoja", "Description[fr]": "Envoyer des fichiers vers Nextcloud", "Description[gl]": "Enviar ficheiros a NextCloud.", "Description[hu]": "Fájlok feltöltése Nextcloudba", "Description[id]": "Unggah file ke Nextcloud", "Description[it]": "Carica file su Nextcloud", "Description[ko]": "Nextcloud에 파일 업로드", "Description[nl]": "Bestanden naar Nextcloud uploaden", "Description[nn]": "Last opp filer til Nextcloud", "Description[pl]": "Wyślij pliki na Nextcloud", "Description[pt]": "Enviar os vídeos para o NextCloud", "Description[pt_BR]": "Envia arquivos para o Nextcloud", "Description[ru]": "Загрузка файлов в Nextcloud", "Description[sk]": "Nahrať súbory na Nextcloud", "Description[sv]": "Ladda upp filer till Nextcloud", "Description[tr]": "Dosyaları Nextcloud'a yükle", "Description[uk]": "Вивантаження відео на Nextcloud", "Description[x-test]": "xxUpload files to Nextcloudxx", "Description[zh_CN]": "将文件上传到 Nextcloud", "Description[zh_TW]": "上傳檔案到 Nextcloud", "Icon": "edit-paste", "License": "GPL", "Name": "NextCloud", "Name[ar]": "نِكست‌كلاود", "Name[ca@valencia]": "NextCloud", "Name[ca]": "NextCloud", "Name[cs]": "NextCloud", "Name[da]": "NextCloud", "Name[de]": "NextCloud", "Name[en_GB]": "NextCloud", "Name[es]": "NextCloud", "Name[eu]": "NextCloud", "Name[fi]": "NextCloud", "Name[fr]": "NextCloud", "Name[gl]": "NextCloud", "Name[hu]": "NextCloud", "Name[id]": "NextCloud", "Name[it]": "NextCloud", "Name[ko]": "NextCloud", "Name[nl]": "NextCloud", "Name[nn]": "NextCloud", "Name[pl]": "NextCloud", "Name[pt]": "NextCloud", "Name[pt_BR]": "NextCloud", "Name[ru]": "Nextcloud", "Name[sk]": "NextCloud", "Name[sv]": "Nextcloud", "Name[tr]": "NextCloud", "Name[uk]": "NextCloud", "Name[x-test]": "xxNextCloudxx", "Name[zh_CN]": "NextCloud", "Name[zh_TW]": "NextCloud" }, "X-Purpose-Configuration": [ "folder", "accountId" ], "X-Purpose-PluginTypes": [ "Export" - ] + ], + "X-Purpose-ActionDisplay": "NextCloud..." } diff --git a/src/plugins/pastebin/pastebinplugin.json b/src/plugins/pastebin/pastebinplugin.json index 8198b39..5ac2f95 100644 --- a/src/plugins/pastebin/pastebinplugin.json +++ b/src/plugins/pastebin/pastebinplugin.json @@ -1,113 +1,114 @@ { "KPlugin": { "Authors": [ { "Name": "Aleix Pol", "Name[ar]": "Aleix Pol", "Name[ca@valencia]": "Aleix Pol", "Name[ca]": "Aleix Pol", "Name[cs]": "Aleix Pol", "Name[da]": "Aleix Pol", "Name[de]": "Aleix Pol", "Name[el]": "Aleix Pol", "Name[en_GB]": "Aleix Pol", "Name[es]": "Aleix Pol", "Name[eu]": "Aleix Pol", "Name[fi]": "Aleix Pol", "Name[fr]": "Aleix Pol", "Name[gl]": "Aleix Pol", "Name[hu]": "Aleix Pol", "Name[id]": "Aleix Pol", "Name[it]": "Aleix Pol", "Name[ko]": "Aleix Pol", "Name[nl]": "Aleix Pol", "Name[nn]": "Aleix Pol", "Name[pl]": "Aleix Pol", "Name[pt]": "Aleix Pol", "Name[pt_BR]": "Aleix Pol", "Name[ru]": "Aleix Pol", "Name[sk]": "Aleix Pol", "Name[sv]": "Aleix Pol", "Name[tr]": "Aleix Pol", "Name[uk]": "Aleix Pol", "Name[x-test]": "xxAleix Polxx", "Name[zh_CN]": "Aleix Pol", "Name[zh_TW]": "Aleix Pol" } ], "Category": "Utilities", "Description": "Upload text to Pastebin", "Description[ar]": "ارفع النص على «پيست‌بِن»", "Description[ca@valencia]": "Puja el text a Pastebin", "Description[ca]": "Puja el text a Pastebin", "Description[cs]": "Odeslat text na Pastebin", "Description[da]": "Upload tekst til Pastebin", "Description[de]": "Text zu Pastebin hochladen", "Description[el]": "Αποστολή κειμένου στο Pastebin", "Description[en_GB]": "Upload text to Pastebin", "Description[es]": "Enviar texto a Pastebin", "Description[eu]": "Igo testua Pastebin-era", "Description[fi]": "Lähetä Pastebiniin tekstiä", "Description[fr]": "Envoyer du texte vers Pastebin", "Description[gl]": "Enviar texto a Pastebin.", "Description[hu]": "Szöveg feltöltése a Pastebinre", "Description[id]": "Unggah teks ke Pastebin", "Description[it]": "Carica il testo su Pastebin", "Description[ko]": "Pastebin에 텍스트 업로드", "Description[nl]": "Tekst uploaden naar Pastebin", "Description[nn]": "Last opp tekst til Pastebin", "Description[pl]": "Wyślij tekst na Pastebin", "Description[pt]": "Enviar o texto para o Pastebin", "Description[pt_BR]": "Enviar o texto para o Pastebin", "Description[ru]": "Загрузка текста на Pastebin", "Description[sk]": "Nahrať text na Pastebin", "Description[sv]": "Ladda upp text till Pastebin", "Description[tr]": "Metni Pastebin'e yükle", "Description[uk]": "Вивантажити текст на Pastebin", "Description[x-test]": "xxUpload text to Pastebinxx", "Description[zh_CN]": "向 pastebin 上传文本", "Description[zh_TW]": "上傳文字到 Pastebin", "Icon": "edit-paste", "License": "GPL", "Name": "Pastebin", "Name[ar]": "پيست‌بِن", "Name[bs]": "Pastebin", "Name[ca@valencia]": "Pastebin", "Name[ca]": "Pastebin", "Name[cs]": "Pastebin", "Name[da]": "Pastebin", "Name[de]": "Pastebin", "Name[el]": "Pastebin", "Name[en_GB]": "Pastebin", "Name[es]": "Pastebin", "Name[eu]": "Pastebin", "Name[fi]": "Pastebin", "Name[fr]": "Pastebin", "Name[gl]": "Pastebin", "Name[hu]": "Pastebin", "Name[id]": "Pastebin", "Name[it]": "Pastebin", "Name[ko]": "Pastebin", "Name[nl]": "Pastebin", "Name[nn]": "Pastebin", "Name[pl]": "Pastebin", "Name[pt]": "Pastebin", "Name[pt_BR]": "Pastebin", "Name[ro]": "Pastebin", "Name[ru]": "Pastebin", "Name[sk]": "Pastebin", "Name[sv]": "Pastebin", "Name[tr]": "Pastebin", "Name[uk]": "Вставлячка", "Name[x-test]": "xxPastebinxx", "Name[zh_CN]": "Pastebin", "Name[zh_TW]": "Pastebin" }, "X-Purpose-Configuration": [], "X-Purpose-Constraints": [ "mimeType:text/plain" ], "X-Purpose-PluginTypes": [ "Export" - ] + ], + "X-Purpose-ActionDisplay": "Pastebin" } diff --git a/src/plugins/phabricator/phabricatorplugin.json b/src/plugins/phabricator/phabricatorplugin.json index 3504cf2..f73ff6b 100644 --- a/src/plugins/phabricator/phabricatorplugin.json +++ b/src/plugins/phabricator/phabricatorplugin.json @@ -1,113 +1,114 @@ { "KPlugin": { "Authors": [ { "Name": "René Bertin", "Name[ar]": "René Bertin", "Name[ca@valencia]": "René Bertin", "Name[ca]": "René Bertin", "Name[cs]": "René Bertin", "Name[da]": "René Bertin", "Name[de]": "René Bertin", "Name[en_GB]": "René Bertin", "Name[es]": "René Bertin", "Name[eu]": "René Bertin", "Name[fi]": "René Bertin", "Name[fr]": "René Bertin", "Name[gl]": "René Bertin", "Name[hu]": "René Bertin", "Name[id]": "René Bertin", "Name[it]": "René Bertin", "Name[ko]": "René Bertin", "Name[nl]": "René Bertin", "Name[nn]": "René Bertin", "Name[pl]": "René Bertin", "Name[pt]": "René Bertin", "Name[pt_BR]": "René Bertin", "Name[ru]": "René Bertin", "Name[sk]": "René Bertin", "Name[sv]": "René Bertin", "Name[tr]": "René Bertin", "Name[uk]": "René Bertin", "Name[x-test]": "xxRené Bertinxx", "Name[zh_CN]": "René Bertin", "Name[zh_TW]": "René Bertin" } ], "Category": "Utilities", "Description": "Upload patches to Phabricator", "Description[ar]": "ارفع الرُقع على «فابريكيتور»", "Description[ca@valencia]": "Puja els pedaços al Phabricator", "Description[ca]": "Puja els pedaços al Phabricator", "Description[cs]": "Odeslat soubory do Phabricatoru", "Description[da]": "Upload rettelser til Phabricator", "Description[de]": "Patch auf Phabricator hochladen", "Description[en_GB]": "Upload patches to Phabricator", "Description[es]": "Enviar parches a Phabricator", "Description[eu]": "Igo partxeak Phabricator-rera", "Description[fi]": "Lähetä Phabricatoriin paikkauksia", "Description[fr]": "Envoyer des correctifs vers Phabricator", "Description[gl]": "Enviar parches a Phabricator.", "Description[hu]": "Patchek feltöltése a Phabricatorra", "Description[id]": "Unggah tambalan ke Phabricator", "Description[it]": "Carica patch su Phabricator", "Description[ko]": "Phabricator에 패치 업로드", "Description[nl]": "Patches uploaden naar Phabricator", "Description[nn]": "Last opp patch-filer til Phabricator", "Description[pl]": "Wyślij łatę na Phabricator", "Description[pt]": "Enviar as modificações para o Phabricator", "Description[pt_BR]": "Envia correções para o Phabricator", "Description[ru]": "Отправка патчей в Phabricator", "Description[sk]": "Nahrať záplaty na Phabricator", "Description[sv]": "Ladda upp programfixar till Phabricator", "Description[tr]": "Yamaları Phabricator'e yükle", "Description[uk]": "Вивантажити латки на Phabricator", "Description[x-test]": "xxUpload patches to Phabricatorxx", "Description[zh_CN]": "将补丁上传到 Phabricator", "Description[zh_TW]": "上傳修補程式到 Phabricator", "Icon": "phabricator-purpose", "License": "GPL", "Name": "Phabricator", "Name[ar]": "فابريكيتور", "Name[ca@valencia]": "Phabricator", "Name[ca]": "Phabricator", "Name[cs]": "Phabricator", "Name[da]": "Phabricator", "Name[de]": "Phabricator", "Name[en_GB]": "Phabricator", "Name[es]": "Phabricator", "Name[eu]": "Phabricator", "Name[fi]": "Phabricator", "Name[fr]": "Phabricator", "Name[gl]": "Phabricator", "Name[hu]": "Phabricator", "Name[id]": "Phabricator", "Name[it]": "Phabricator", "Name[ko]": "Phabricator", "Name[nl]": "Phabricator", "Name[nn]": "Phabricator", "Name[pl]": "Phabricator", "Name[pt]": "Phabricator", "Name[pt_BR]": "Phabricator", "Name[ru]": "Phabricator", "Name[sk]": "Phabricator", "Name[sv]": "Phabricator", "Name[tr]": "Phabricator", "Name[uk]": "Phabricator", "Name[x-test]": "xxPhabricatorxx", "Name[zh_CN]": "Phabricator", "Name[zh_TW]": "Phabricator" }, "X-Purpose-Configuration": [ "updateDR", "doBrowse", "localBaseDir", "updateComment" ], "X-Purpose-Constraints": [ "mimeType:text/x-patch" ], "X-Purpose-PluginTypes": [ "Export" - ] + ], + "X-Purpose-ActionDisplay": "Phabricator..." } diff --git a/src/plugins/reviewboard/reviewboardplugin.json b/src/plugins/reviewboard/reviewboardplugin.json index 42507b7..369f3f9 100644 --- a/src/plugins/reviewboard/reviewboardplugin.json +++ b/src/plugins/reviewboard/reviewboardplugin.json @@ -1,118 +1,119 @@ { "KPlugin": { "Authors": [ { "Name": "Aleix Pol", "Name[ar]": "Aleix Pol", "Name[ca@valencia]": "Aleix Pol", "Name[ca]": "Aleix Pol", "Name[cs]": "Aleix Pol", "Name[da]": "Aleix Pol", "Name[de]": "Aleix Pol", "Name[el]": "Aleix Pol", "Name[en_GB]": "Aleix Pol", "Name[es]": "Aleix Pol", "Name[eu]": "Aleix Pol", "Name[fi]": "Aleix Pol", "Name[fr]": "Aleix Pol", "Name[gl]": "Aleix Pol", "Name[hu]": "Aleix Pol", "Name[id]": "Aleix Pol", "Name[it]": "Aleix Pol", "Name[ko]": "Aleix Pol", "Name[nl]": "Aleix Pol", "Name[nn]": "Aleix Pol", "Name[pl]": "Aleix Pol", "Name[pt]": "Aleix Pol", "Name[pt_BR]": "Aleix Pol", "Name[ru]": "Aleix Pol", "Name[sk]": "Aleix Pol", "Name[sv]": "Aleix Pol", "Name[tr]": "Aleix Pol", "Name[uk]": "Aleix Pol", "Name[x-test]": "xxAleix Polxx", "Name[zh_CN]": "Aleix Pol", "Name[zh_TW]": "Aleix Pol" } ], "Category": "Utilities", "Description": "Upload patches to reviewboard", "Description[ar]": "ارفع الرُقع إلى «لوحة المراجعة/Reviewboard»", "Description[ca@valencia]": "Puja els pedaços al «reviewboard»", "Description[ca]": "Puja els pedaços al «reviewboard»", "Description[da]": "Upload rettelser til reviewboard", "Description[de]": "Patch auf Reviewboard hochladen", "Description[el]": "Αποστολή διορθώσεων κώδικα στο reviewboard", "Description[en_GB]": "Upload patches to reviewboard", "Description[es]": "Enviar imágenes a reviewboard", "Description[eu]": "Igo partxeak reviewboard-era", "Description[fi]": "Lähetä Review Boardiin paikkauksia", "Description[fr]": "Envoyer des correctifs vers reviewboard", "Description[gl]": "Enviar parches a reviewboard.", "Description[hu]": "Patchek feltöltése a Review Boardra", "Description[id]": "Upload tambalan/patches ke reviewboard", "Description[it]": "Carica patch su reviewboard", "Description[ko]": "Review Board에 패치 업로드", "Description[nl]": "Patches uploaden naar reviewboard", "Description[nn]": "Last opp patch-filer til Review Board", "Description[pl]": "Wyślij łaty do rady opiniującej", "Description[pt]": "Enviar as modificações para o grupo de revisão", "Description[pt_BR]": "Enviar modificações para o painel de revisão", "Description[ru]": "Загрузка изображений на Imgur", "Description[sk]": "Nahrať záplaty na revíziu", "Description[sv]": "Ladda upp programfixar till Review Board", "Description[tr]": "Yamaları gözden geçirme panosuna yükle", "Description[uk]": "Вивантажує латки на reviewboard", "Description[x-test]": "xxUpload patches to reviewboardxx", "Description[zh_CN]": "向 reviewboard 上传补丁", "Description[zh_TW]": "上傳修補檔到 reviewboard", "Icon": "reviewboard-purpose", "License": "GPL", "Name": "Review Board", "Name[ar]": "لوحة المراجعات/Review Board", "Name[ca@valencia]": "Review Board", "Name[ca]": "Review Board", "Name[da]": "Review Board", "Name[de]": "Review Board", "Name[el]": "Review Board", "Name[en_GB]": "Review Board", "Name[es]": "Review Board", "Name[eu]": "Review Board", "Name[fi]": "Review Board", "Name[fr]": "Review Board", "Name[gl]": "Review Board", "Name[hu]": "Review Board", "Name[id]": "Review Board", "Name[it]": "Review Board", "Name[ko]": "Review Board", "Name[nl]": "Reviewboard", "Name[nn]": "Review Board", "Name[pl]": "Rada opiniująca", "Name[pt]": "Painel de Revisão", "Name[pt_BR]": "Painel de revisão", "Name[ru]": "Review Board", "Name[sk]": "Revízna komisia", "Name[sv]": "Review Board", "Name[tr]": "Gözden Geçirme Panosu", "Name[uk]": "Review Board", "Name[x-test]": "xxReview Boardxx", "Name[zh_CN]": "Review Board", "Name[zh_TW]": "Review Board" }, "X-Purpose-Configuration": [ "updateRR", "server", "username", "password", "baseDir", "repository", "extraData", "localBaseDir" ], "X-Purpose-Constraints": [ "mimeType:text/x-patch" ], "X-Purpose-PluginTypes": [ "Export" - ] + ], + "X-Purpose-ActionDisplay": "Review Board" } diff --git a/src/plugins/saveas/saveasplugin.json b/src/plugins/saveas/saveasplugin.json index b6ac6fe..6df895d 100644 --- a/src/plugins/saveas/saveasplugin.json +++ b/src/plugins/saveas/saveasplugin.json @@ -1,111 +1,112 @@ { "KPlugin": { "Authors": [ { "Name": "Aleix Pol", "Name[ar]": "Aleix Pol", "Name[ca@valencia]": "Aleix Pol", "Name[ca]": "Aleix Pol", "Name[cs]": "Aleix Pol", "Name[da]": "Aleix Pol", "Name[de]": "Aleix Pol", "Name[el]": "Aleix Pol", "Name[en_GB]": "Aleix Pol", "Name[es]": "Aleix Pol", "Name[eu]": "Aleix Pol", "Name[fi]": "Aleix Pol", "Name[fr]": "Aleix Pol", "Name[gl]": "Aleix Pol", "Name[hu]": "Aleix Pol", "Name[id]": "Aleix Pol", "Name[it]": "Aleix Pol", "Name[ko]": "Aleix Pol", "Name[nl]": "Aleix Pol", "Name[nn]": "Aleix Pol", "Name[pl]": "Aleix Pol", "Name[pt]": "Aleix Pol", "Name[pt_BR]": "Aleix Pol", "Name[ru]": "Aleix Pol", "Name[sk]": "Aleix Pol", "Name[sv]": "Aleix Pol", "Name[tr]": "Aleix Pol", "Name[uk]": "Aleix Pol", "Name[x-test]": "xxAleix Polxx", "Name[zh_CN]": "Aleix Pol", "Name[zh_TW]": "Aleix Pol" } ], "Category": "Utilities", "Description": "Saves the share into the chosen location.", "Description[ar]": "احفظ ما تريد مشاركته في مكان من اختيارك.", "Description[ca@valencia]": "Guarda la compartició a la ubicació escollida.", "Description[ca]": "Desa la compartició a la ubicació escollida.", "Description[da]": "Gemmer delingen til det valgte sted.", "Description[de]": "Speichert die Freigabe am ausgewählten Ort.", "Description[el]": "Αποθήκευση του διαμοιρασμένου στην επιλεγμένη τοποθεσία.", "Description[en_GB]": "Saves the share into the chosen location.", "Description[es]": "Guarda el recurso compartido en la ubicación elegida.", "Description[eu]": "Partekatua hautatutako kokapenean gordetzen du.", "Description[fi]": "Tallentaa jaettavan asian valittuun sijaintiin.", "Description[fr]": "Enregistre le partage à l'emplacement choisi.", "Description[gl]": "Garda a compartición no lugar escollido.", "Description[hu]": "Megosztás mentése a kiválasztott helyre.", "Description[id]": "Simpanan si berbagi ke dalam lokasi yang dipilih", "Description[it]": "Salva la condivisione nella posizione scelta.", "Description[ko]": "공유한 항목을 지정한 위치에 저장합니다.", "Description[nl]": "Slaat de share op in de gekozen locatie.", "Description[nn]": "Lagra til valt plassering.", "Description[pl]": "Zapisuje plik udostępniony w wybranym miejscu.", "Description[pt]": "Grava a partilha na localização indicada.", "Description[pt_BR]": "Salva o compartilhamento na localização indicada.", "Description[ru]": "Сохраняет общий файл в указанное расположение.", "Description[sk]": "Uloží zdieľanie do vybraného umiestnenia.", "Description[sv]": "Sparar delade objekt på vald plats.", "Description[tr]": "Paylaşımı seçilen konuma kaydeder.", "Description[uk]": "Зберігає спільний ресурс до вказаного каталогу.", "Description[x-test]": "xxSaves the share into the chosen location.xx", "Description[zh_CN]": "将共享保存到所选位置。", "Description[zh_TW]": "儲存分享到選定的位置。", "Icon": "document-save", "License": "GPL", - "Name": "Save as...", + "Name": "Save as", "Name[ar]": "احفظ كَ‍…", "Name[ca@valencia]": "Guarda com a...", "Name[ca]": "Desa com a...", "Name[cs]": "Uložit jako...", "Name[da]": "Gem som...", "Name[de]": "Speichern unter ...", "Name[el]": "Αποθήκευση ως...", "Name[en_GB]": "Save as...", "Name[es]": "Guardar como...", "Name[eu]": "Gorde honela...", "Name[fi]": "Tallenna nimellä…", "Name[fr]": "Enregistrer sous...", "Name[gl]": "Gardar como…", "Name[hu]": "Mentés másként…", "Name[id]": "Simpan sebagai...", "Name[it]": "Salva come...", "Name[ko]": "다른 이름으로 저장...", "Name[nl]": "Opslaan als...", "Name[nn]": "Lagra som …", "Name[pl]": "Zapisz jako...", "Name[pt]": "Gravar como...", "Name[pt_BR]": "Salvar como...", "Name[ro]": "Salvează ca...", "Name[ru]": "Сохранить в файл...", "Name[sk]": "Uložiť ako...", "Name[sv]": "Spara som...", "Name[tr]": "Farklı kaydet...", "Name[uk]": "Зберегти як…", "Name[x-test]": "xxSave as...xx", "Name[zh_CN]": "另存为...", "Name[zh_TW]": "另存為..." }, "X-Purpose-Configuration": [ "destinationPath" ], "X-Purpose-Constraints": [], "X-Purpose-PluginTypes": [ "Export" - ] + ], + "X-Purpose-ActionDisplay": "Save as..." } diff --git a/src/plugins/telegram/telegramplugin.json b/src/plugins/telegram/telegramplugin.json index eef266d..ad08a5a 100644 --- a/src/plugins/telegram/telegramplugin.json +++ b/src/plugins/telegram/telegramplugin.json @@ -1,108 +1,109 @@ { "KPlugin": { "Authors": [ { "Name": "Nicolas Fella", "Name[ar]": "Nicolas Fella", "Name[ca@valencia]": "Nicolas Fella", "Name[ca]": "Nicolas Fella", "Name[cs]": "Nicolas Fella", "Name[da]": "Nicolas Fella", "Name[de]": "Nicolas Fella", "Name[en_GB]": "Nicolas Fella", "Name[es]": "Nicolas Fella", "Name[eu]": "Nicolas Fella", "Name[fi]": "Nicolas Fella", "Name[fr]": "Nicolas Fella", "Name[gl]": "Nicolas Fella", "Name[hu]": "Nicolas Fella", "Name[id]": "Nicolas Fella", "Name[it]": "Nicolas Fella", "Name[ko]": "Nicolas Fella", "Name[nl]": "Nicolas Fella", "Name[nn]": "Nicolas Fella", "Name[pl]": "Nicolas Fella", "Name[pt]": "Nicolas Fella", "Name[pt_BR]": "Nicolas Fella", "Name[ru]": "Nicolas Fella", "Name[sk]": "Nicolas Fella", "Name[sv]": "Nicolas Fella", "Name[uk]": "Nicolas Fella", "Name[x-test]": "xxNicolas Fellaxx", "Name[zh_CN]": "Nicolas Fella", "Name[zh_TW]": "Nicolas Fella" } ], "Category": "Utilities", "Description": "Send via Telegram", "Description[ar]": "أرسِل عبر «تلغرام»", "Description[ca@valencia]": "Envia via Telegram", "Description[ca]": "Envia via Telegram", "Description[cs]": "Poslat přes Telegram", "Description[da]": "Send via Telegram", "Description[de]": "Mit Telegram senden", "Description[en_GB]": "Send via Telegram", "Description[es]": "Enviar por Telegram", "Description[eu]": "Bidali Telegram bidez", "Description[fi]": "Lähetä Telegramilla", "Description[fr]": "Envoyer par Telegram", "Description[gl]": "Enviar por Telegram", "Description[hu]": "Küldés Telegramon", "Description[id]": "Mengirim via Telegram", "Description[it]": "Invia con Telegram", "Description[ko]": "텔레그램으로 보내기", "Description[nl]": "Verzenden via Telegram", "Description[nn]": "Send via Telegram", "Description[pl]": "Wyślij przez Telegram", "Description[pt]": "Enviar por Telegram", "Description[pt_BR]": "Envia via Telegram", "Description[ru]": "Отправка в Telegram", "Description[sk]": "Poslať cez Telegram", "Description[sv]": "Skicka via Telegram", "Description[uk]": "Надсилання за допомогою Telegram", "Description[x-test]": "xxSend via Telegramxx", "Description[zh_CN]": "通过 Telegram 发送", "Description[zh_TW]": "透過 Telegram 傳送", "Icon": "telegram", "License": "GPL", - "Name": "Send via Telegram...", + "Name": "Send via Telegram", "Name[ar]": "أرسِل عبر «تلغرام»…", "Name[ca@valencia]": "Envia via Telegram...", "Name[ca]": "Envia via Telegram...", "Name[cs]": "Poslat přes Telegram...", "Name[da]": "Send via Telegram...", "Name[de]": "Mit Telegram senden ...", "Name[en_GB]": "Send via Telegram...", "Name[es]": "Enviar por Telegram...", "Name[eu]": "Bidali Telegram bidez...", "Name[fi]": "Lähetä Telegramilla…", "Name[fr]": "Envoyer par Telegram...", "Name[gl]": "Enviar por Telegram…", "Name[hu]": "Küldés Telegramon…", "Name[id]": "Kirim via Telegram...", "Name[it]": "Invia con Telegram...", "Name[ko]": "텔레그램으로 보내기...", "Name[nl]": "Verzenden via Telegram...", "Name[nn]": "Send via Telegram …", "Name[pl]": "Wyślij przez Telegram...", "Name[pt]": "Enviar por Telegram...", "Name[pt_BR]": "Enviar via Telegram...", "Name[ru]": "Отправить в Telegram...", "Name[sk]": "Poslať cez Telegram...", "Name[sv]": "Skicka via Telegram...", "Name[uk]": "Надіслати за допомогою Telegram…", "Name[x-test]": "xxSend via Telegram...xx", "Name[zh_CN]": "通过 Telegram 发送...", "Name[zh_TW]": "透過 Telegram 傳送……" }, "X-Purpose-Configuration": [], "X-Purpose-Constraints": [ [ "application:org.telegram.desktop.desktop", "application:telegramdesktop.desktop" ] ], "X-Purpose-PluginTypes": [ "Export" - ] + ], + "X-Purpose-ActionDisplay": "Send via Telegram..." } diff --git a/src/plugins/twitter/metadata.json b/src/plugins/twitter/metadata.json index 6ec6a8b..559c9f6 100644 --- a/src/plugins/twitter/metadata.json +++ b/src/plugins/twitter/metadata.json @@ -1,116 +1,117 @@ { "KPlugin": { "Authors": [ { "Name": "Aleix Pol", "Name[ar]": "Aleix Pol", "Name[ca@valencia]": "Aleix Pol", "Name[ca]": "Aleix Pol", "Name[cs]": "Aleix Pol", "Name[da]": "Aleix Pol", "Name[de]": "Aleix Pol", "Name[el]": "Aleix Pol", "Name[en_GB]": "Aleix Pol", "Name[es]": "Aleix Pol", "Name[eu]": "Aleix Pol", "Name[fi]": "Aleix Pol", "Name[fr]": "Aleix Pol", "Name[gl]": "Aleix Pol", "Name[hu]": "Aleix Pol", "Name[id]": "Aleix Pol", "Name[it]": "Aleix Pol", "Name[ko]": "Aleix Pol", "Name[nl]": "Aleix Pol", "Name[nn]": "Aleix Pol", "Name[pl]": "Aleix Pol", "Name[pt]": "Aleix Pol", "Name[pt_BR]": "Aleix Pol", "Name[ru]": "Aleix Pol", "Name[sk]": "Aleix Pol", "Name[sv]": "Aleix Pol", "Name[tr]": "Aleix Pol", "Name[uk]": "Aleix Pol", "Name[x-test]": "xxAleix Polxx", "Name[zh_CN]": "Aleix Pol", "Name[zh_TW]": "Aleix Pol" } ], "Category": "Utilities", "Description": "Shares media on Twitter.", "Description[ar]": "شارِك الوسائط على «تويتر».", "Description[ca@valencia]": "Comparteix fitxers multimèdia al Twitter.", "Description[ca]": "Comparteix fitxers multimèdia al Twitter.", "Description[cs]": "Sdílí média na Twitteru.", "Description[da]": "Deler medier på Twitter.", "Description[de]": "Gibt die Medien auf Twitter frei.", "Description[el]": "Διαμοιρασμός πολυμέσων στο Twitter.", "Description[en_GB]": "Shares media on Twitter.", "Description[es]": "Comparte el medio en Twitter.", "Description[eu]": "Partekatu multimedia edukia Twitterren.", "Description[fi]": "Jakaa Twitteriin mediaa.", "Description[fr]": "Partager le contenu sur Twitter.", "Description[gl]": "Comparte contido en Twitter.", "Description[hu]": "Média megosztása Twitteren.", "Description[id]": "Media berbagi pada Twitter.", "Description[it]": "Condividi contenuto su Twitter.", "Description[ko]": "트위터로 미디어를 공유합니다.", "Description[nl]": "Deelt media op Twitter.", "Description[nn]": "Del mediefil på Twitter.", "Description[pl]": "Udostępnia multimedia na Twitterze.", "Description[pt]": "Partilha conteúdos no Twitter.", "Description[pt_BR]": "Compartilha mídias no Twitter.", "Description[ru]": "Отправка файлов в Twitter.", "Description[sk]": "Zdieľa médiu na Twitteri.", "Description[sv]": "Dela media på Twitter.", "Description[tr]": "Twitter'da medya dosyası paylaşır.", "Description[uk]": "Оприлюднює мультимедійні дані на Twitter.", "Description[x-test]": "xxShares media on Twitter.xx", "Description[zh_CN]": "在 Twitter 上分享媒体。", "Description[zh_TW]": "在 Twitter 上分想多媒體。", "Icon": "im-twitter", "Id": "twitterplugin", "License": "GPL", "Name": "Twitter", "Name[ar]": "تويتر", "Name[ca@valencia]": "Twitter", "Name[ca]": "Twitter", "Name[cs]": "Twitter", "Name[da]": "Twitter", "Name[de]": "Twitter", "Name[el]": "Twitter", "Name[en_GB]": "Twitter", "Name[es]": "Twitter", "Name[eu]": "Twitter", "Name[fi]": "Twitter", "Name[fr]": "Twitter", "Name[gl]": "Twitter", "Name[hu]": "Twitter", "Name[id]": "Twitter", "Name[it]": "Twitter", "Name[ko]": "트위터", "Name[nl]": "Twitter", "Name[nn]": "Twitter", "Name[pl]": "Twitter", "Name[pt]": "Twitter", "Name[pt_BR]": "Twitter", "Name[ru]": "Twitter", "Name[sk]": "Twitter", "Name[sv]": "Twitter", "Name[tr]": "Twitter", "Name[uk]": "Twitter", "Name[x-test]": "xxTwitterxx", "Name[zh_CN]": "Twitter", "Name[zh_TW]": "Twitter" }, "X-Purpose-Configuration": [ "tweetText", "consumerKey", "consumerSecret", "accessToken", "accessTokenSecret" ], "X-Purpose-Constraints": [], "X-Purpose-PluginTypes": [ "Export" - ] + ], + "X-Purpose-ActionDisplay": "Twitter..." } diff --git a/src/plugins/youtube/youtubeplugin.json b/src/plugins/youtube/youtubeplugin.json index c991595..17dd2b8 100644 --- a/src/plugins/youtube/youtubeplugin.json +++ b/src/plugins/youtube/youtubeplugin.json @@ -1,116 +1,117 @@ { "KPlugin": { "Authors": [ { "Name": "Aleix Pol", "Name[ar]": "Aleix Pol", "Name[ca@valencia]": "Aleix Pol", "Name[ca]": "Aleix Pol", "Name[cs]": "Aleix Pol", "Name[da]": "Aleix Pol", "Name[de]": "Aleix Pol", "Name[el]": "Aleix Pol", "Name[en_GB]": "Aleix Pol", "Name[es]": "Aleix Pol", "Name[eu]": "Aleix Pol", "Name[fi]": "Aleix Pol", "Name[fr]": "Aleix Pol", "Name[gl]": "Aleix Pol", "Name[hu]": "Aleix Pol", "Name[id]": "Aleix Pol", "Name[it]": "Aleix Pol", "Name[ko]": "Aleix Pol", "Name[nl]": "Aleix Pol", "Name[nn]": "Aleix Pol", "Name[pl]": "Aleix Pol", "Name[pt]": "Aleix Pol", "Name[pt_BR]": "Aleix Pol", "Name[ru]": "Aleix Pol", "Name[sk]": "Aleix Pol", "Name[sv]": "Aleix Pol", "Name[tr]": "Aleix Pol", "Name[uk]": "Aleix Pol", "Name[x-test]": "xxAleix Polxx", "Name[zh_CN]": "Aleix Pol", "Name[zh_TW]": "Aleix Pol" } ], "Category": "Utilities", "Description": "Upload videos to YouTube", "Description[ar]": "ارفع الفديوهات على «يوتيوب»", "Description[ca@valencia]": "Puja vídeos a YouTube", "Description[ca]": "Puja vídeos a YouTube", "Description[cs]": "Odeslat videa na YouTube", "Description[da]": "Upload videoer til YouTube", "Description[de]": "Videos auf YouTube hochladen", "Description[el]": "Αποστολή βίντεο στο YouTube", "Description[en_GB]": "Upload videos to YouTube", "Description[es]": "Enviar vídeos a YouTube", "Description[eu]": "Igo bideoak YouTubera", "Description[fi]": "Lähetä YouTubeen videoita", "Description[fr]": "Envoyer des vidéos vers YouTube", "Description[gl]": "Enviar vídeos a YouTube.", "Description[hu]": "Videók feltöltése YouTube-ra", "Description[id]": "Upload video ke YouTube", "Description[it]": "Carica video su YouTube", "Description[ko]": "YouTube에 동영상 업로드", "Description[nl]": "Video's naar YouTube uploaden", "Description[nn]": "Last opp videoar til YouTube", "Description[pl]": "Wyślij film na YouTube", "Description[pt]": "Enviar os vídeos para o YouTube", "Description[pt_BR]": "Envia vídeos para o YouTube", "Description[ru]": "Загрузка видео на YouTube", "Description[sk]": "Nahrať videá na YouTube", "Description[sv]": "Ladda upp videor till YouTube", "Description[tr]": "Videoları YouTube'a yükle", "Description[uk]": "Вивантаження відео на YouTube", "Description[x-test]": "xxUpload videos to YouTubexx", "Description[zh_CN]": "上传视频到 YouTube", "Description[zh_TW]": "上傳影片到 YouTube", "Icon": "edit-paste", "License": "GPL", "Name": "YouTube", "Name[ar]": "يوتيوب", "Name[ca@valencia]": "YouTube", "Name[ca]": "YouTube", "Name[cs]": "YouTube", "Name[da]": "YouTube", "Name[de]": "YouTube", "Name[el]": "YouTube", "Name[en_GB]": "YouTube", "Name[es]": "YouTube", "Name[eu]": "YouTube", "Name[fi]": "YouTube", "Name[fr]": "YouTube", "Name[gl]": "YouTube", "Name[hu]": "YouTube", "Name[id]": "YouTube", "Name[it]": "YouTube", "Name[ko]": "YouTube", "Name[nl]": "YouTube", "Name[nn]": "YouTube", "Name[pl]": "YouTube", "Name[pt]": "YouTube", "Name[pt_BR]": "YouTube", "Name[ru]": "YouTube", "Name[sk]": "YouTube", "Name[sv]": "YouTube", "Name[tr]": "YouTube", "Name[uk]": "YouTube", "Name[x-test]": "xxYouTubexx", "Name[zh_CN]": "YouTube", "Name[zh_TW]": "YouTube" }, "X-Purpose-Configuration": [ "videoDesc", "videoTitle", "videoTags", "accountId" ], "X-Purpose-Constraints": [ "mimeType:video/*" ], "X-Purpose-PluginTypes": [ "Export" - ] + ], + "X-Purpose-ActionDisplay": "Youtube..." } diff --git a/src/widgets/menu.cpp b/src/widgets/menu.cpp index 139e29a..9a46a8c 100644 --- a/src/widgets/menu.cpp +++ b/src/widgets/menu.cpp @@ -1,108 +1,108 @@ /* Copyright 2015 Aleix Pol Gonzalez This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library. If not, see . */ #include "menu.h" #include #include #include #include #include #include #include using namespace Purpose; class Purpose::MenuPrivate : public QObject { Q_OBJECT public: MenuPrivate(Menu* q) : QObject(q) , m_model(new AlternativesModel(q)) , q(q) { } ~MenuPrivate() override { if (m_engine) { m_engine->deleteLater(); } } void trigger(int row) { if (!m_engine) { m_engine = new QQmlApplicationEngine; m_engine->rootContext()->setContextObject(new KLocalizedContext(this)); m_engine->load(QUrl(QStringLiteral("qrc:/JobDialog.qml"))); } Q_ASSERT(!m_engine->rootObjects().isEmpty()); QObject* o = m_engine->rootObjects().at(0); if (!o) { qWarning() << Q_FUNC_INFO << "object is NULL at m_engine" << m_engine << "rootObjects=" << m_engine->rootObjects(); return; } auto config = m_model->configureJob(row); config->setUseSeparateProcess(false); o->setProperty("configuration", QVariant::fromValue(config)); o->setProperty("q", QVariant::fromValue(q)); o->setProperty("visible", true); o->setParent(q); } public: QQmlApplicationEngine* m_engine = nullptr; QPointer m_model; Purpose::Menu* q; }; Menu::Menu(QWidget* parent) : QMenu(parent) , d_ptr(new MenuPrivate(this)) { connect(d_ptr->m_model.data(), &AlternativesModel::inputDataChanged, this, &Menu::reload); connect(this, &QMenu::triggered, this, [this](QAction* action) { Q_D(Menu); d->trigger(action->property("row").toInt()); }); } void Menu::reload() { Q_D(Menu); clear(); for(int i=0, c=d->m_model->rowCount(); i != c; ++i) { QModelIndex idx = d->m_model->index(i); - QAction* a = addAction(idx.data(Qt::DisplayRole).toString()); + QAction* a = addAction(idx.data(AlternativesModel::ActionDisplayRole).toString()); a->setToolTip(idx.data(Qt::ToolTipRole).toString()); a->setIcon(idx.data(Qt::DecorationRole).value()); a->setProperty("pluginId", idx.data(AlternativesModel::PluginIdRole)); a->setProperty("row", i); } setEnabled(!isEmpty()); } AlternativesModel* Menu::model() const { Q_D(const Menu); return d->m_model.data(); } #include "menu.moc"