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( await sqliteService.execute(
(key, value) => sharedRepository.setString(key, value), (key, value) => sharedRepository.setString(key, value),
'SELECT `key`, `value` FROM configs' '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,14 +44,24 @@ async function syncLoop() {
await sqliteService.executeNonQuery('BEGIN'); await sqliteService.executeNonQuery('BEGIN');
try { try {
for (var key of dirtyKeySet) { for (var key of dirtyKeySet) {
var value = sharedRepository.getString(key);
if (value === null) {
await sqliteService.executeNonQuery(
'DELETE FROM configs WHERE `key` = @key',
{
'@key': key,
}
);
} else {
await sqliteService.executeNonQuery( await sqliteService.executeNonQuery(
'INSERT OR REPLACE INTO configs (`key`, `value`) VALUES (@key, @value)', 'INSERT OR REPLACE INTO configs (`key`, `value`) VALUES (@key, @value)',
{ {
'@key': key, '@key': key,
'@value': sharedRepository.getString(key) '@value': value
} }
); );
} }
}
dirtyKeySet.clear(); dirtyKeySet.clear();
} finally { } finally {
await sqliteService.executeNonQuery('COMMIT'); await sqliteService.executeNonQuery('COMMIT');

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);