From 0ce32998858c0941640d64a6e2a369635ce81770 Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Wed, 1 May 2019 12:04:09 +0200 Subject: [PATCH] Save settings immediatelly on sqlite and macos. --- src/common/repository/KeyValueRepository.hxx | 2 ++ .../KeyValueRepositoryConfigfile.hxx | 6 ++++-- .../repository/KeyValueRepositoryNoop.hxx | 6 ++++-- .../sqlite/KeyValueRepositorySqlite.cxx | 18 ++++++++++++++++++ .../sqlite/KeyValueRepositorySqlite.hxx | 6 ++++-- src/emucore/Settings.cxx | 4 +++- src/macos/SettingsRepositoryMACOS.hxx | 6 ++++-- src/macos/SettingsRepositoryMACOS.mm | 11 +++++++++++ 8 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/common/repository/KeyValueRepository.hxx b/src/common/repository/KeyValueRepository.hxx index c8c8540e5..cfd80166f 100644 --- a/src/common/repository/KeyValueRepository.hxx +++ b/src/common/repository/KeyValueRepository.hxx @@ -32,6 +32,8 @@ class KeyValueRepository virtual std::map load() = 0; virtual void save(const std::map& values) = 0; + + virtual void save(const string& key, const Variant& value) = 0; }; #endif // KEY_VALUE_REPOSITORY_HXX diff --git a/src/common/repository/KeyValueRepositoryConfigfile.hxx b/src/common/repository/KeyValueRepositoryConfigfile.hxx index e6b07b299..ddf9e3546 100644 --- a/src/common/repository/KeyValueRepositoryConfigfile.hxx +++ b/src/common/repository/KeyValueRepositoryConfigfile.hxx @@ -26,9 +26,11 @@ class KeyValueRepositoryConfigfile : public KeyValueRepository KeyValueRepositoryConfigfile(const string& filename); - virtual std::map load(); + std::map load() override; - virtual void save(const std::map& values); + void save(const std::map& values) override; + + void save(const string& key, const Variant& value) override {} private: diff --git a/src/common/repository/KeyValueRepositoryNoop.hxx b/src/common/repository/KeyValueRepositoryNoop.hxx index b4d2dc137..38dae6489 100644 --- a/src/common/repository/KeyValueRepositoryNoop.hxx +++ b/src/common/repository/KeyValueRepositoryNoop.hxx @@ -24,11 +24,13 @@ class KeyValueRepositoryNoop : public KeyValueRepository { public: - virtual std::map load() { + virtual std::map load() override { return std::map(); } - virtual void save(const std::map& values) {} + void save(const std::map& values) override {} + + void save(const string& key, const Variant& value) override {} }; #endif // KEY_VALUE_REPOSITORY_NOOP_HXX diff --git a/src/common/repository/sqlite/KeyValueRepositorySqlite.cxx b/src/common/repository/sqlite/KeyValueRepositorySqlite.cxx index 2fee16125..a713898ce 100644 --- a/src/common/repository/sqlite/KeyValueRepositorySqlite.cxx +++ b/src/common/repository/sqlite/KeyValueRepositorySqlite.cxx @@ -70,6 +70,24 @@ void KeyValueRepositorySqlite::save(const std::map& values) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void KeyValueRepositorySqlite::save(const string& key, const Variant& value) +{ + try { + myStmtInsert->reset(); + + (*myStmtInsert) + .bind(1, key.c_str()) + .bind(2, value.toCString()) + .step(); + + myStmtInsert->reset(); + } + catch (SqliteError err) { + cout << err.message << endl; + } +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void KeyValueRepositorySqlite::initialize() { diff --git a/src/common/repository/sqlite/KeyValueRepositorySqlite.hxx b/src/common/repository/sqlite/KeyValueRepositorySqlite.hxx index 7fbfb2c0d..e7dfc1ad6 100644 --- a/src/common/repository/sqlite/KeyValueRepositorySqlite.hxx +++ b/src/common/repository/sqlite/KeyValueRepositorySqlite.hxx @@ -29,9 +29,11 @@ class KeyValueRepositorySqlite : public KeyValueRepository KeyValueRepositorySqlite(SqliteDatabase& db, const string& tableName); - virtual std::map load(); + std::map load() override; - virtual void save(const std::map& values); + void save(const std::map& values) override; + + void save(const string& key, const Variant& value) override; void initialize(); diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index 8b6851fb8..32e21b53a 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -593,8 +593,10 @@ const Variant& Settings::value(const string& key) const void Settings::setValue(const string& key, const Variant& value) { auto it = myPermanentSettings.find(key); - if(it != myPermanentSettings.end()) + if(it != myPermanentSettings.end()) { it->second = value; + myRespository->save(key, value); + } else myTemporarySettings[key] = value; } diff --git a/src/macos/SettingsRepositoryMACOS.hxx b/src/macos/SettingsRepositoryMACOS.hxx index ff26b6c87..84c285d73 100644 --- a/src/macos/SettingsRepositoryMACOS.hxx +++ b/src/macos/SettingsRepositoryMACOS.hxx @@ -23,9 +23,11 @@ class SettingsRepositoryMACOS : public KeyValueRepository { public: - virtual std::map load(); + std::map load() override; - virtual void save(const std::map& values); + void save(const std::map& values) override; + + void save(const string& key, const Variant& value) override; }; #endif // SETTINGS_REPOSITORY_MACOS_HXX diff --git a/src/macos/SettingsRepositoryMACOS.mm b/src/macos/SettingsRepositoryMACOS.mm index 4cff1aeea..024d04e18 100644 --- a/src/macos/SettingsRepositoryMACOS.mm +++ b/src/macos/SettingsRepositoryMACOS.mm @@ -51,3 +51,14 @@ void SettingsRepositoryMACOS::save(const std::map& values) ]; } } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void SettingsRepositoryMACOS::save(const string& key, const Variant& value) +{ + @autoreleasepool { + [[NSUserDefaults standardUserDefaults] + setObject:[NSString stringWithUTF8String:value.toCString()] + forKey:[NSString stringWithUTF8String:key.c_str()] + ]; + } +}