add ipc and test app
This commit is contained in:
parent
31a0d7d452
commit
a11d19a457
@ -6,7 +6,7 @@
|
|||||||
"license": "SEE LICENSE IN LICENSE.txt",
|
"license": "SEE LICENSE IN LICENSE.txt",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"tsc": "tsup-node ./src/main.ts",
|
"tsc": "tsup-node ./src/main.ts",
|
||||||
"dev": "tsup-node ./src/main.ts --watch --onSuccess 'yarn electron dist/main.js'",
|
"dev": "tsup-node ./src/main.ts ./src/preload/index.ts --watch --onSuccess 'yarn electron dist/main.js'",
|
||||||
"prod": "tsc && node --max-old-space-size=4096 ./dist/server.js",
|
"prod": "tsc && node --max-old-space-size=4096 ./dist/server.js",
|
||||||
"runprod": "node --max-old-space-size=4096 ./dist/server.js",
|
"runprod": "node --max-old-space-size=4096 ./dist/server.js",
|
||||||
"profile": "tsc && node --prof ./dist/server.js",
|
"profile": "tsc && node --prof ./dist/server.js",
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
import { app, BrowserWindow } from "electron";
|
import { app, BrowserWindow, globalShortcut } from "electron";
|
||||||
|
|
||||||
import { createWindow, getWindow } from "./window";
|
import { createWindow, getWindow } from "./window";
|
||||||
import { createTray } from "./tray";
|
import { createTray } from "./tray";
|
||||||
// import * as autoUpdater from "./auto-updater";
|
import autoUpdater from "./auto-updater";
|
||||||
import updateAutoLaunch from "./update-auto-launch";
|
import updateAutoLaunch from "./update-auto-launch";
|
||||||
|
import ipc, { emitMutedKeyPress } from "./ipc";
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
const appLock = app.requestSingleInstanceLock();
|
const appLock = app.requestSingleInstanceLock();
|
||||||
@ -32,14 +33,11 @@ function init() {
|
|||||||
|
|
||||||
// This method will be called when Electron has finished loading
|
// This method will be called when Electron has finished loading
|
||||||
app.on("ready", () => {
|
app.on("ready", () => {
|
||||||
// autoUpdater.init();
|
autoUpdater.init();
|
||||||
|
|
||||||
// enable auto launch
|
// enable auto launch
|
||||||
updateAutoLaunch();
|
updateAutoLaunch();
|
||||||
|
|
||||||
// load ipc handler
|
|
||||||
// ipc();
|
|
||||||
|
|
||||||
// Don't show the app in the doc
|
// Don't show the app in the doc
|
||||||
// if (app.dock) {
|
// if (app.dock) {
|
||||||
// app.dock.hide();
|
// app.dock.hide();
|
||||||
@ -47,6 +45,13 @@ function init() {
|
|||||||
|
|
||||||
createWindow();
|
createWindow();
|
||||||
createTray();
|
createTray();
|
||||||
|
|
||||||
|
// load ipc handler
|
||||||
|
ipc();
|
||||||
|
|
||||||
|
globalShortcut.register("Alt+CommandOrControl+M", () => {
|
||||||
|
emitMutedKeyPress();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Quit when all windows are closed.
|
// Quit when all windows are closed.
|
||||||
|
@ -38,7 +38,7 @@ export async function manualRequestUpdateCheck() {
|
|||||||
isManualRequestedUpdate = false;
|
isManualRequestedUpdate = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function init() {
|
function init() {
|
||||||
autoUpdater.logger = log;
|
autoUpdater.logger = log;
|
||||||
|
|
||||||
autoUpdater.on("update-downloaded", ({ releaseNotes, releaseName }) => {
|
autoUpdater.on("update-downloaded", ({ releaseNotes, releaseName }) => {
|
||||||
@ -92,3 +92,7 @@ export function init() {
|
|||||||
// run update check every hour again
|
// run update check every hour again
|
||||||
setInterval(() => checkForUpdates, 1000 * 60 * 1);
|
setInterval(() => checkForUpdates, 1000 * 60 * 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
init,
|
||||||
|
};
|
||||||
|
18
desktop/src/ipc.ts
Normal file
18
desktop/src/ipc.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { ipcMain } from "electron";
|
||||||
|
import { createAndShowNotification } from "./notification";
|
||||||
|
import { getWindow } from "./window";
|
||||||
|
|
||||||
|
export function emitMutedKeyPress() {
|
||||||
|
const mainWindow = getWindow();
|
||||||
|
if (!mainWindow) {
|
||||||
|
throw new Error("Main window not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
mainWindow.webContents.send("on-muted-key-press");
|
||||||
|
}
|
||||||
|
|
||||||
|
export default () => {
|
||||||
|
ipcMain.on("notify", (event, txt) => {
|
||||||
|
createAndShowNotification({ body: txt });
|
||||||
|
});
|
||||||
|
};
|
8
desktop/src/preload/index.ts
Normal file
8
desktop/src/preload/index.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { contextBridge, ipcRenderer, IpcRendererEvent } from "electron";
|
||||||
|
|
||||||
|
contextBridge.exposeInMainWorld("WorkAdventureDesktopApi", {
|
||||||
|
desktop: true,
|
||||||
|
notify: (txt: string) => ipcRenderer.send("notify", txt),
|
||||||
|
onMutedKeyPress: (callback: (event: IpcRendererEvent) => void) =>
|
||||||
|
ipcRenderer.on("on-muted-key-press", callback),
|
||||||
|
});
|
@ -1,10 +1,12 @@
|
|||||||
import { BrowserWindow } from "electron";
|
import { BrowserWindow } from "electron";
|
||||||
|
import electronIsDev from "electron-is-dev";
|
||||||
import windowStateKeeper from "electron-window-state";
|
import windowStateKeeper from "electron-window-state";
|
||||||
import { getTray } from "./tray";
|
import path from "path";
|
||||||
|
|
||||||
let mainWindow: BrowserWindow | undefined;
|
let mainWindow: BrowserWindow | undefined;
|
||||||
|
|
||||||
const url = process.env.PLAY_URL; // TODO
|
const url = process.env.PLAY_URL;
|
||||||
|
// "https://play.staging.workadventu.re/@/tcm/workadventure/wa-village"; // TODO
|
||||||
|
|
||||||
export function getWindow() {
|
export function getWindow() {
|
||||||
return mainWindow;
|
return mainWindow;
|
||||||
@ -32,6 +34,7 @@ export function createWindow() {
|
|||||||
show: false,
|
show: false,
|
||||||
title: "WorkAdventure",
|
title: "WorkAdventure",
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
preload: path.join(__dirname, "../dist/preload/index.js"),
|
||||||
// allowRunningInsecureContent: false,
|
// allowRunningInsecureContent: false,
|
||||||
// contextIsolation: true, // TODO: remove in electron 12
|
// contextIsolation: true, // TODO: remove in electron 12
|
||||||
// nodeIntegration: false,
|
// nodeIntegration: false,
|
||||||
@ -73,9 +76,12 @@ export function createWindow() {
|
|||||||
// app.confirmedExitPrompt = false;
|
// app.confirmedExitPrompt = false;
|
||||||
// }
|
// }
|
||||||
// });
|
// });
|
||||||
// and load the index.html of the app.
|
|
||||||
|
|
||||||
if (url) {
|
if (!url || electronIsDev) {
|
||||||
|
// TODO
|
||||||
|
mainWindow.loadFile("../test-app/index.html");
|
||||||
|
mainWindow.webContents.openDevTools();
|
||||||
|
} else {
|
||||||
mainWindow.loadURL(url); // TODO: load app on demand
|
mainWindow.loadURL(url); // TODO: load app on demand
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
13
desktop/test-app/index.html
Normal file
13
desktop/test-app/index.html
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>WorkAdventure Desktop Demo</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="demo">Hello World!</div>
|
||||||
|
<button id="btn-reload">Refresh</button>
|
||||||
|
<button id="btn-api">Call api</button>
|
||||||
|
<script src="./web.js" lang="javascript"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
25
desktop/test-app/web.js
Normal file
25
desktop/test-app/web.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
let muted = false;
|
||||||
|
|
||||||
|
if (window?.WorkAdventureDesktopApi?.desktop) {
|
||||||
|
document.getElementById("demo").innerHTML =
|
||||||
|
"Hello Desktop app! Press ctrl-alt-m to mute.";
|
||||||
|
|
||||||
|
window?.WorkAdventureDesktopApi?.onMutedKeyPress((event) => {
|
||||||
|
if (muted) {
|
||||||
|
document.getElementById("demo").innerHTML =
|
||||||
|
"Ready to speak! Press ctrl-alt-m to mute.";
|
||||||
|
} else {
|
||||||
|
document.getElementById("demo").innerHTML =
|
||||||
|
"Muted! Press ctrl-alt-m to unmute again.";
|
||||||
|
}
|
||||||
|
muted = !muted;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById("btn-reload").onclick = () => {
|
||||||
|
location.reload();
|
||||||
|
};
|
||||||
|
|
||||||
|
document.getElementById("btn-api").onclick = () => {
|
||||||
|
window.WorkAdventureDesktopApi.notify("Hello from website");
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user