Merge pull request #452 from TriliumNext/fix-image-copy

Use the electron Clipboard module when using "Copy image to clipboard"
This commit is contained in:
Elian Doran 2024-10-11 19:48:18 +03:00 committed by GitHub
commit 9c8cf0bc09
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -22,15 +22,31 @@ function setupContextMenu($image) {
command: "copyImageReferenceToClipboard", command: "copyImageReferenceToClipboard",
uiIcon: "bx bx-empty" uiIcon: "bx bx-empty"
}, },
{title: "Copy image to clipboard", command: "copyImageToClipboard", uiIcon: "bx bx-empty"}, { title: "Copy image to clipboard", command: "copyImageToClipboard", uiIcon: "bx bx-empty" },
], ],
selectMenuItemHandler: ({command}) => { selectMenuItemHandler: async ({ command }) => {
if (command === 'copyImageReferenceToClipboard') { if (command === 'copyImageReferenceToClipboard') {
imageService.copyImageReferenceToClipboard($image); imageService.copyImageReferenceToClipboard($image);
} else if (command === 'copyImageToClipboard') { } else if (command === 'copyImageToClipboard') {
const webContents = utils.dynamicRequire('@electron/remote').getCurrentWebContents(); try {
utils.dynamicRequire('electron'); const nativeImage = utils.dynamicRequire('electron').nativeImage;
webContents.copyImageAt(e.pageX, e.pageY); const clipboard = utils.dynamicRequire('electron').clipboard;
const response = await fetch(
$image.attr('src')
);
const blob = await response.blob();
clipboard.writeImage(
nativeImage.createFromBuffer(
Buffer.from(
await blob.arrayBuffer()
)
)
);
} catch (error) {
console.error('Failed to copy image to clipboard:', error);
}
} else { } else {
throw new Error(`Unrecognized command '${command}'`); throw new Error(`Unrecognized command '${command}'`);
} }
@ -41,4 +57,4 @@ function setupContextMenu($image) {
export default { export default {
setupContextMenu setupContextMenu
}; };