Files
open360viewer/index.js
TheGreyDiamond 640132a8a2 - packaging kinda works now
- start of file listing
- allow argument opening
2022-05-28 14:17:23 +02:00

161 lines
3.9 KiB
JavaScript

const {
app,
BrowserWindow,
protocol,
Menu,
dialog,
ipcMain,
} = require("electron");
const url = require("url");
const path = require("path");
const FileType = require("file-type");
const glob = require("glob");
const fs = require("fs");
let win;
const isMac = process.platform === "darwin";
const template = [
// { role: 'fileMenu' }
{
label: "File",
submenu: [
{
label: "Open",
accelerator: "CmdOrCtrl+O",
click: function () {
dialog
.showOpenDialog({ properties: ["openFile", "multiSelections"] })
.then(function (data) {
if (data.canceled == false) {
FileType.fromFile(data.filePaths[0]).then((type) => {
data.type = type["mime"].split("/")[0];
win.webContents.send("FileData", data);
});
}
// console.log(await FileType.fromFile(data));
// win.webContents.send("FileData", data);
});
},
},
isMac ? { role: "close" } : { role: "quit" },
],
},
{
role: "help",
submenu: [
{ role: "toggleDevTools" },
{
label: "About",
click: async () => {
createStartupInfo();
},
},
],
},
];
function createStartupInfo() {
// aka. loading screen
const win2 = new BrowserWindow({
width: 500,
height: 400,
frame: true,
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
},
});
win2.setFullScreen(false);
win2.setAlwaysOnTop(false);
win2.loadFile(path.join(__dirname, "dist/ui_templates/about.html"));
win2.show();
return win2;
}
function createWindow() {
win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true,
contextIsolation: false,
},
});
win.loadURL(
url.format({
pathname: path.join(__dirname, "dist/ui_templates/index.html"),
protocol: "file:",
slashes: true,
})
);
// win.webContents.openDevTools();
const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
}
app.on("ready", function () {
createWindow();
console.log(process.argv)
ipcMain.on("synchronous-message", (event, arg) => {
console.log(arg);
if (arg == "openFile") {
dialog
.showOpenDialog({ properties: ["openFile", "multiSelections"] })
.then(function (data) {
FileType.fromFile(data.filePaths[0]).then((type) => {
data.type = type["mime"].split("/")[0];
console.info(data)
win.webContents.send("FileData", data);
});
});
event.returnValue = "";
} else if (arg == "resize") {
// A really ugly hack to force the window to update, so the canvas shows up
win.setSize(win.getSize()[0] + 1, win.getSize()[1]);
setTimeout(function () {
win.setSize(win.getSize()[0] + 1, win.getSize()[1]);
}, 200);
event.returnValue = "";
} else if (arg.includes("indexFolder")) {
const fold = arg.split(";")[1];
folder = fs.readdirSync(fold);
let result = [];
for (const file in folder) {
const myFile = folder[file];
if (fs.statSync(fold + "/" + myFile).isFile()) {
result.push(myFile)
}
}
event.returnValue = result;
} else if (arg == "finishedLoading") {
const tryOpenFile = process.argv[1];
if (tryOpenFile != undefined) {
console.log("Opening file: ", process.argv[1])
if (fs.existsSync(tryOpenFile)) {
data = {
canceled: false,
filePaths: [process.argv[1]]
};
FileType.fromFile(data.filePaths[0]).then((type) => {
data.type = type["mime"].split("/")[0];
console.log(data)
win.webContents.send("FileData", data);
});
} else {
console.log("Argument file does not exist")
}
}
}
});
});