made opening files asynchronous between render and bg process

addresses #2
pull/2/head
Michael Ochmann 3 years ago
parent f54ba7c242
commit 4cbc2bf384
  1. 3
      contextAPI.js
  2. 8
      src/Ation.js
  3. 12
      src/WindowManager.js
  4. 11
      src/ui/src/components/Ation.js

@ -3,5 +3,6 @@
const {contextBridge, ipcRenderer} = require("electron"); const {contextBridge, ipcRenderer} = require("electron");
contextBridge.exposeInMainWorld("api", { contextBridge.exposeInMainWorld("api", {
openFile : async () => ipcRenderer.invoke("WindowManager::openFile") openFileDialog : () => ipcRenderer.send("WindowManager::openFileDialog"),
openFile : callback => ipcRenderer.on("Ation::openFile", (_, presentation) => callback(presentation))
}); });

@ -10,14 +10,22 @@ const {parser} = require("./Parser");
class Ation { class Ation {
windowManager; windowManager;
mainMenu; mainMenu;
fileToOpen;
constructor() { constructor() {
if (Ation.Instances > 0) if (Ation.Instances > 0)
throw new Error("Only one Instance of Ation possible"); throw new Error("Only one Instance of Ation possible");
this.fileToOpen = null;
this.windowManager = new WindowManager(this); this.windowManager = new WindowManager(this);
this.mainMenu = new MainMenu(this); this.mainMenu = new MainMenu(this);
app.on("open-file", (_, path) => {
this.fileToOpen = path;
});
app.whenReady().then(async () => { app.whenReady().then(async () => {
if (this.fileToOpen)
dialog.showMessageBox(this.windowManager.mainWindow, {message : this.fileToOpen});
protocol.registerFileProtocol("slideimg", (request, callback) => { protocol.registerFileProtocol("slideimg", (request, callback) => {
const uri = request.url.replace(/^slideimg:\/\//, ""); const uri = request.url.replace(/^slideimg:\/\//, "");
const extension = path.extname(uri).replace(/^\./, ""); const extension = path.extname(uri).replace(/^\./, "");

@ -1,8 +1,7 @@
"use strict"; "use strict";
const {app, BrowserWindow, ipcMain, dialog, Menu} = require("electron"); const {app, BrowserWindow, ipcMain, globalShortcut} = require("electron");
const path = require("path"); const path = require("path");
const fs = require("fs/promises");
const util = require("util"); const util = require("util");
const {isDevelopment} = require("./Util"); const {isDevelopment} = require("./Util");
@ -28,6 +27,15 @@ class WindowManager {
titleBarStyle : "hiddenInset" titleBarStyle : "hiddenInset"
}); });
if (isDevelopment) {
globalShortcut.register("CommandOrControl+I", () => {
this.mainWindow.toggleDevTools();
});
globalShortcut.register("CommandOrControl+R", () => {
this.mainWindow.reload();
});
}
if (isDevelopment()) if (isDevelopment())
this.mainWindow.loadURL("http://localhost:3000"); this.mainWindow.loadURL("http://localhost:3000");
else else

@ -18,13 +18,18 @@ const Ation = () => {
const [basePath, setBasePath] = useState(""); const [basePath, setBasePath] = useState("");
const [showTips, setShowTips] = useState(false); const [showTips, setShowTips] = useState(false);
const openFile = async () => { useEffect(() => {
const [basePath, slideDeck] = await window.api.openFile(); window.api.openFile(presentation => {
const [basePath, slideDeck] = presentation;
if (!slideDeck) if (!slideDeck)
return; return;
setBasePath(basePath); setBasePath(basePath);
setDeck(slideDeck); setDeck(slideDeck);
});
}, []);
const openFile = () => {
window.api.openFileDialog();
} }
if (deck.length < 1) if (deck.length < 1)

Loading…
Cancel
Save