Files
neochat/src/app/qml/ShareAction.qml
James Graham b6791485c4 Move remaining code to app module
There's still some stuff that could potentially go elsewhere but I think it's enough for now.
2025-04-18 09:26:17 +00:00

80 lines
2.4 KiB
QML

// SPDX-FileCopyrightText: 2021 Carl Schwan <carl@carlschwan.eu>
// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
import QtQuick
import QtQuick.Layouts
import org.kde.kirigami as Kirigami
import org.kde.purpose as Purpose
import org.kde.neochat
/**
* Action that allows a user to share data with other apps and services
* installed on their computer. The goal of this high level API is to
* adapt itself for each platform and adopt the native component.
*
* TODO add Android support
*/
Kirigami.Action {
id: root
icon.name: "emblem-shared-symbolic"
text: i18n("Share")
tooltip: i18n("Share the selected media")
visible: false
/**
* This property holds the input data for purpose.
*
* @code{.qml}
* Purpose.ShareAction {
* inputData: {
* 'urls': ['file://home/notroot/Pictures/mypicture.png'],
* 'mimeType': ['image/png']
* }
* }
* @endcode
*/
property var inputData
required property string eventId
required property NeoChatRoom room
property Instantiator _instantiator: Instantiator {
model: Purpose.PurposeAlternativesModel {
pluginType: "Export"
inputData: root.inputData
}
delegate: Kirigami.Action {
property int index
text: model.display
icon.name: model.iconName
onTriggered: {
root.room.download(root.eventId, root.inputData.urls[0]);
root.room.fileTransferCompleted.connect(share);
}
function share(id) {
if (id != root.eventId) {
return;
}
applicationWindow().pageStack.pushDialogLayer(Qt.createComponent("org.kde.neochat", "ShareDialog"), {
title: root.text,
index: index,
model: root._instantiator.model
}, {
title: i18nc("@title", "Share")
});
root.room.fileTransferCompleted.disconnect(share);
}
}
onObjectAdded: (index, object) => {
object.index = index;
root.children.push(object);
}
onObjectRemoved: (index, object) => root.children = Array.from(root.children).filter(obj => obj.pluginId !== object.pluginId)
}
}