|
1 | 1 | /** |
2 | 2 | * @license |
3 | | - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. |
| 3 | + * Copyright (c) 2021, 2023, Oracle and/or its affiliates. |
4 | 4 | * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. |
5 | 5 | */ |
6 | 6 | const {app, dialog} = require('electron'); |
@@ -142,29 +142,18 @@ async function openProjectFile(targetWindow, projectFile, isDirty) { |
142 | 142 | const existingProjectWindow = _getOpenWindowForProject(projectFile); |
143 | 143 | if (existingProjectWindow) { |
144 | 144 | showExistingProjectWindow(existingProjectWindow); |
145 | | - resolve(); |
| 145 | + return resolve(); |
146 | 146 | } else { |
147 | | - _createOrReplace(targetWindow, isDirty) |
148 | | - .then(projectWindow => { |
149 | | - if (!projectWindow) { |
150 | | - return resolve(); |
151 | | - } |
152 | | - _openProjectFile(projectWindow, projectFile) |
153 | | - .then(() => { |
154 | | - resolve(); |
155 | | - }) |
156 | | - .catch(err => reject(err)); |
157 | | - }) |
158 | | - .catch(err => reject(err)); |
| 147 | + _createOrReplace(targetWindow, isDirty).then(projectWindow => { |
| 148 | + if (!projectWindow) { |
| 149 | + return resolve(); |
| 150 | + } |
| 151 | + _openProjectFile(projectWindow, projectFile).then(() => { |
| 152 | + return resolve(); |
| 153 | + }).catch(err => reject(err)); |
| 154 | + }).catch(err => reject(err)); |
159 | 155 | } |
160 | | - }) |
161 | | - .catch(err => { |
162 | | - dialog.showErrorBox( |
163 | | - i18n.t('dialog-openProjectFileErrorTitle'), |
164 | | - i18n.t('dialog-openProjectFileErrorMessage', { projectFileName: projectFile, err: errorUtils.getErrorMessage(err) }), |
165 | | - ); |
166 | | - getLogger().error('Failed to open project file %s: %s', projectFile, err); |
167 | | - }); |
| 156 | + }); |
168 | 157 | } |
169 | 158 |
|
170 | 159 | // request the existing project file, prompting the user if needed. |
@@ -438,7 +427,7 @@ function _generateProjectUuid() { |
438 | 427 | // |
439 | 428 | async function _openProjectFile(targetWindow, projectFileName) { |
440 | 429 | if (targetWindow.isReady) { |
441 | | - return new Promise((resolve, reject) => { |
| 430 | + return new Promise((resolve) => { |
442 | 431 | readFile(projectFileName, { encoding: 'utf8' }).then(data => { |
443 | 432 | let jsonContent; |
444 | 433 | try { |
@@ -466,12 +455,27 @@ async function _openProjectFile(targetWindow, projectFileName) { |
466 | 455 | getLogger().debug('_openProjectFile adding %s to recent documents', projectFileName); |
467 | 456 | app.addRecentDocument(projectFileName); |
468 | 457 | resolve(); |
469 | | - }).catch(err => reject(err)); |
470 | | - }).catch(err => reject(err)); |
471 | | - }).catch(err => reject(err)); |
| 458 | + }).catch(err => { |
| 459 | + dialog.showErrorBox(i18n.t('dialog-openProjectFileSendToWindowErrorTitleErrorTitle'), |
| 460 | + i18n.t('dialog-openProjectFileSendToWindowErrorMessage', { projectFileName, err })); |
| 461 | + closeProject(targetWindow, true); |
| 462 | + resolve(); |
| 463 | + }); |
| 464 | + }).catch(err => { |
| 465 | + _show_load_credentials_error(projectFileName, err); |
| 466 | + openProjects.delete(targetWindow); |
| 467 | + resolve(); |
| 468 | + }); |
| 469 | + }).catch(err => { |
| 470 | + dialog.showErrorBox(i18n.t('dialog-openProjectFileCredentialManagerErrorTitle'), |
| 471 | + i18n.t('dialog-openProjectFileCredentialManagerErrorMessage', { projectFileName, err })); |
| 472 | + getLogger().error('Failed to open project %s due to error while creating the credential manager: %s', |
| 473 | + projectFileName, err); |
| 474 | + openProjects.delete(targetWindow); |
| 475 | + resolve(); |
| 476 | + }); |
472 | 477 | }).catch(err => { |
473 | | - dialog.showErrorBox( |
474 | | - i18n.t('dialog-openProjectFileReadErrorTitle'), |
| 478 | + dialog.showErrorBox(i18n.t('dialog-openProjectFileReadErrorTitle'), |
475 | 479 | i18n.t('dialog-openProjectFileReadErrorMessage', { projectFileName: projectFileName, err: err }), |
476 | 480 | ); |
477 | 481 | resolve(); |
@@ -999,6 +1003,20 @@ function downloadFile(targetWindow, lines, fileType, format, formatName) { |
999 | 1003 | }); |
1000 | 1004 | } |
1001 | 1005 |
|
| 1006 | +function _show_load_credentials_error(projectFileName, err) { |
| 1007 | + let logMessage; |
| 1008 | + if (err?.message?.endsWith(EncryptedCredentialManager.BAD_PASSPHRASE_KEY)) { |
| 1009 | + logMessage = 'Failed to open project %s due to invalid passphrase: %s'; |
| 1010 | + dialog.showErrorBox(i18n.t('dialog-openProjectFileBadPassphraseErrorTitle'), |
| 1011 | + i18n.t('dialog-openProjectFileBadPassphraseErrorMessage', { projectFileName, err })); |
| 1012 | + } else { |
| 1013 | + logMessage = 'Failed to open project %s due to an error while loading credentials: %s'; |
| 1014 | + dialog.showErrorBox(i18n.t('dialog-openProjectFileLoadCredentialsErrorTitle'), |
| 1015 | + i18n.t('dialog-openProjectFileLoadCredentialsErrorTitle', { projectFileName, err })); |
| 1016 | + } |
| 1017 | + getLogger().error(logMessage, projectFileName, err); |
| 1018 | +} |
| 1019 | + |
1002 | 1020 | module.exports = { |
1003 | 1021 | chooseArchiveFile, |
1004 | 1022 | chooseModelFile, |
|
0 commit comments