ionian/app.ts
2021-02-22 23:08:44 +09:00

87 lines
2.1 KiB
TypeScript

import { app, BrowserWindow } from "electron";
import { get_setting } from "./src/setting";
import { create_server, start_server } from "./src/server";
const loading_html = `<!DOCTYPE html>
<html lang="ko"><head>
<meta charset="UTF-8">
<title>react-sample</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<style>
body { margin-top: 100px; background-color: #3f51b5; color: #fff; text-align:center; }
h1 {
font: 2em 'Roboto', sans-serif;
margin-bottom: 40px;
}
#loading {
display: inline-block;
width: 50px;
height: 50px;
border: 3px solid rgba(255,255,255,.3);
border-radius: 50%;
border-top-color: #fff;
animation: spin 1s linear infinite;
}
@keyframes spin {
to { transform: rotate(360deg);}
}
</style>
<body>
<h1>Loading</h1>
<div id="loading"></div>
</body>
</html>
`;
const setting = get_setting();
if (!setting.cli) {
let window: BrowserWindow | null = null;
const createWindow = async () => {
window = new BrowserWindow({
width: 800,
height: 600,
center: true,
useContentSize: true,
});
await window.loadURL(`data:text/html;base64,`+Buffer.from(loading_html).toString('base64'));
const server = await create_server();
start_server(server);
await window.loadURL(`http://localhost:${setting.port}`);
window.on("closed", () => {
window = null;
});
};
const isPrimary = app.requestSingleInstanceLock();
if (!isPrimary) {
app.quit(); //exit window
app.exit();
}
app.on("second-instance", () => {
if (window != null) {
if (window.isMinimized()) {
window.restore();
}
window.focus();
}
});
app.on("ready", (event, info) => {
createWindow();
});
app.on("window-all-closed", () => { // quit when all windows are closed
if (process.platform != "darwin") app.quit(); // (except leave MacOS app active until Cmd+Q)
});
app.on("activate", () => { // re-recreate window when dock icon is clicked and no other windows open
if (window == null) createWindow();
});
} else {
(async () => {
const server = await create_server();
start_server(server);
})();
}