From d073dd215ab04185fd204fe3b18ded9ff6718e0c Mon Sep 17 00:00:00 2001 From: Jonathan Rainville Date: Wed, 19 Jan 2022 10:59:08 -0500 Subject: [PATCH] fix(chat): fix copy and download image Fixes #4494 --- src/app/global/utils.nim | 6 ++++++ ui/app/AppLayouts/Chat/ChatLayout.qml | 1 + ui/app/AppLayouts/Chat/popups/GroupInfoPopup.qml | 2 +- .../AppLayouts/Chat/popups/PinnedMessagesPopup.qml | 2 ++ ui/app/AppLayouts/Chat/stores/RootStore.qml | 8 ++++++++ ui/app/AppLayouts/Chat/views/ChatColumnView.qml | 1 + ui/app/AppLayouts/Chat/views/ChatContentView.qml | 4 ++++ .../AppLayouts/Chat/views/CommunityColumnView.qml | 1 + .../AppLayouts/Chat/views/ContactsColumnView.qml | 1 + .../shared/views/chat/MessageContextMenuView.qml | 14 ++++++++------ 10 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/app/global/utils.nim b/src/app/global/utils.nim index 67456252d9..4d7baadf75 100644 --- a/src/app/global/utils.nim +++ b/src/app/global/utils.nim @@ -92,6 +92,12 @@ QtObject: proc copyToClipboard*(self: Utils, content: string) {.slot.} = setClipBoardText(content) + proc copyImageToClipboard*(self: Utils, content: string) {.slot.} = + setClipBoardImage(content) + + proc downloadImage*(self: Utils, content: string, path: string) {.slot.} = + downloadImage(content, path) + proc generateQRCodeSVG*(self: Utils, text: string, border: int = 0): string = var qr0: array[0..qrcodegen_BUFFER_LEN_MAX, uint8] var tempBuffer: array[0..qrcodegen_BUFFER_LEN_MAX, uint8] diff --git a/ui/app/AppLayouts/Chat/ChatLayout.qml b/ui/app/AppLayouts/Chat/ChatLayout.qml index 132884dec1..c0fb366b81 100644 --- a/ui/app/AppLayouts/Chat/ChatLayout.qml +++ b/ui/app/AppLayouts/Chat/ChatLayout.qml @@ -170,6 +170,7 @@ StatusAppThreePanelLayout { MessageContextMenuView { id: quickActionMessageOptionsMenu + store: root.rootStore onOpenProfileClicked: { Global.openProfilePopup(publicKey) diff --git a/ui/app/AppLayouts/Chat/popups/GroupInfoPopup.qml b/ui/app/AppLayouts/Chat/popups/GroupInfoPopup.qml index a81bff4169..8298e98ed3 100644 --- a/ui/app/AppLayouts/Chat/popups/GroupInfoPopup.qml +++ b/ui/app/AppLayouts/Chat/popups/GroupInfoPopup.qml @@ -180,7 +180,7 @@ StatusModal { //% "Pinned messages" text: qsTrId("pinned-messages") currentValue: pinnedCount - onClicked: Global.openPopup(pinnedMessagesPopupComponent) + onClicked: Global.openPopup(pinnedMessagesPopupComponent, {store: popup.store}) iconSource: Style.svg("pin") } diff --git a/ui/app/AppLayouts/Chat/popups/PinnedMessagesPopup.qml b/ui/app/AppLayouts/Chat/popups/PinnedMessagesPopup.qml index ab78d0c607..59b0798d8b 100644 --- a/ui/app/AppLayouts/Chat/popups/PinnedMessagesPopup.qml +++ b/ui/app/AppLayouts/Chat/popups/PinnedMessagesPopup.qml @@ -19,6 +19,7 @@ import StatusQ.Controls 0.1 as StatusQControls ModalPopup { id: popup + property var store property var messageStore property var pinnedMessagesModel //this doesn't belong to the messageStore, it is a part of the ChatContentStore, but we didn't introduce it yet. property string messageToPin @@ -167,6 +168,7 @@ ModalPopup { MessageContextMenuView { id: msgContextMenu reactionModel: popup.emojiReactionsModel + store: popup.store pinnedPopup: true pinnedMessage: true onShouldCloseParentPopup: { diff --git a/ui/app/AppLayouts/Chat/stores/RootStore.qml b/ui/app/AppLayouts/Chat/stores/RootStore.qml index cbc7b2fbba..10a8594c83 100644 --- a/ui/app/AppLayouts/Chat/stores/RootStore.qml +++ b/ui/app/AppLayouts/Chat/stores/RootStore.qml @@ -103,6 +103,14 @@ QtObject { globalUtilsInst.copyToClipboard(text) } + function copyImageToClipboard(content) { + globalUtilsInst.copyImageToClipboard(content) + } + + function downloadImage(content, path) { + globalUtilsInst.downloadImage(content, path) + } + function getCommunity(communityId) { // Not Refactored Yet // try { diff --git a/ui/app/AppLayouts/Chat/views/ChatColumnView.qml b/ui/app/AppLayouts/Chat/views/ChatColumnView.qml index 72075ea1c4..2ae955fc2b 100644 --- a/ui/app/AppLayouts/Chat/views/ChatColumnView.qml +++ b/ui/app/AppLayouts/Chat/views/ChatColumnView.qml @@ -133,6 +133,7 @@ Item { MessageContextMenuView { id: contextmenu + store: root.rootStore reactionModel: root.rootStore.emojiReactionsModel } diff --git a/ui/app/AppLayouts/Chat/views/ChatContentView.qml b/ui/app/AppLayouts/Chat/views/ChatContentView.qml index 9b23d0993e..6c121e57a8 100644 --- a/ui/app/AppLayouts/Chat/views/ChatContentView.qml +++ b/ui/app/AppLayouts/Chat/views/ChatContentView.qml @@ -84,6 +84,7 @@ ColumnLayout { return } Global.openPopup(pinnedMessagesPopupComponent, { + store: rootStore, messageStore: messageStore, pinnedMessagesModel: chatContentModule.pinnedMessagesModel, messageToPin: "" @@ -228,6 +229,7 @@ ColumnLayout { return } Global.openPopup(pinnedMessagesPopupComponent, { + store: rootStore, messageStore: messageStore, pinnedMessagesModel: chatContentModule.pinnedMessagesModel, messageToPin: "" @@ -307,6 +309,7 @@ ColumnLayout { MessageContextMenuView { id: contextmenu + store: chatContentRoot.rootStore reactionModel: chatContentRoot.rootStore.emojiReactionsModel onPinMessage: { messageStore.pinMessage(messageId) @@ -322,6 +325,7 @@ ColumnLayout { return } Global.openPopup(pinnedMessagesPopupComponent, { + store: rootStore, messageStore: messageStore, pinnedMessagesModel: chatContentModule.pinnedMessagesModel, messageToPin: messageId diff --git a/ui/app/AppLayouts/Chat/views/CommunityColumnView.qml b/ui/app/AppLayouts/Chat/views/CommunityColumnView.qml index d5937fc09d..f1b844cd32 100644 --- a/ui/app/AppLayouts/Chat/views/CommunityColumnView.qml +++ b/ui/app/AppLayouts/Chat/views/CommunityColumnView.qml @@ -326,6 +326,7 @@ Item { chatCommunitySectionModule.prepareChatContentModuleForChatId(chatId) let chatContentModule = chatCommunitySectionModule.getChatContentModule() Global.openPopup(pinnedMessagesPopupComponent, { + store: root.store, messageStore: messageStore, pinnedMessagesModel: chatContentModule.pinnedMessagesModel, messageToPin: "" diff --git a/ui/app/AppLayouts/Chat/views/ContactsColumnView.qml b/ui/app/AppLayouts/Chat/views/ContactsColumnView.qml index be279682e2..5893aea673 100644 --- a/ui/app/AppLayouts/Chat/views/ContactsColumnView.qml +++ b/ui/app/AppLayouts/Chat/views/ContactsColumnView.qml @@ -301,6 +301,7 @@ Item { chatCommunitySectionModule.prepareChatContentModuleForChatId(chatId) let chatContentModule = chatCommunitySectionModule.getChatContentModule() Global.openPopup(pinnedMessagesPopupComponent, { + store: root.store, messageStore: messageStore, pinnedMessagesModel: chatContentModule.pinnedMessagesModel, messageToPin: "" diff --git a/ui/imports/shared/views/chat/MessageContextMenuView.qml b/ui/imports/shared/views/chat/MessageContextMenuView.qml index 980c7e4ed2..1e30b4d0b6 100644 --- a/ui/imports/shared/views/chat/MessageContextMenuView.qml +++ b/ui/imports/shared/views/chat/MessageContextMenuView.qml @@ -18,6 +18,7 @@ StatusPopupMenu { id: root width: emojiContainer.visible ? emojiContainer.width : 176 + property var store property var reactionModel property alias emojiContainer: emojiContainer @@ -173,8 +174,9 @@ StatusPopupMenu { id: copyImageAction text: qsTr("Copy image") onTriggered: { - // Not Refactored Yet - Should be in GlobalUtils -// root.store.chatsModelInst.copyImageToClipboard(imageSource ? imageSource : "") + if (root.imageSource) { + root.store.copyImageToClipboard(root.imageSource) + } root.close() } icon.name: "copy" @@ -248,8 +250,7 @@ StatusPopupMenu { icon.name: "chat" enabled: root.isDebugEnabled onTriggered: { - // Not Refactored Yet - Should be in GlobalUtils -// root.store.chatsModelInst.copyToClipboard(SelectedMessage.messageId) + root.store.copyToClipboard(SelectedMessage.messageId) close() } } @@ -353,8 +354,9 @@ StatusPopupMenu { selectFolder: true modality: Qt.NonModal onAccepted: { - // Not Refactored Yet - Should be in GlobalUtils -// root.store.chatsModelInst.downloadImage(imageSource ? imageSource : "", fileDialog.fileUrls) + if (root.imageSource) { + root.store.downloadImage(root.imageSource, fileDialog.fileUrls) + } fileDialog.close() } onRejected: {