Mentions légales du service

Skip to content
Snippets Groups Projects

Resolve "Adding multiwindow support"

Merged VIAUD Nathan requested to merge 223-adding-multiwindow-support into main
Files
7
+ 57
35
const { ipcMain } = require('electron');
const path = require('path');
const store = require('./store');
const { ipcMain } = require('electron');
const { runPreview } = require('./preview');
const { getRecentFiles, pickEpocProject, openEpocProject, newEpocProject, saveEpocProject, exportProject, writeProjectData, writeEpocData, readProjectData, copyFileToWorkdir } = require('./file');
@@ -9,95 +9,117 @@ const { getRecentFiles, pickEpocProject, openEpocProject, newEpocProject, saveEp
* @param targetWindow
*/
const setupIpcListener = function (targetWindow) {
ipcMain.on('getRecentProjects', () => {
sendToFrontend(targetWindow, 'getRecentProjects', getRecentFiles());
ipcMain.on('getRecentProjects', (event) => {
if(event.sender !== targetWindow.webContents) return;
sendToFrontend(event.sender, 'getRecentProjects', getRecentFiles());
});
ipcMain.on('getCurrentProject', async () => {
if (store.state.currentProject && store.state.currentProject.workdir) {
const flow = await readProjectData(store.state.currentProject.workdir);
sendToFrontend(targetWindow, 'epocProjectReady', {project: store.state.currentProject, flow});
ipcMain.on('getCurrentProject', async (event) => {
if(event.sender !== targetWindow.webContents) return;
if (store.state.projects[targetWindow.id] && store.state.projects[targetWindow.id].workdir) {
const flow = await readProjectData(store.state.projects[targetWindow.id].workdir);
sendToFrontend(event.sender, 'epocProjectReady', {project: store.state.projects[targetWindow.id], flow});
}
});
ipcMain.on('pickEpocProject', () => {
sendToFrontend(targetWindow, 'epocProjectPicked', pickEpocProject());
ipcMain.on('pickEpocProject', (event) => {
if(event.sender !== targetWindow.webContents) return;
sendToFrontend(event.sender, 'epocProjectPicked', pickEpocProject());
});
ipcMain.on('openEpocProject', async (event, epocProjectPath) => {
if(event.sender !== targetWindow.webContents) return;
const project = await openEpocProject(epocProjectPath);
if(!project) {
sendToFrontend(targetWindow, 'epocProjectError');
sendToFrontend(event.sender, 'epocProjectError');
return;
}
const flow = await readProjectData(project.workdir);
sendToFrontend(targetWindow, 'epocProjectReady', {project, flow});
store.updateState('currentProject', project);
sendToFrontend(event.sender, 'epocProjectReady', {project, flow});
store.updateState('projects', {[targetWindow.id]: project });
});
ipcMain.on('newEpocProject', async () => {
ipcMain.on('newEpocProject', async (event) => {
if(event.sender !== targetWindow.webContents) return;
const project = await newEpocProject();
sendToFrontend(targetWindow, 'epocProjectReady', {project});
store.updateState('currentProject', project);
sendToFrontend(event.sender, 'epocProjectReady', {project});
store.updateState('projects', {[targetWindow.id]: project });
});
ipcMain.on('saveEpocProject', async () => {
sendToFrontend(targetWindow, 'epocProjectSaving');
updateSavedProject(targetWindow, await saveEpocProject(store.state.currentProject));
ipcMain.on('saveEpocProject', async (event) => {
if(event.sender !== targetWindow.webContents) return;
sendToFrontend(event.sender, 'epocProjectSaving');
updateSavedProject(event.sender, await saveEpocProject(store.state.projects[targetWindow.id]));
});
ipcMain.on('runPreview', async (event, contentPath) => {
if(event.sender !== targetWindow.webContents) return;
try {
await runPreview(store.state.currentProject.workdir, contentPath);
sendToFrontend(targetWindow, 'previewReady');
await runPreview(store.state.projects[targetWindow.id].workdir, contentPath);
sendToFrontend(event.sender, 'previewReady');
} catch (e) {
console.error(e);
sendToFrontend(targetWindow, 'previewError');
sendToFrontend(event.sender, 'previewError');
}
});
ipcMain.on('exportProject', async () => {
ipcMain.on('exportProject', async (event) => {
if(event.sender !== targetWindow.webContents) return;
try {
await exportProject(store.state.currentProject.workdir, store.state.currentProject.filepath);
sendToFrontend(targetWindow, 'projectExported');
await exportProject(store.state.projects[targetWindow.id].workdir, store.state.projects[targetWindow.id].filepath);
sendToFrontend(event.sender, 'projectExported');
} catch (e) {
console.error(e);
sendToFrontend(targetWindow, 'exportError');
sendToFrontend(event.sender, 'exportError');
}
});
ipcMain.on('writeProjectData', async (event, data) => {
await writeProjectData(store.state.currentProject.workdir, data);
if(event.sender !== targetWindow.webContents) return;
await writeProjectData(store.state.projects[targetWindow.id].workdir, data);
});
ipcMain.on('writeEpocData', async (event, data) => {
await writeEpocData(store.state.currentProject.workdir, data);
if(event.sender !== targetWindow.webContents) return;
await writeEpocData(store.state.projects[targetWindow.id].workdir, data);
});
ipcMain.on('importFile', async (event, filepath) => {
sendToFrontend(targetWindow, 'fileImported', await copyFileToWorkdir(store.state.currentProject.workdir, filepath));
if(event.sender !== targetWindow.webContents) return;
sendToFrontend(event.sender, 'fileImported', await copyFileToWorkdir(store.state.projects[targetWindow.id].workdir, filepath));
});
};
const sendToFrontend = function(targetWindow, channel, data) {
const sendToFrontend = function(webContents, channel, data) {
if (typeof data === 'string') {
targetWindow.webContents.send(channel, data);
webContents.send(channel, data);
} else {
targetWindow.webContents.send(channel, JSON.stringify(data));
webContents.send(channel, JSON.stringify(data));
}
};
const updateSavedProject = function (targetWindow, filepath) {
const updateSavedProject = function (webContents, filepath) {
if (filepath) {
const project = {
name: path.basename(filepath),
filepath: filepath,
workdir: store.state.currentProject.workdir,
workdir: store.state.projects[webContents.id].workdir,
modified: new Date().toISOString()
};
store.updateState('currentProject', project);
sendToFrontend(targetWindow, 'epocProjectSaved', project);
store.updateState('projects', {[webContents.id]: project});
sendToFrontend(webContents, 'epocProjectSaved', project);
}
};
Loading