@@ -61,12 +61,18 @@ async function createNewProject(targetWindow) {
61
61
return ;
62
62
}
63
63
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 ) ;
65
71
if ( ! projectWindow ) {
66
72
return ;
67
73
}
68
74
69
- let projectFileName = getProjectFileName ( saveResponse . filePath ) ;
75
+ let projectFileName = getProjectFileName ( projectFile ) ;
70
76
if ( path . extname ( projectFileName ) !== `.${ projectFileExtension } ` ) {
71
77
projectFileName = `${ projectFileName } .${ projectFileExtension } ` ;
72
78
}
@@ -92,24 +98,18 @@ async function openProject(targetWindow) {
92
98
}
93
99
94
100
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
103
103
}
104
104
105
- async function openProjectFile ( targetWindow , projectFile ) {
105
+ async function openProjectFile ( targetWindow , projectFile , isDirty ) {
106
106
return new Promise ( ( resolve , reject ) => {
107
107
const existingProjectWindow = _getOpenWindowForProject ( projectFile ) ;
108
108
if ( existingProjectWindow ) {
109
109
showExistingProjectWindow ( existingProjectWindow ) ;
110
110
resolve ( ) ;
111
111
} else {
112
- _createOrReplace ( targetWindow )
112
+ _createOrReplace ( targetWindow , isDirty )
113
113
. then ( projectWindow => {
114
114
if ( ! projectWindow ) {
115
115
return resolve ( ) ;
@@ -122,7 +122,14 @@ async function openProjectFile(targetWindow, projectFile) {
122
122
} )
123
123
. catch ( err => reject ( err ) ) ;
124
124
}
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
+ } ) ;
126
133
}
127
134
128
135
// request the existing project file, prompting the user if needed.
@@ -441,9 +448,9 @@ async function _saveExternalFileContents(projectDirectory, externalFileContents)
441
448
return saveResult ;
442
449
}
443
450
444
- async function _createOrReplace ( targetWindow ) {
451
+ async function _createOrReplace ( targetWindow , isDirty ) {
445
452
let projectWindow = targetWindow ;
446
- if ( openProjects . has ( targetWindow ) ) {
453
+ if ( openProjects . has ( targetWindow ) || isDirty ) {
447
454
const buttonResponse = await dialog . showMessageBox ( targetWindow , {
448
455
type : 'question' ,
449
456
message : i18n . t ( 'dialog-openProjectWindowPrompt' ) ,
@@ -867,6 +874,7 @@ module.exports = {
867
874
getWindowForProject,
868
875
exportArchiveFile,
869
876
isWktProjectFile,
877
+ initializeNewProject,
870
878
openProject,
871
879
openProjectFile,
872
880
_openProjectFile,
0 commit comments