diff --git a/electron/main.js b/electron/main.js index cc9b3775..ad5f6589 100644 --- a/electron/main.js +++ b/electron/main.js @@ -1,5 +1,5 @@ import './log.js'; -import { app, BrowserWindow, Menu, MenuItem, Tray, shell, dialog, nativeTheme, ipcMain } from 'electron'; +import { app, BrowserWindow, Menu, MenuItem, Tray, shell, dialog, nativeTheme, ipcMain, clipboard } from 'electron'; import isDev from 'electron-is-dev'; import fs from 'fs'; import path from 'path'; @@ -321,3 +321,23 @@ app.on('window-all-closed', () => { app.quit(); } }); + +// Handle request to copy text to clipboard +ipcMain.handle('copy-to-clipboard', async (event, text) => { + try { + clipboard.writeText(text); + return { success: true }; + } catch (error) { + console.error('[Electron Main] Error copying to clipboard:', error); + return { success: false, error: error.message }; + } +}); + +// Handle request for platform info +ipcMain.handle('get-platform', async () => { + return { + platform: process.platform, + arch: process.arch, + version: process.version, + }; +}); diff --git a/electron/preload.mjs b/electron/preload.mjs index f35cdc48..0b1888fa 100644 --- a/electron/preload.mjs +++ b/electron/preload.mjs @@ -16,4 +16,8 @@ contextBridge.exposeInMainWorld('defaultMediaIpfsGatewayUrl', 'http://localhost: ipcRenderer.on('plebbit-rpc-auth-key', (event, plebbitRpcAuthKey) => contextBridge.exposeInMainWorld('plebbitRpcAuthKey', plebbitRpcAuthKey)); ipcRenderer.send('get-plebbit-rpc-auth-key'); -contextBridge.exposeInMainWorld('electronApi', { isElectron: true }); \ No newline at end of file +contextBridge.exposeInMainWorld('electronApi', { + isElectron: true, + copyToClipboard: (text) => ipcRenderer.invoke('copy-to-clipboard', text), + getPlatform: () => ipcRenderer.invoke('get-platform'), +}); \ No newline at end of file diff --git a/src/lib/utils/url-utils.ts b/src/lib/utils/url-utils.ts index b6cd62f8..b51b7e31 100644 --- a/src/lib/utils/url-utils.ts +++ b/src/lib/utils/url-utils.ts @@ -1,3 +1,5 @@ +import { copyToClipboard } from './clipboard-utils'; + export const getHostname = (url: string) => { try { return new URL(url).hostname.replace(/^www\./, ''); @@ -15,12 +17,7 @@ export const isValidURL = (url: string) => { } }; -export const copyShareLinkToClipboard = (subplebbitAddress: string, cid: string) => { - const shareLink = `https://pleb.bz/p/${subplebbitAddress}/c/${cid}?redirect=plebchan.eth.limo`; - - if (navigator.clipboard) { - navigator.clipboard.writeText(shareLink); - } else { - alert('Your browser does not support clipboard API'); - } +export const copyShareLinkToClipboard = async (subplebbitAddress: string, cid: string) => { + const shareLink = `https://pleb.bz/p/${subplebbitAddress}/c/${cid}?redirect=plebchan.app`; + await copyToClipboard(shareLink); };