diff options
Diffstat (limited to 'transferengine-plugins/fediverseshareplugin')
6 files changed, 324 insertions, 0 deletions
diff --git a/transferengine-plugins/fediverseshareplugin/FediverseSharePost.qml b/transferengine-plugins/fediverseshareplugin/FediverseSharePost.qml new file mode 100644 index 0000000..d859d96 --- /dev/null +++ b/transferengine-plugins/fediverseshareplugin/FediverseSharePost.qml @@ -0,0 +1,138 @@ +/* + * SPDX-FileCopyrightText: 2013 - 2026 Jolla Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +import QtQuick 2.6 +import Sailfish.Silica 1.0 +import Sailfish.Lipstick 1.0 +import Sailfish.TransferEngine 1.0 + +Item { + id: root + + property var shareAction + property string mimeType: { + if (shareAction && shareAction.mimeType) { + return shareAction.mimeType + } + if (shareAction && shareAction.resources + && shareAction.resources.length > 0 + && shareAction.resources[0] + && shareAction.resources[0].type) { + return shareAction.resources[0].type + } + return "" + } + property bool textShare: mimeType === "text/x-url" || mimeType === "text/plain" + + width: parent ? parent.width : 0 + height: previewLoader.item ? previewLoader.item.height : 0 + + Loader { + id: previewLoader + + anchors.fill: parent + sourceComponent: root.textShare ? postPreview : imagePreview + } + + Component { + id: imagePreview + + ShareFilePreview { + shareAction: root.shareAction + metadataStripped: true + descriptionPlaceholderText: qsTr("Write a post") + } + } + + Component { + id: postPreview + + SilicaFlickable { + id: postRoot + + width: parent.width + height: contentHeight + contentHeight: contentColumn.height + + Component.onCompleted: { + sailfishTransfer.loadConfiguration(root.shareAction.toConfiguration()) + statusTextField.forceActiveFocus() + statusTextField.cursorPosition = statusTextField.text.length + } + + SailfishTransfer { + id: sailfishTransfer + } + + Column { + id: contentColumn + + width: parent.width + + TextArea { + id: linkTextField + + width: parent.width + //% "Link" + label: qsTrId("sailfishshare-la-link") + placeholderText: label + visible: sailfishTransfer.content.type === "text/x-url" + text: sailfishTransfer.content.data || sailfishTransfer.content.status || "" + } + + TextArea { + id: statusTextField + + width: parent.width + //% "Status update" + label: qsTrId("sailfishshare-la-status_update") + placeholderText: label + text: { + var title = sailfishTransfer.content.name || sailfishTransfer.content.linkTitle || "" + if (linkTextField.visible) { + return title + } + var body = sailfishTransfer.content.data || sailfishTransfer.content.status || "" + if (title.length > 0 && body.length > 0) { + return title + ": " + body + } + return title + body + } + } + + SystemDialogIconButton { + id: postButton + + anchors.horizontalCenter: parent.horizontalCenter + width: parent.width / 2 + iconSource: "image://theme/icon-m-share" + bottomPadding: Theme.paddingLarge + _showPress: false + + //: Post a social network account status update + //% "Post" + text: qsTrId("sailfishshare-la-post_status") + + onClicked: { + var status = statusTextField.text || "" + var link = linkTextField.visible ? (linkTextField.text || "") : "" + if (link.length > 0 && status.indexOf(link) === -1) { + status = status.length > 0 ? (status + "\n" + link) : link + } + + sailfishTransfer.userData = { + "accountId": sailfishTransfer.transferMethodInfo.accountId, + "status": status + } + sailfishTransfer.mimeType = linkTextField.visible ? "text/x-url" : "text/plain" + sailfishTransfer.start() + root.shareAction.done() + } + } + } + } + } +} diff --git a/transferengine-plugins/fediverseshareplugin/fediverseplugininfo.cpp b/transferengine-plugins/fediverseshareplugin/fediverseplugininfo.cpp new file mode 100644 index 0000000..4e04be1 --- /dev/null +++ b/transferengine-plugins/fediverseshareplugin/fediverseplugininfo.cpp @@ -0,0 +1,62 @@ +/* + * SPDX-FileCopyrightText: 2013 - 2026 Jolla Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fediverseplugininfo.h" +#include "fediverseshareservicestatus.h" + +FediversePluginInfo::FediversePluginInfo() + : SharingPluginInfo() + , m_fediverseShareServiceStatus(new FediverseShareServiceStatus(this)) +{ + m_capabilities << QLatin1String("image/jpeg") + << QLatin1String("image/png") + << QLatin1String("video/mp4") + << QLatin1String("text/x-url") + << QLatin1String("text/plain"); + + connect(m_fediverseShareServiceStatus, &FediverseShareServiceStatus::serviceReady, + this, &FediversePluginInfo::serviceReady); + connect(m_fediverseShareServiceStatus, &FediverseShareServiceStatus::serviceError, + this, &FediversePluginInfo::infoError); +} + +FediversePluginInfo::~FediversePluginInfo() +{ +} + +QList<SharingMethodInfo> FediversePluginInfo::info() const +{ + return m_info; +} + +void FediversePluginInfo::query() +{ + m_fediverseShareServiceStatus->queryStatus(FediverseShareServiceStatus::PassiveMode); +} + +void FediversePluginInfo::serviceReady() +{ + m_info.clear(); + + for (int i = 0; i < m_fediverseShareServiceStatus->count(); ++i) { + SharingMethodInfo info; + + const FediverseShareServiceStatus::AccountDetails details = m_fediverseShareServiceStatus->details(i); + info.setDisplayName(details.providerName); + info.setSubtitle(details.displayName); + info.setAccountId(details.accountId); + + info.setMethodId(QLatin1String("Fediverse")); + info.setMethodIcon(details.iconPath.isEmpty() + ? QLatin1String("image://theme/icon-l-fediverse") + : details.iconPath); + info.setShareUIPath(QLatin1String("/usr/share/nemo-transferengine/plugins/sharing/FediverseSharePost.qml")); + info.setCapabilities(m_capabilities); + m_info << info; + } + + emit infoReady(); +} diff --git a/transferengine-plugins/fediverseshareplugin/fediverseplugininfo.h b/transferengine-plugins/fediverseshareplugin/fediverseplugininfo.h new file mode 100644 index 0000000..fdd8fc6 --- /dev/null +++ b/transferengine-plugins/fediverseshareplugin/fediverseplugininfo.h @@ -0,0 +1,35 @@ +/* + * SPDX-FileCopyrightText: 2013 - 2026 Jolla Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef FEDIVERSEPLUGININFO_H +#define FEDIVERSEPLUGININFO_H + +#include <sharingplugininfo.h> +#include <QStringList> + +class FediverseShareServiceStatus; + +class FediversePluginInfo : public SharingPluginInfo +{ + Q_OBJECT + +public: + FediversePluginInfo(); + ~FediversePluginInfo(); + + QList<SharingMethodInfo> info() const; + void query(); + +private Q_SLOTS: + void serviceReady(); + +private: + FediverseShareServiceStatus *m_fediverseShareServiceStatus; + QList<SharingMethodInfo> m_info; + QStringList m_capabilities; +}; + +#endif // FEDIVERSEPLUGININFO_H diff --git a/transferengine-plugins/fediverseshareplugin/fediverseshareplugin.cpp b/transferengine-plugins/fediverseshareplugin/fediverseshareplugin.cpp new file mode 100644 index 0000000..18c9c7c --- /dev/null +++ b/transferengine-plugins/fediverseshareplugin/fediverseshareplugin.cpp @@ -0,0 +1,29 @@ +/* + * SPDX-FileCopyrightText: 2013 - 2026 Jolla Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "fediverseshareplugin.h" +#include "fediverseplugininfo.h" + +#include <QtPlugin> + +FediverseSharePlugin::FediverseSharePlugin() + : QObject(), SharingPluginInterface() +{ +} + +FediverseSharePlugin::~FediverseSharePlugin() +{ +} + +SharingPluginInfo *FediverseSharePlugin::infoObject() +{ + return new FediversePluginInfo; +} + +QString FediverseSharePlugin::pluginId() const +{ + return QLatin1String("Fediverse"); +} diff --git a/transferengine-plugins/fediverseshareplugin/fediverseshareplugin.h b/transferengine-plugins/fediverseshareplugin/fediverseshareplugin.h new file mode 100644 index 0000000..0eb7772 --- /dev/null +++ b/transferengine-plugins/fediverseshareplugin/fediverseshareplugin.h @@ -0,0 +1,28 @@ +/* + * SPDX-FileCopyrightText: 2013 - 2026 Jolla Ltd. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef FEDIVERSESHAREPLUGIN_H +#define FEDIVERSESHAREPLUGIN_H + +#include <QtCore/QObject> + +#include <sharingplugininterface.h> + +class Q_DECL_EXPORT FediverseSharePlugin : public QObject, public SharingPluginInterface +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.sailfishos.share.plugin.fediverse") + Q_INTERFACES(SharingPluginInterface) + +public: + FediverseSharePlugin(); + ~FediverseSharePlugin(); + + SharingPluginInfo *infoObject(); + QString pluginId() const; +}; + +#endif // FEDIVERSESHAREPLUGIN_H diff --git a/transferengine-plugins/fediverseshareplugin/fediverseshareplugin.pro b/transferengine-plugins/fediverseshareplugin/fediverseshareplugin.pro new file mode 100644 index 0000000..a085a30 --- /dev/null +++ b/transferengine-plugins/fediverseshareplugin/fediverseshareplugin.pro @@ -0,0 +1,32 @@ +# SPDX-FileCopyrightText: 2013 - 2026 Jolla Ltd. +# +# SPDX-License-Identifier: BSD-3-Clause + +TEMPLATE = lib +TARGET = $$qtLibraryTarget(fediverseshareplugin) +CONFIG += plugin +DEPENDPATH += . +INCLUDEPATH += .. +INCLUDEPATH += ../../common + +QT -= gui + +CONFIG += link_pkgconfig +PKGCONFIG += nemotransferengine-qt5 accounts-qt5 sailfishaccounts libsignon-qt5 + +HEADERS += fediverseshareplugin.h \ + fediverseplugininfo.h \ + ../fediverseshareservicestatus.h + +SOURCES += fediverseshareplugin.cpp \ + fediverseplugininfo.cpp \ + ../fediverseshareservicestatus.cpp + +target.path = $$[QT_INSTALL_LIBS]/nemo-transferengine/plugins/sharing + +OTHER_FILES += *.qml + +shareui.files = FediverseSharePost.qml +shareui.path = /usr/share/nemo-transferengine/plugins/sharing + +INSTALLS += target shareui |
