From 30590be9e3496e142c0092cd6f6c283b228ee38d Mon Sep 17 00:00:00 2001 From: Nystik <236107-Nystik@users.noreply.gitlab.com> Date: Fri, 13 Mar 2026 19:57:37 +0100 Subject: [PATCH] shim pdf print --- package.json | 4 ++-- shims/electron/ipc-renderer.js | 9 +++++++++ shims/electron/remote/dialog.js | 14 +++++++++++--- shims/electron/remote/window.js | 7 +++++++ 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 92cf8f7..7b62bba 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "obsidian-bridge", + "name": "Ignis", "version": "0.1.0", "private": true, - "description": "Self-hosted Obsidian via Electron API shimming", + "description": "An Electron shim and server bridge for running Obsidian in a browser.", "scripts": { "build:shims": "node build.js", "dev:server": "node server/index.js", diff --git a/shims/electron/ipc-renderer.js b/shims/electron/ipc-renderer.js index 051c97a..05edc19 100644 --- a/shims/electron/ipc-renderer.js +++ b/shims/electron/ipc-renderer.js @@ -157,6 +157,15 @@ export const ipcRenderer = { handleRequestUrl(requestId, request); return; } + + if (channel === "print-to-pdf") { + const [options] = args; + window.print(); + queueMicrotask(() => { + ipcRenderer._emit("print-to-pdf", { success: true }); + }); + return; + } }, sendSync(channel, ...args) { diff --git a/shims/electron/remote/dialog.js b/shims/electron/remote/dialog.js index 1b39bf8..73eccb6 100644 --- a/shims/electron/remote/dialog.js +++ b/shims/electron/remote/dialog.js @@ -5,10 +5,18 @@ export const dialogShim = { return { canceled: true, filePaths: [] }; }, + // TODO: replace prompt() with a styled modal (matching vault manager style) async showSaveDialog(browserWindow, options) { - // TODO: implement custom modal - console.log("[shim:dialog] showSaveDialog (stub):", options); - return { canceled: true, filePath: undefined }; + if (typeof browserWindow === "object" && !options) { + options = browserWindow; + } + const defaultName = + options?.defaultPath?.split(/[/\\]/).pop() || "download"; + const name = prompt("Save as:", defaultName); + if (!name) { + return { canceled: true, filePath: undefined }; + } + return { canceled: false, filePath: "/downloads/" + name }; }, async showMessageBox(browserWindow, options) { diff --git a/shims/electron/remote/window.js b/shims/electron/remote/window.js index 88a86d8..8a2496a 100644 --- a/shims/electron/remote/window.js +++ b/shims/electron/remote/window.js @@ -165,6 +165,13 @@ const currentWebContents = { this._windowOpenHandler = handler; }, + printToPDF(options) { + return new Promise((resolve) => { + window.print(); + resolve(Buffer.from([])); + }); + }, + capturePage(rect) { // TODO: could use html2canvas console.log("[shim:webContents] capturePage (stub)");