Warning, /network/neochat/src/qml/FileDelegateContextMenu.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2019 Black Hat <bhat@encom.eu.org> 0002 // SPDX-License-Identifier: GPL-3.0-only 0003 0004 import QtQuick 0005 import QtQuick.Controls as QQC2 0006 import Qt.labs.platform 0007 0008 import org.kde.kirigami as Kirigami 0009 0010 import org.kde.neochat 0011 import org.kde.neochat.config 0012 0013 /** 0014 * @brief The menu for media messages. 0015 * 0016 * This component just overloads the actions and nested actions of the base menu 0017 * to what is required for a media item. 0018 * 0019 * @sa MessageDelegateContextMenu 0020 */ 0021 MessageDelegateContextMenu { 0022 id: root 0023 0024 /** 0025 * @brief The MIME type of the media. 0026 */ 0027 property string mimeType 0028 0029 /** 0030 * @brief Progress info when downloading files. 0031 * 0032 * @sa Quotient::FileTransferInfo 0033 */ 0034 required property var progressInfo 0035 0036 /** 0037 * @brief The main list of menu item actions. 0038 * 0039 * Each action will be instantiated as a single line in the menu. 0040 */ 0041 property list<Kirigami.Action> actions: [ 0042 Kirigami.Action { 0043 text: i18n("Open Externally") 0044 icon.name: "document-open" 0045 onTriggered: { 0046 currentRoom.openEventMediaExternally(root.eventId); 0047 } 0048 }, 0049 Kirigami.Action { 0050 text: i18n("Save As") 0051 icon.name: "document-save" 0052 onTriggered: { 0053 var dialog = saveAsDialog.createObject(QQC2.ApplicationWindow.overlay); 0054 dialog.open(); 0055 dialog.currentFile = dialog.folder + "/" + currentRoom.fileNameToDownload(eventId); 0056 } 0057 }, 0058 Kirigami.Action { 0059 text: i18n("Reply") 0060 icon.name: "mail-replied-symbolic" 0061 onTriggered: { 0062 currentRoom.mainCache.replyId = eventId; 0063 currentRoom.editCache.editId = ""; 0064 RoomManager.requestFullScreenClose(); 0065 } 0066 }, 0067 Kirigami.Action { 0068 text: i18n("Copy") 0069 icon.name: "edit-copy" 0070 onTriggered: { 0071 currentRoom.copyEventMedia(root.eventId); 0072 } 0073 }, 0074 Kirigami.Action { 0075 visible: author.id === currentRoom.localUser.id || currentRoom.canSendState("redact") 0076 text: i18n("Remove") 0077 icon.name: "edit-delete-remove" 0078 icon.color: "red" 0079 onTriggered: applicationWindow().pageStack.pushDialogLayer("qrc:/org/kde/neochat/qml/RemoveSheet.qml", { 0080 room: currentRoom, 0081 eventId: eventId 0082 }, { 0083 title: i18nc("@title", "Remove Message"), 0084 width: Kirigami.Units.gridUnit * 25 0085 }) 0086 }, 0087 Kirigami.Action { 0088 text: i18nc("@action:button 'Report' as in 'Report this event to the administrators'", "Report") 0089 icon.name: "dialog-warning-symbolic" 0090 visible: author.id !== currentRoom.localUser.id 0091 onTriggered: applicationWindow().pageStack.pushDialogLayer("qrc:/org/kde/neochat/qml/ReportSheet.qml", { 0092 room: currentRoom, 0093 eventId: eventId 0094 }, { 0095 title: i18nc("@title", "Report Message"), 0096 width: Kirigami.Units.gridUnit * 25 0097 }) 0098 }, 0099 Kirigami.Action { 0100 text: i18n("View Source") 0101 icon.name: "code-context" 0102 onTriggered: RoomManager.viewEventSource(root.eventId) 0103 } 0104 ] 0105 0106 /** 0107 * @brief The list of menu item actions that have sub-actions. 0108 * 0109 * Each action will be instantiated as a single line that opens a sub menu. 0110 */ 0111 property list<Kirigami.Action> nestedActions: [ 0112 ShareAction { 0113 id: shareAction 0114 inputData: { 0115 'urls': [], 0116 'mimeType': [root.mimeType] 0117 } 0118 property string filename: StandardPaths.writableLocation(StandardPaths.CacheLocation) + "/" + eventId.replace(":", "_").replace("/", "_").replace("+", "_") + currentRoom.fileNameToDownload(eventId) 0119 0120 doBeforeSharing: () => { 0121 currentRoom.downloadFile(eventId, filename); 0122 } 0123 Component.onCompleted: { 0124 shareAction.inputData = { 0125 urls: [filename], 0126 mimeType: [root.mimeType] 0127 }; 0128 } 0129 } 0130 ] 0131 0132 Component { 0133 id: saveAsDialog 0134 FileDialog { 0135 fileMode: FileDialog.SaveFile 0136 folder: Config.lastSaveDirectory.length > 0 ? Config.lastSaveDirectory : StandardPaths.writableLocation(StandardPaths.DownloadLocation) 0137 onAccepted: { 0138 if (!currentFile) { 0139 return; 0140 } 0141 Config.lastSaveDirectory = folder; 0142 Config.save(); 0143 currentRoom.downloadFile(eventId, currentFile); 0144 } 0145 } 0146 } 0147 }