diff --git a/html/src/repository/config.js b/html/src/repository/config.js index 5cfb7240..308d6098 100644 --- a/html/src/repository/config.js +++ b/html/src/repository/config.js @@ -5,18 +5,22 @@ var dirtyKeySet = new Set(); class ConfigRepository extends SharedRepository { async init() { - try { - await sqliteService.executeNonQuery('CREATE TABLE IF NOT EXISTS configs (`key` TEXT PRIMARY KEY, `value` TEXT)'); - await sqliteService.execute( - (key, value) => sharedRepository.setString(key, value), - 'SELECT `key`, `value` FROM configs' - ); - } catch (err) { - console.error(err); - } + await sqliteService.executeNonQuery( + 'CREATE TABLE IF NOT EXISTS configs (`key` TEXT PRIMARY KEY, `value` TEXT)' + ); + await sqliteService.execute( + (key, value) => sharedRepository.setString(key, value), + 'SELECT `key`, `value` FROM configs' + ); syncLoop(); } + remove(key) { + key = transformKey(key); + sharedRepository.remove(key); + dirtyKeySet.add(key); + } + getString(key, defaultValue = null) { key = transformKey(key); return sharedRepository.getString(key, defaultValue); @@ -40,13 +44,23 @@ async function syncLoop() { await sqliteService.executeNonQuery('BEGIN'); try { for (var key of dirtyKeySet) { - await sqliteService.executeNonQuery( - 'INSERT OR REPLACE INTO configs (`key`, `value`) VALUES (@key, @value)', - { - '@key': key, - '@value': sharedRepository.getString(key) - } - ); + var value = sharedRepository.getString(key); + if (value === null) { + await sqliteService.executeNonQuery( + 'DELETE FROM configs WHERE `key` = @key', + { + '@key': key, + } + ); + } else { + await sqliteService.executeNonQuery( + 'INSERT OR REPLACE INTO configs (`key`, `value`) VALUES (@key, @value)', + { + '@key': key, + '@value': value + } + ); + } } dirtyKeySet.clear(); } finally { diff --git a/html/src/repository/shared.js b/html/src/repository/shared.js index be620486..a3dc0e6a 100644 --- a/html/src/repository/shared.js +++ b/html/src/repository/shared.js @@ -1,6 +1,10 @@ // requires binding of SharedVariable class SharedRepository { + remove(key) { + key = transformKey(key); + return SharedVariable.Remove(key); + } getString(key, defaultValue = null) { key = transformKey(key); var value = SharedVariable.Get(key);