From f5a19a6904e363f26626e29dcdacd45bfdd39217 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 8 Mar 2017 12:39:04 +0100 Subject: [PATCH] Move StateStore into the snapshot --- src/atom-environment.coffee | 8 ++++---- src/history-manager.js | 6 +++--- src/state-store.js | 41 ++++++++++++++++++++++--------------- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index 602ede421..134cf55d2 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -144,6 +144,8 @@ class AtomEnvironment extends Model @views = new ViewRegistry(this) @notifications = new NotificationManager + @stateStore = new StateStore('AtomEnvironments', 1) + @config = new Config({notificationManager: @notifications, @enablePersistence}) @config.setSchema null, {type: 'object', properties: _.clone(ConfigSchema)} @@ -193,7 +195,7 @@ class AtomEnvironment extends Model @windowEventHandler = new WindowEventHandler({atomEnvironment: this, @applicationDelegate}) - @history = new HistoryManager({@project, @commands}) + @history = new HistoryManager({@project, @commands, @stateStore}) # Keep instances of HistoryManager in sync @disposables.add @history.onDidChangeProjects (e) => @applicationDelegate.didChangeHistoryManager() unless e.reloaded @@ -202,8 +204,6 @@ class AtomEnvironment extends Model {@window, @document, @blobStore, @configDirPath, onlyLoadBaseStyleSheets} = params {devMode, safeMode, resourcePath, clearWindowState} = @getLoadSettings() - @stateStore = new StateStore('AtomEnvironments', 1) - if clearWindowState @getStorageFolder().clear() @stateStore.clear() @@ -256,7 +256,7 @@ class AtomEnvironment extends Model @observeAutoHideMenuBar() - @history.initialize(@stateStore, @window.localStorage) + @history.initialize(@window.localStorage) @disposables.add @applicationDelegate.onDidChangeHistoryManager(=> @history.loadState()) attachSaveStateListeners: -> diff --git a/src/history-manager.js b/src/history-manager.js index 8260e75bc..17ae73d75 100644 --- a/src/history-manager.js +++ b/src/history-manager.js @@ -8,7 +8,8 @@ import {Emitter, CompositeDisposable} from 'event-kit' // // The project history is used to enable the 'Reopen Project' menu. export class HistoryManager { - constructor ({project, commands}) { + constructor ({project, commands, stateStore}) { + this.stateStore = stateStore this.emitter = new Emitter() this.projects = [] this.disposables = new CompositeDisposable() @@ -16,8 +17,7 @@ export class HistoryManager { this.disposables.add(project.onDidChangePaths((projectPaths) => this.addProject(projectPaths))) } - initialize (stateStore, localStorage) { - this.stateStore = stateStore + initialize (localStorage) { this.localStorage = localStorage } diff --git a/src/state-store.js b/src/state-store.js index b192d8b04..e16857580 100644 --- a/src/state-store.js +++ b/src/state-store.js @@ -4,22 +4,31 @@ module.exports = class StateStore { constructor (databaseName, version) { this.connected = false - this.dbPromise = new Promise((resolve) => { - let dbOpenRequest = indexedDB.open(databaseName, version) - dbOpenRequest.onupgradeneeded = (event) => { - let db = event.target.result - db.createObjectStore('states') - } - dbOpenRequest.onsuccess = () => { - this.connected = true - resolve(dbOpenRequest.result) - } - dbOpenRequest.onerror = (error) => { - console.error('Could not connect to indexedDB', error) - this.connected = false - resolve(null) - } - }) + this.databaseName = databaseName + this.version = version + } + + get dbPromise () { + if (!this._dbPromise) { + this._dbPromise = new Promise((resolve) => { + const dbOpenRequest = indexedDB.open(this.databaseName, this.version) + dbOpenRequest.onupgradeneeded = (event) => { + let db = event.target.result + db.createObjectStore('states') + } + dbOpenRequest.onsuccess = () => { + this.connected = true + resolve(dbOpenRequest.result) + } + dbOpenRequest.onerror = (error) => { + console.error('Could not connect to indexedDB', error) + this.connected = false + resolve(null) + } + }) + } + + return this._dbPromise } isConnected () {