summaryrefslogtreecommitdiff
path: root/transferengine-plugins/fediverseshareplugin
diff options
context:
space:
mode:
Diffstat (limited to 'transferengine-plugins/fediverseshareplugin')
-rw-r--r--transferengine-plugins/fediverseshareplugin/FediverseSharePost.qml138
-rw-r--r--transferengine-plugins/fediverseshareplugin/fediverseplugininfo.cpp62
-rw-r--r--transferengine-plugins/fediverseshareplugin/fediverseplugininfo.h35
-rw-r--r--transferengine-plugins/fediverseshareplugin/fediverseshareplugin.cpp29
-rw-r--r--transferengine-plugins/fediverseshareplugin/fediverseshareplugin.h28
-rw-r--r--transferengine-plugins/fediverseshareplugin/fediverseshareplugin.pro32
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