|
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