Improve settings storage

- add error reporting
- refactor
This commit is contained in:
Thomas Nordquist
2019-02-17 21:02:17 +01:00
parent 0ad91872a1
commit 9207af0aaa
17 changed files with 133 additions and 66 deletions

View File

@@ -10,32 +10,58 @@ import {
} from '../../events/StorageEvents'
export default class ConfigStorage {
private adapter: any
private file: string
private database: any
constructor(file: string) {
this.adapter = new FileAsync(file)
this.file = file
}
private async getDb() {
const adapter = new FileAsync(this.file)
if (!this.database) {
this.database = await lowdb(adapter)
}
return this.database
}
public async init() {
const database: lowdb.LoDashExplicitAsyncWrapper<any> = await lowdb(this.adapter)
backendEvents.subscribe(storageStoreEvent, async (event) => {
await database.set(event.store, event.data).write()
backendEvents.emit(makeStorageAcknoledgementEvent(event.transactionId), undefined)
const ack = makeStorageAcknoledgementEvent(event.transactionId)
try {
const db = await this.getDb()
await db.set(event.store, event.data).write()
backendEvents.emit(ack, undefined)
} catch (error) {
console.error(error)
backendEvents.emit(ack, { error, transactionId: event.transactionId, store: event.store })
}
})
backendEvents.subscribe(storageLoadEvent, async (event) => {
const responseEvent = makeStorageResponseEvent(event.transactionId)
try {
const data = await database.get(event.store).value()
backendEvents.emit(responseEvent, { data, transactionId: event.transactionId })
const db = await this.getDb()
const data = await db.get(event.store).value()
backendEvents.emit(responseEvent, { data, transactionId: event.transactionId, store: event.store })
} catch (error) {
console.error(error)
backendEvents.emit(responseEvent, { transactionId: event.transactionId })
backendEvents.emit(responseEvent, { error, transactionId: event.transactionId, store: event.store })
}
})
backendEvents.subscribe(storageClearEvent, async (event) => {
await database.drop()
backendEvents.emit(makeStorageAcknoledgementEvent(event.transactionId), undefined)
try {
const db = await this.getDb()
const keys = await db.keys().value()
for (const key of keys) {
await db.unset(key).write()
}
backendEvents.emit(makeStorageAcknoledgementEvent(event.transactionId), undefined)
} catch (error) {
backendEvents.emit(makeStorageAcknoledgementEvent(event.transactionId), { error, transactionId: event.transactionId })
}
})
}
}

View File

@@ -80,6 +80,3 @@ class UpdateNotifier {
}
export const updateNotifier = new UpdateNotifier()
const configStorage = new ConfigStorage('blah.json')
configStorage.init()