Add FileBrowser API to BdApi (#842)

This commit is contained in:
2021-07-09 00:20:28 +02:00
parent bec2b1a5a6
commit 3d1b832ebc
4 changed files with 60 additions and 4 deletions
+45 -3
View File
@@ -1,4 +1,4 @@
import {ipcMain as ipc, BrowserWindow, app} from "electron";
import {ipcMain as ipc, BrowserWindow, app, dialog} from "electron";
import * as IPCEvents from "common/constants/ipcevents";
@@ -50,8 +50,8 @@ const runScript = async (event, script) => {
const openDevTools = event => event.sender.openDevTools();
const closeDevTools = event => event.sender.closeDevTools();
const createBrowserWindow = async (event, url, {windowOptions, closeOnUrl} = {}) => {
return await new Promise(resolve => {
const createBrowserWindow = (event, url, {windowOptions, closeOnUrl} = {}) => {
return new Promise(resolve => {
const windowInstance = new BrowserWindow(windowOptions);
windowInstance.webContents.on("did-navigate", (_, navUrl) => {
if (navUrl != closeOnUrl) return;
@@ -77,6 +77,47 @@ const setMinimumSize = (event, width, height) => {
const stopDevtoolsWarning = event => event.sender.removeAllListeners("devtools-opened");
const openDialog = (event, options = {}) => {
const {
mode = "open",
openDirectory = false,
openFile = true,
multiSelections = false,
filters,
promptToCreate = false,
defaultPath,
title,
showOverwriteConfirmation,
message,
showHiddenFiles,
modal = false
} = options;
const openFunction = {
open: dialog.showOpenDialog,
save: dialog.showSaveDialog
}[mode];
if (!openFunction) return Promise.resolve({error: "Unkown Mode: " + mode});
return openFunction.apply(dialog, [
modal && BrowserWindow.fromWebContents(event.sender),
{
defaultPath,
filters,
title,
message,
createDirectory: true,
properties: [
showHiddenFiles && "showHiddenFiles",
openDirectory && "openDirectory",
promptToCreate && "promptToCreate",
openDirectory && "openDirectory",
openFile && "openFile",
multiSelections && "multiSelections",
showOverwriteConfirmation && "showOverwriteConfirmation"
].filter(e => e),
}
].filter(e => e));
};
const registerPreload = (event, path) => {
app.commandLine.appendSwitch("preload", path);
};
@@ -92,6 +133,7 @@ export default class IPCMain {
ipc.on(IPCEvents.DEVTOOLS_WARNING, stopDevtoolsWarning);
ipc.on(IPCEvents.REGISTER_PRELOAD, registerPreload);
ipc.handle(IPCEvents.RUN_SCRIPT, runScript);
ipc.handle(IPCEvents.OPEN_DIALOG, openDialog);
ipc.handle(IPCEvents.OPEN_WINDOW, createBrowserWindow);
}
}