mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-23 02:10:12 +01:00
add versioning and migrateing data
This commit is contained in:
parent
8e30acb41a
commit
282775c52f
@ -23,20 +23,25 @@ module.exports = class IndexDbController extends EventEmitter {
|
||||
}
|
||||
dbOpenRequest.onsuccess = (event) => {
|
||||
this.db = dbOpenRequest.result
|
||||
if (!this.db.objectStoreNames.length) {
|
||||
Object.keys(this.initialState).forEach((key) => {
|
||||
this._add(key, this.initialState[key])
|
||||
})
|
||||
}
|
||||
this.emit('success')
|
||||
resolve(this.db)
|
||||
}
|
||||
dbOpenRequest.onupgradeneeded = (event) => {
|
||||
// if (this.migrators)
|
||||
this.db = event.target.result
|
||||
this.migrate()
|
||||
this.db.createObjectStore('dataStore')
|
||||
}
|
||||
})
|
||||
.then((openRequest) => {
|
||||
return this.get('dataStore')
|
||||
})
|
||||
.then((data) => {
|
||||
if (!data) {
|
||||
return this._add('dataStore', this.initialState)
|
||||
.then(() => this.get('dataStore'))
|
||||
.then((versionedData) => Promise.resolve(versionedData.data))
|
||||
}
|
||||
return Promise.resolve(data)
|
||||
})
|
||||
}
|
||||
|
||||
requestObjectStore (key, type = 'readonly') {
|
||||
@ -47,7 +52,7 @@ module.exports = class IndexDbController extends EventEmitter {
|
||||
})
|
||||
}
|
||||
|
||||
get (key) {
|
||||
get (key = 'dataStore') {
|
||||
return this.requestObjectStore(key)
|
||||
.then((dataObject)=> {
|
||||
return new Promise((resolve, reject) => {
|
||||
@ -67,10 +72,6 @@ module.exports = class IndexDbController extends EventEmitter {
|
||||
})
|
||||
}
|
||||
|
||||
migrate () {
|
||||
this.db.createObjectStore('dataStore')
|
||||
}
|
||||
|
||||
_add (key, objStore, cb = logger) {
|
||||
return this.requestObjectStore(key, 'readwrite')
|
||||
.then((dataObject)=> {
|
||||
|
@ -59,12 +59,6 @@ const dbController = new DbController({
|
||||
key: STORAGE_KEY,
|
||||
global: self,
|
||||
version: 2,
|
||||
initialState: {
|
||||
dataStore: {
|
||||
meta: 2,
|
||||
data: firstTimeState,
|
||||
},
|
||||
},
|
||||
})
|
||||
asyncQ.waterfall([
|
||||
() => loadStateFromPersistence(),
|
||||
@ -87,36 +81,12 @@ function loadStateFromPersistence() {
|
||||
const initialState = migrator.generateInitialState(firstTimeState)
|
||||
dbController.initialState = initialState
|
||||
return dbController.open()
|
||||
.then((openRequest) => {
|
||||
return dbController.get('dataStore')
|
||||
.then((versionedData) => migrator.migrateData(versionedData))
|
||||
.then((versionedData) => {
|
||||
dbController.put(versionedData)
|
||||
return Promise.resolve(versionedData)
|
||||
})
|
||||
.then((data) => {
|
||||
if (!data) {
|
||||
return dbController._add('dataStore', initialState)
|
||||
.then(() => dbController.get('dataStore'))
|
||||
.then((versionedData) => Promise.resolve(versionedData.data))
|
||||
}
|
||||
|
||||
return Promise.resolve(data.data)
|
||||
})
|
||||
.catch((err) => console.error(err))
|
||||
/*
|
||||
need to get migrations working
|
||||
*/
|
||||
|
||||
// return asyncQ.waterfall([
|
||||
// // read from disk
|
||||
// () => Promise.resolve(diskStore || initialState),
|
||||
// // migrate data
|
||||
// (versionedData) => migrator.migrateData(versionedData),
|
||||
// // write to disk
|
||||
// (versionedData) => {
|
||||
// diskStore.put(versionedData)
|
||||
// return Promise.resolve(versionedData)
|
||||
// },
|
||||
// // resolve to just data
|
||||
// (versionedData) => Promise.resolve(versionedData.data),
|
||||
// ])
|
||||
.then((versionedData) => Promise.resolve(versionedData.data))
|
||||
}
|
||||
|
||||
function setupController (initState, client) {
|
||||
@ -142,14 +112,20 @@ function setupController (initState, client) {
|
||||
// diskStore
|
||||
// )
|
||||
controller.store.subscribe((state) => {
|
||||
dbController.put(versionifyData(state))
|
||||
versionifyData(state)
|
||||
.then((versionedData) => dbController.put(versionedData))
|
||||
.catch((err) => {console.error(err)})
|
||||
})
|
||||
function versionifyData(state) {
|
||||
// let versionedData = diskStore.getState()
|
||||
// let versionedData
|
||||
// versionedData.data = state
|
||||
let versionedData = {data: state}
|
||||
return versionedData
|
||||
return dbController.get()
|
||||
.then((rawData) => {
|
||||
return Promise.resolve({
|
||||
data: state,
|
||||
meta: rawData.meta,
|
||||
})}
|
||||
)
|
||||
}
|
||||
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user