Browse Source

Merge pull request #5645 from johnkmzhou/autosave-interval

Add autosave interval setting.
Ian Rose 6 years ago
parent
commit
dc126c362b

+ 6 - 0
packages/docmanager-extension/schema/plugin.json

@@ -9,6 +9,12 @@
       "title": "Autosave Documents",
       "description": "Whether to autosave documents",
       "default": true
+    },
+    "autosaveInterval": {
+      "type": "number",
+      "title": "Autosave Interval",
+      "description": "Length of save interval in seconds",
+      "default": 120
     }
   },
   "additionalProperties": false,

+ 5 - 0
packages/docmanager-extension/src/index.ts

@@ -142,6 +142,11 @@ const docManagerPlugin: JupyterLabPlugin<IDocumentManager> = {
       docManager.autosave =
         autosave === true || autosave === false ? autosave : true;
       app.commands.notifyCommandChanged(CommandIDs.toggleAutosave);
+
+      const autosaveInterval = settings.get('autosaveInterval').composite as
+        | number
+        | null;
+      docManager.autosaveInterval = autosaveInterval || 120;
     };
 
     // Fetch the initial state of the settings.

+ 23 - 1
packages/docmanager/src/manager.ts

@@ -98,6 +98,7 @@ export class DocumentManager implements IDisposable {
   get autosave(): boolean {
     return this._autosave;
   }
+
   set autosave(value: boolean) {
     this._autosave = value;
 
@@ -112,6 +113,23 @@ export class DocumentManager implements IDisposable {
     });
   }
 
+  /**
+   * Determines the time interval for autosave in seconds.
+   */
+  get autosaveInterval(): number {
+    return this._autosaveInterval;
+  }
+
+  set autosaveInterval(value: number) {
+    this._autosaveInterval = value;
+
+    // For each existing context, set the save interval as needed.
+    this._contexts.forEach(context => {
+      const handler = Private.saveHandlerProperty.get(context);
+      handler.saveInterval = value || 120;
+    });
+  }
+
   /**
    * Get whether the document manager has been disposed.
    */
@@ -455,7 +473,10 @@ export class DocumentManager implements IDisposable {
       modelDBFactory,
       setBusy: this._setBusy
     });
-    let handler = new SaveHandler({ context });
+    let handler = new SaveHandler({
+      context,
+      saveInterval: this.autosaveInterval
+    });
     Private.saveHandlerProperty.set(context, handler);
     context.ready.then(() => {
       if (this.autosave) {
@@ -573,6 +594,7 @@ export class DocumentManager implements IDisposable {
   private _widgetManager: DocumentWidgetManager;
   private _isDisposed = false;
   private _autosave = true;
+  private _autosaveInterval = 120;
   private _when: Promise<void>;
   private _setBusy: () => IDisposable;
 }