Improve settings storage
- add error reporting - refactor
This commit is contained in:
@@ -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 })
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +80,3 @@ class UpdateNotifier {
|
||||
}
|
||||
|
||||
export const updateNotifier = new UpdateNotifier()
|
||||
|
||||
const configStorage = new ConfigStorage('blah.json')
|
||||
configStorage.init()
|
||||
|
||||
Reference in New Issue
Block a user