Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 00e170d

Browse files
Check dirty flag before opening new or existing project (#127)
* Check dirty flag before opening new or existing project * Code cleanup
1 parent c7f60bf commit 00e170d

File tree

5 files changed

+50
-18
lines changed

5 files changed

+50
-18
lines changed

‎electron/app/js/ipcRendererPreload.js‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ contextBridge.exposeInMainWorld(
2828
send: (channel, ...args) => {
2929
const validChannels = [
3030
'close-window',
31+
'new-project',
3132
'open-project',
3233
'window-app-quit',
3334
'window-is-ready',
@@ -65,6 +66,8 @@ contextBridge.exposeInMainWorld(
6566
'show-startup-dialogs',
6667
'app-update-available',
6768
'blur-focused-item',
69+
'start-new-project',
70+
'start-open-project',
6871
'start-prepare-model',
6972
'start-validate-model',
7073
'start-create-image',

‎electron/app/js/project.js‎

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,18 @@ async function createNewProject(targetWindow) {
6161
return;
6262
}
6363

64-
let projectWindow = await _createOrReplace(targetWindow);
64+
sendToWindow(targetWindow, 'start-new-project', saveResponse.filePath);
65+
// window will reply with new-project -> initializeNewProject() including isDirty flag
66+
}
67+
68+
async function initializeNewProject(targetWindow, projectFile, isDirty) {
69+
// finish creating new project with project dirty flag
70+
let projectWindow = await _createOrReplace(targetWindow, isDirty);
6571
if (!projectWindow) {
6672
return;
6773
}
6874

69-
let projectFileName = getProjectFileName(saveResponse.filePath);
75+
let projectFileName = getProjectFileName(projectFile);
7076
if (path.extname(projectFileName) !== `.${projectFileExtension}`) {
7177
projectFileName = `${projectFileName}.${projectFileExtension}`;
7278
}
@@ -92,24 +98,18 @@ async function openProject(targetWindow) {
9298
}
9399

94100
const projectFileName = openResponse.filePaths[0];
95-
await openProjectFile(targetWindow, projectFileName)
96-
.catch(err => {
97-
dialog.showErrorBox(
98-
i18n.t('dialog-openProjectFileErrorTitle'),
99-
i18n.t('dialog-openProjectFileErrorMessage', { projectFileName: projectFileName, err: err }),
100-
);
101-
getLogger().error('Failed to open project file %s: %s', projectFileName, err);
102-
});
101+
sendToWindow(targetWindow, 'start-open-project', projectFileName);
102+
// window will reply with open-project -> openProjectFile() including isDirty flag
103103
}
104104

105-
async function openProjectFile(targetWindow, projectFile) {
105+
async function openProjectFile(targetWindow, projectFile,isDirty) {
106106
return new Promise((resolve, reject) => {
107107
const existingProjectWindow = _getOpenWindowForProject(projectFile);
108108
if (existingProjectWindow) {
109109
showExistingProjectWindow(existingProjectWindow);
110110
resolve();
111111
} else {
112-
_createOrReplace(targetWindow)
112+
_createOrReplace(targetWindow,isDirty)
113113
.then(projectWindow => {
114114
if (!projectWindow) {
115115
return resolve();
@@ -122,7 +122,14 @@ async function openProjectFile(targetWindow, projectFile) {
122122
})
123123
.catch(err => reject(err));
124124
}
125-
});
125+
})
126+
.catch(err => {
127+
dialog.showErrorBox(
128+
i18n.t('dialog-openProjectFileErrorTitle'),
129+
i18n.t('dialog-openProjectFileErrorMessage', { projectFileName: projectFile, err: err }),
130+
);
131+
getLogger().error('Failed to open project file %s: %s', projectFile, err);
132+
});
126133
}
127134

128135
// request the existing project file, prompting the user if needed.
@@ -441,9 +448,9 @@ async function _saveExternalFileContents(projectDirectory, externalFileContents)
441448
return saveResult;
442449
}
443450

444-
async function _createOrReplace(targetWindow) {
451+
async function _createOrReplace(targetWindow,isDirty) {
445452
let projectWindow = targetWindow;
446-
if (openProjects.has(targetWindow)) {
453+
if (openProjects.has(targetWindow)||isDirty) {
447454
const buttonResponse = await dialog.showMessageBox(targetWindow, {
448455
type: 'question',
449456
message: i18n.t('dialog-openProjectWindowPrompt'),
@@ -867,6 +874,7 @@ module.exports = {
867874
getWindowForProject,
868875
exportArchiveFile,
869876
isWktProjectFile,
877+
initializeNewProject,
870878
openProject,
871879
openProjectFile,
872880
_openProjectFile,

‎electron/app/main.js‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,19 @@ class Main {
241241
});
242242
});
243243

244-
ipcMain.on('open-project', async (event, projectFile) => {
244+
ipcMain.on('open-project', async (event, projectFile,isDirty) => {
245245
try {
246246
const currentWindow = event.sender.getOwnerBrowserWindow();
247-
await project.openProjectFile(currentWindow, projectFile);
247+
await project.openProjectFile(currentWindow, projectFile, isDirty);
248+
} catch (e) {
249+
this._logger.error(e);
250+
}
251+
});
252+
253+
ipcMain.on('new-project', async (event, projectFile, isDirty) => {
254+
try {
255+
const currentWindow = event.sender.getOwnerBrowserWindow();
256+
await project.initializeNewProject(currentWindow, projectFile, isDirty);
248257
} catch (e) {
249258
this._logger.error(e);
250259
}

‎webui/src/js/viewModels/app-main.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ function(accUtils, ko, i18n, project, wktConsole, dialogHelper, viewHelper, scre
4545
const file = getDroppedFile(event);
4646
wktLogger.debug(`dropped file path = ${file.path}`);
4747
if (window.api.path.extname(file.name).toLowerCase() === '.wktproj') {
48-
window.api.ipc.send('open-project', file.path);
48+
window.api.ipc.send('open-project', file.path,project.isDirty());
4949
} else {
5050
wktLogger.warn(`Dropped file ${file.path} extension was not recognized as a wktproj file`);
5151
}

‎webui/src/js/windowStateUtils.js‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,18 @@ function(wktProject, wktConsole, wdtDiscoverer, dialogHelper, projectIO,
7979
});
8080
});
8181

82+
// continue opening project with isDirty value
83+
window.api.ipc.receive('start-open-project', projectFileName => {
84+
blurSelection();
85+
window.api.ipc.send('open-project', projectFileName, wktProject.isDirty());
86+
});
87+
88+
// continue new project with isDirty value
89+
window.api.ipc.receive('start-new-project', projectFileName => {
90+
blurSelection();
91+
window.api.ipc.send('new-project', projectFileName, wktProject.isDirty());
92+
});
93+
8294
window.api.ipc.receive('start-close-project', () => {
8395
blurSelection();
8496
projectIO.closeProject(false).catch(err => {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /