From 12f460f2d5b702bf0b2798b2e5ddcda72feeaf6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=85=E6=88=8E=E6=B0=8F?= Date: Sat, 9 Mar 2024 23:10:45 +0800 Subject: [PATCH] feat(config): Config::Save saves data if modified --- src/rime/config/config_component.cc | 4 ++++ src/rime/config/config_component.h | 2 ++ src/rime/config/config_data.cc | 8 ++++++-- src/rime/config/config_data.h | 2 ++ 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/rime/config/config_component.cc b/src/rime/config/config_component.cc index 924bddf632..60c1107844 100644 --- a/src/rime/config/config_component.cc +++ b/src/rime/config/config_component.cc @@ -23,6 +23,10 @@ Config::~Config() {} Config::Config(an data) : ConfigItemRef(data.get()), data_(data) {} +bool Config::Save() { + return data_->Save(); +} + bool Config::LoadFromStream(std::istream& stream) { return data_->LoadFromStream(stream); } diff --git a/src/rime/config/config_component.h b/src/rime/config/config_component.h index 3dda808fc1..08e9ba14be 100644 --- a/src/rime/config/config_component.h +++ b/src/rime/config/config_component.h @@ -28,6 +28,8 @@ class Config : public Class, public ConfigItemRef { // in the ConfigComponent explicit Config(an data); + // returns whether actually saved to file. + bool Save(); bool LoadFromStream(std::istream& stream); bool SaveToStream(std::ostream& stream); RIME_API bool LoadFromFile(const path& file_path); diff --git a/src/rime/config/config_data.cc b/src/rime/config/config_data.cc index 5859f0de5b..06309c4ed6 100644 --- a/src/rime/config/config_data.cc +++ b/src/rime/config/config_data.cc @@ -22,8 +22,12 @@ an ConvertFromYaml(const YAML::Node& yaml_node, void EmitYaml(an node, YAML::Emitter* emitter, int depth); ConfigData::~ConfigData() { - if (auto_save_ && modified_ && !file_path_.empty()) - SaveToFile(file_path_); + if (auto_save_) + Save(); +} + +bool ConfigData::Save() { + return modified_ && !file_path_.empty() && SaveToFile(file_path_); } bool ConfigData::LoadFromStream(std::istream& stream) { diff --git a/src/rime/config/config_data.h b/src/rime/config/config_data.h index fb1519be72..daec1b2229 100644 --- a/src/rime/config/config_data.h +++ b/src/rime/config/config_data.h @@ -19,6 +19,8 @@ class ConfigData { ConfigData() = default; ~ConfigData(); + // returns whether actually saved to file. + bool Save(); bool LoadFromStream(std::istream& stream); bool SaveToStream(std::ostream& stream); bool LoadFromFile(const path& file_path, ConfigCompiler* compiler);