Bladeren bron

Merge pull request #3950 from ian-r-rose/fix_time_conflic_cancel

Fix cancellation of time-conflict-saving.
Afshin Darian 7 jaren geleden
bovenliggende
commit
a9e2796741
2 gewijzigde bestanden met toevoegingen van 19 en 4 verwijderingen
  1. 5 0
      packages/docmanager/src/savehandler.ts
  2. 14 4
      packages/docregistry/src/context.ts

+ 5 - 0
packages/docmanager/src/savehandler.ts

@@ -134,6 +134,11 @@ class SaveHandler implements IDisposable {
       // Restart the update to pick up the new interval.
       this._setTimer();
     }).catch(err => {
+      // If the user canceled the save, do nothing.
+      if (err.message === 'Cancel') {
+        return;
+      }
+      // Otherwise, log the error.
       console.error('Error in Auto-Save', err.message);
     });
   }

+ 14 - 4
packages/docregistry/src/context.ts

@@ -262,6 +262,14 @@ class Context<T extends DocumentRegistry.IModel> implements DocumentRegistry.ICo
         return this._populate();
       }
     }).catch(err => {
+      // If the save has been canceled by the user,
+      // throw the error so that whoever called save()
+      // can decide what to do.
+      if (err.message === 'Cancel') {
+        throw err;
+      }
+
+      // Otherwise show an error message and throw the error.
       const localPath = this._manager.contents.localPath(this._path);
       const name = PathExt.basename(localPath);
       this._handleError(err, `File Save Error for ${name}`);
@@ -501,7 +509,7 @@ class Context<T extends DocumentRegistry.IModel> implements DocumentRegistry.ICo
     let promise = this._manager.contents.get(path, { content: false });
     return promise.then(model => {
       if (this.isDisposed) {
-        return Promise.reject('Disposed');
+        return Promise.reject(new Error('Disposed'));
       }
       // We want to check last_modified (disk) > last_modified (client)
       // (our last save)
@@ -592,13 +600,15 @@ class Context<T extends DocumentRegistry.IModel> implements DocumentRegistry.ICo
       buttons: [Dialog.cancelButton(), revertBtn, overwriteBtn]
     }).then(result => {
       if (this.isDisposed) {
-        return Promise.reject('Disposed');
+        return Promise.reject(new Error('Disposed'));
       }
       if (result.button.label === 'OVERWRITE') {
         return this._manager.contents.save(this._path, options);
-      } else if (result.button.label === 'REVERT') {
+      }
+      if (result.button.label === 'REVERT') {
         return this.revert().then(() => { return model; });
       }
+      return Promise.reject(new Error('Cancel')); // Otherwise cancel the save.
     });
   }
 
@@ -613,7 +623,7 @@ class Context<T extends DocumentRegistry.IModel> implements DocumentRegistry.ICo
       buttons: [Dialog.cancelButton(), overwriteBtn]
     }).then(result => {
       if (this.isDisposed) {
-        return Promise.reject('Disposed');
+        return Promise.reject(new Error('Disposed'));
       }
       if (result.button.label === 'OVERWRITE') {
         return this._manager.contents.delete(path).then(() => {