add removing config by key

This commit is contained in:
pypy
2020-11-07 21:48:32 +09:00
parent 999b718b46
commit e8c75f2ccb
2 changed files with 34 additions and 16 deletions

View File

@@ -5,18 +5,22 @@ var dirtyKeySet = new Set();
class ConfigRepository extends SharedRepository { class ConfigRepository extends SharedRepository {
async init() { async init() {
try { await sqliteService.executeNonQuery(
await sqliteService.executeNonQuery('CREATE TABLE IF NOT EXISTS configs (`key` TEXT PRIMARY KEY, `value` TEXT)'); 'CREATE TABLE IF NOT EXISTS configs (`key` TEXT PRIMARY KEY, `value` TEXT)'
await sqliteService.execute( );
(key, value) => sharedRepository.setString(key, value), await sqliteService.execute(
'SELECT `key`, `value` FROM configs' (key, value) => sharedRepository.setString(key, value),
); 'SELECT `key`, `value` FROM configs'
} catch (err) { );
console.error(err);
}
syncLoop(); syncLoop();
} }
remove(key) {
key = transformKey(key);
sharedRepository.remove(key);
dirtyKeySet.add(key);
}
getString(key, defaultValue = null) { getString(key, defaultValue = null) {
key = transformKey(key); key = transformKey(key);
return sharedRepository.getString(key, defaultValue); return sharedRepository.getString(key, defaultValue);
@@ -40,13 +44,23 @@ async function syncLoop() {
await sqliteService.executeNonQuery('BEGIN'); await sqliteService.executeNonQuery('BEGIN');
try { try {
for (var key of dirtyKeySet) { for (var key of dirtyKeySet) {
await sqliteService.executeNonQuery( var value = sharedRepository.getString(key);
'INSERT OR REPLACE INTO configs (`key`, `value`) VALUES (@key, @value)', if (value === null) {
{ await sqliteService.executeNonQuery(
'@key': key, 'DELETE FROM configs WHERE `key` = @key',
'@value': sharedRepository.getString(key) {
} '@key': key,
); }
);
} else {
await sqliteService.executeNonQuery(
'INSERT OR REPLACE INTO configs (`key`, `value`) VALUES (@key, @value)',
{
'@key': key,
'@value': value
}
);
}
} }
dirtyKeySet.clear(); dirtyKeySet.clear();
} finally { } finally {

View File

@@ -1,6 +1,10 @@
// requires binding of SharedVariable // requires binding of SharedVariable
class SharedRepository { class SharedRepository {
remove(key) {
key = transformKey(key);
return SharedVariable.Remove(key);
}
getString(key, defaultValue = null) { getString(key, defaultValue = null) {
key = transformKey(key); key = transformKey(key);
var value = SharedVariable.Get(key); var value = SharedVariable.Get(key);