summaryrefslogtreecommitdiffstats
path: root/packages/meshbay-client/src/preload.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-client/src/preload.js')
-rw-r--r--packages/meshbay-client/src/preload.js19
1 files changed, 15 insertions, 4 deletions
diff --git a/packages/meshbay-client/src/preload.js b/packages/meshbay-client/src/preload.js
index b649ae3..caad523 100644
--- a/packages/meshbay-client/src/preload.js
+++ b/packages/meshbay-client/src/preload.js
@@ -66,15 +66,26 @@ contextBridge.exposeInMainWorld('meshbay', {
backend: () => ipcRenderer.invoke('secrets:backend'),
},
- // A save dialog and a write that never passes back through the page. The
- // renderer holds an id, not a path.
- saveFile: async (suggestedName) => {
- const handle = await ipcRenderer.invoke('save:begin', suggestedName);
+ // Where downloads go, chosen once. The renderer never sees or sends a path —
+ // it asks for a dialog and is told the folder's name for display only.
+ folder: {
+ choose: () => ipcRenderer.invoke('folder:choose'),
+ get: () => ipcRenderer.invoke('folder:get'),
+ forget: () => ipcRenderer.invoke('folder:forget'),
+ },
+
+ // A sink that writes to disk as chunks arrive, never a buffer handed over at
+ // the end. `auto` uses the remembered folder without a dialog, which is what
+ // "save automatically" means; without one, or when the person asked to be
+ // prompted, a dialog opens. The renderer holds an id, not a path.
+ saveFile: async (suggestedName, opts) => {
+ const handle = await ipcRenderer.invoke('save:begin', suggestedName, opts);
if (!handle) return null;
return {
name: handle.name,
write: (chunk) => ipcRenderer.invoke('save:write', handle.id, chunk),
close: () => ipcRenderer.invoke('save:end', handle.id),
+ abort: () => ipcRenderer.invoke('save:abort', handle.id),
};
},
});