From bb51771dc72f1d1391d2f5607bd9a242a76f9f95 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Wed, 13 May 2026 18:08:49 -0400 Subject: [PATCH] Expand wallpaper handling --- dist/main/system_handlers.js | 122 +++++++++++++++++++++++++--- dist/main/system_handlers.js.map | 2 +- src/main/system_handlers.ts | 132 ++++++++++++++++++++++++++++--- 3 files changed, 236 insertions(+), 20 deletions(-) diff --git a/dist/main/system_handlers.js b/dist/main/system_handlers.js index 9f7f707..ec052fc 100644 --- a/dist/main/system_handlers.js +++ b/dist/main/system_handlers.js @@ -100,17 +100,119 @@ function registerSystemHandlers() { return { success: true }; }); // 2. Set Wallpaper - electron_1.ipcMain.handle('native:set-wallpaper', async (event, { path: imagePath }) => { - const cleanPath = (0, file_utils_1.expandPath)(imagePath); - if (!fs.existsSync(cleanPath)) - return { success: false, error: 'Image file not found' }; - if (os.platform() === 'darwin') { - const script = `tell application "System Events" to set picture of every desktop to "${cleanPath}"`; - return await runExec(`osascript -e '${script}'`); + // Supports local path OR URL download. URL images are saved to a stable cache dir + // so macOS can reference them persistently after reboot. + // display: 'all' (default) | 'primary' (built-in) | 'external' (projector/second screen) + // url_external: optional second URL for the external display only. + electron_1.ipcMain.handle('native:set-wallpaper', async (event, { path: imagePath, url, url_external, display = 'all', api_key, account_id }) => { + // Cache dir: ~/Library/Caches/OSIT/wallpaper on macOS, ~/.cache/osit/wallpaper on Linux. + // Using a stable path means macOS keeps the reference across reboots. + const wallpaper_cache_dir = os.platform() === 'darwin' + ? path.join(os.homedir(), 'Library', 'Caches', 'OSIT', 'wallpaper') + : path.join(os.homedir(), '.cache', 'osit', 'wallpaper'); + async function download_wallpaper_image(image_url, basename) { + if (!fs.existsSync(wallpaper_cache_dir)) { + fs.mkdirSync(wallpaper_cache_dir, { recursive: true }); + } + // Infer extension from URL path, fall back to .jpg + let ext = '.jpg'; + try { + const url_path = new URL(image_url).pathname; + const inferred = path.extname(url_path).toLowerCase(); + if (['.jpg', '.jpeg', '.png', '.webp'].includes(inferred)) { + ext = inferred === '.jpeg' ? '.jpg' : inferred; + } + } + catch { } + const dest_path = path.join(wallpaper_cache_dir, basename + ext); + const headers = {}; + if (api_key) + headers['x-aether-api-key'] = api_key; + if (account_id) + headers['x-account-id'] = account_id; + try { + const response = await (0, axios_1.default)({ method: 'get', url: image_url, responseType: 'stream', headers }); + const writer = fs.createWriteStream(dest_path); + response.data.pipe(writer); + await new Promise((resolve, reject) => { + writer.on('finish', resolve); + writer.on('error', reject); + }); + return { success: true, path: dest_path }; + } + catch (e) { + return { success: false, error: `Wallpaper download failed: ${e.message}` }; + } } - else if (os.platform() === 'linux') { - // Gnome/Ubuntu default - return await runExec(`gsettings set org.gnome.desktop.background picture-uri "file://${cleanPath}"`); + // HARDENED: write AppleScript to a temp file, same pattern as native:run-osascript. + // The old osascript -e approach breaks on paths with spaces or special characters. + async function apply_mac_wallpaper(img_path, display_target) { + const escaped = img_path.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); + let script; + if (display_target === 'primary') { + script = `tell application "System Events"\n\ttell desktop 1\n\t\tset picture to "${escaped}"\n\tend tell\nend tell`; + } + else if (display_target === 'external') { + script = `tell application "System Events"\n\ttell desktop 2\n\t\tset picture to "${escaped}"\n\tend tell\nend tell`; + } + else { + script = `tell application "System Events"\n\ttell every desktop\n\t\tset picture to "${escaped}"\n\tend tell\nend tell`; + } + const script_path = path.join(os.tmpdir(), `ae_wallpaper_${Date.now()}.scpt`); + fs.writeFileSync(script_path, script, 'utf-8'); + try { + return await runExec(`osascript "${script_path}"`); + } + finally { + try { + fs.unlinkSync(script_path); + } + catch { } + } + } + if (os.platform() === 'darwin') { + // Resolve primary image path + let primary_path = null; + if (imagePath) { + const clean = (0, file_utils_1.expandPath)(imagePath); + if (!fs.existsSync(clean)) + return { success: false, error: 'Image file not found' }; + primary_path = clean; + } + else if (url) { + const result = await download_wallpaper_image(url, 'wallpaper_primary'); + if (!result.success || !result.path) + return { success: false, error: result.error }; + primary_path = result.path; + } + if (!primary_path) + return { success: false, error: 'No image source provided' }; + if (url_external) { + // Different images for each display: set primary display first, then external + const primary_result = await apply_mac_wallpaper(primary_path, 'primary'); + if (!primary_result.success) + return primary_result; + const ext_result = await download_wallpaper_image(url_external, 'wallpaper_external'); + const ext_path = ext_result.success && ext_result.path ? ext_result.path : primary_path; + return await apply_mac_wallpaper(ext_path, 'external'); + } + else { + return await apply_mac_wallpaper(primary_path, display); + } + } + if (os.platform() === 'linux') { + let img_path = imagePath ? (0, file_utils_1.expandPath)(imagePath) : null; + if (!img_path && url) { + const result = await download_wallpaper_image(url, 'wallpaper_primary'); + if (!result.success || !result.path) + return { success: false, error: result.error }; + img_path = result.path; + } + if (!img_path) + return { success: false, error: 'No image source provided' }; + if (!fs.existsSync(img_path)) + return { success: false, error: 'Image file not found' }; + return await runExec(`gsettings set org.gnome.desktop.background picture-uri "file://${img_path}"`); } return { success: false, error: 'Platform not supported' }; }); diff --git a/dist/main/system_handlers.js.map b/dist/main/system_handlers.js.map index 9d63d92..f7b3638 100644 --- a/dist/main/system_handlers.js.map +++ b/dist/main/system_handlers.js.map @@ -1 +1 @@ -{"version":3,"file":"system_handlers.js","sourceRoot":"","sources":["../../src/main/system_handlers.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"system_handlers.js","sourceRoot":"","sources":["../../src/main/system_handlers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/main/system_handlers.ts b/src/main/system_handlers.ts index 6e9128f..91d5b7a 100644 --- a/src/main/system_handlers.ts +++ b/src/main/system_handlers.ts @@ -48,18 +48,132 @@ export function registerSystemHandlers() { }); // 2. Set Wallpaper - ipcMain.handle('native:set-wallpaper', async (event, { path: imagePath }) => { - const cleanPath = expandPath(imagePath); - if (!fs.existsSync(cleanPath)) return { success: false, error: 'Image file not found' }; + // Supports local path OR URL download. URL images are saved to a stable cache dir + // so macOS can reference them persistently after reboot. + // display: 'all' (default) | 'primary' (built-in) | 'external' (projector/second screen) + // url_external: optional second URL for the external display only. + ipcMain.handle('native:set-wallpaper', async (event, { + path: imagePath, + url, + url_external, + display = 'all', + api_key, + account_id + }: { + path?: string; + url?: string; + url_external?: string; + display?: 'all' | 'primary' | 'external'; + api_key?: string; + account_id?: string; + }) => { + // Cache dir: ~/Library/Caches/OSIT/wallpaper on macOS, ~/.cache/osit/wallpaper on Linux. + // Using a stable path means macOS keeps the reference across reboots. + const wallpaper_cache_dir = os.platform() === 'darwin' + ? path.join(os.homedir(), 'Library', 'Caches', 'OSIT', 'wallpaper') + : path.join(os.homedir(), '.cache', 'osit', 'wallpaper'); + + async function download_wallpaper_image(image_url: string, basename: string): Promise<{ success: boolean; path?: string; error?: string }> { + if (!fs.existsSync(wallpaper_cache_dir)) { + fs.mkdirSync(wallpaper_cache_dir, { recursive: true }); + } + + // Infer extension from URL path, fall back to .jpg + let ext = '.jpg'; + try { + const url_path = new URL(image_url).pathname; + const inferred = path.extname(url_path).toLowerCase(); + if (['.jpg', '.jpeg', '.png', '.webp'].includes(inferred)) { + ext = inferred === '.jpeg' ? '.jpg' : inferred; + } + } catch {} + + const dest_path = path.join(wallpaper_cache_dir, basename + ext); + + const headers: Record = {}; + if (api_key) headers['x-aether-api-key'] = api_key; + if (account_id) headers['x-account-id'] = account_id; + + try { + const response = await axios({ method: 'get', url: image_url, responseType: 'stream', headers }); + const writer = fs.createWriteStream(dest_path); + response.data.pipe(writer); + await new Promise((resolve, reject) => { + writer.on('finish', resolve); + writer.on('error', reject); + }); + return { success: true, path: dest_path }; + } catch (e: any) { + return { success: false, error: `Wallpaper download failed: ${e.message}` }; + } + } + + // HARDENED: write AppleScript to a temp file, same pattern as native:run-osascript. + // The old osascript -e approach breaks on paths with spaces or special characters. + async function apply_mac_wallpaper(img_path: string, display_target: 'all' | 'primary' | 'external'): Promise<{ success: boolean; stdout?: string; stderr?: string; error?: string }> { + const escaped = img_path.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); + let script: string; + if (display_target === 'primary') { + script = `tell application "System Events"\n\ttell desktop 1\n\t\tset picture to "${escaped}"\n\tend tell\nend tell`; + } else if (display_target === 'external') { + script = `tell application "System Events"\n\ttell desktop 2\n\t\tset picture to "${escaped}"\n\tend tell\nend tell`; + } else { + script = `tell application "System Events"\n\ttell every desktop\n\t\tset picture to "${escaped}"\n\tend tell\nend tell`; + } + + const script_path = path.join(os.tmpdir(), `ae_wallpaper_${Date.now()}.scpt`); + fs.writeFileSync(script_path, script, 'utf-8'); + try { + return await runExec(`osascript "${script_path}"`); + } finally { + try { fs.unlinkSync(script_path); } catch {} + } + } if (os.platform() === 'darwin') { - const script = `tell application "System Events" to set picture of every desktop to "${cleanPath}"`; - return await runExec(`osascript -e '${script}'`); - } else if (os.platform() === 'linux') { - // Gnome/Ubuntu default - return await runExec(`gsettings set org.gnome.desktop.background picture-uri "file://${cleanPath}"`); + // Resolve primary image path + let primary_path: string | null = null; + + if (imagePath) { + const clean = expandPath(imagePath); + if (!fs.existsSync(clean)) return { success: false, error: 'Image file not found' }; + primary_path = clean; + } else if (url) { + const result = await download_wallpaper_image(url, 'wallpaper_primary'); + if (!result.success || !result.path) return { success: false, error: result.error }; + primary_path = result.path; + } + + if (!primary_path) return { success: false, error: 'No image source provided' }; + + if (url_external) { + // Different images for each display: set primary display first, then external + const primary_result = await apply_mac_wallpaper(primary_path, 'primary'); + if (!primary_result.success) return primary_result; + + const ext_result = await download_wallpaper_image(url_external, 'wallpaper_external'); + const ext_path = ext_result.success && ext_result.path ? ext_result.path : primary_path; + return await apply_mac_wallpaper(ext_path, 'external'); + } else { + return await apply_mac_wallpaper(primary_path, display); + } } - + + if (os.platform() === 'linux') { + let img_path: string | null = imagePath ? expandPath(imagePath) : null; + + if (!img_path && url) { + const result = await download_wallpaper_image(url, 'wallpaper_primary'); + if (!result.success || !result.path) return { success: false, error: result.error }; + img_path = result.path; + } + + if (!img_path) return { success: false, error: 'No image source provided' }; + if (!fs.existsSync(img_path)) return { success: false, error: 'Image file not found' }; + + return await runExec(`gsettings set org.gnome.desktop.background picture-uri "file://${img_path}"`); + } + return { success: false, error: 'Platform not supported' }; });