forked from mia/Aegisub
Change how local config mode works
Rather than loading both the local and user config files and saving to the local directory if an option is set, simply try to load the local config file, and if it exists switch to local mode and never even touch the user file. Originally committed to SVN as r6244.
This commit is contained in:
parent
ae62cb75b4
commit
d2d28401bd
5 changed files with 15 additions and 42 deletions
|
@ -187,9 +187,4 @@ void Options::Flush() {
|
||||||
json::Writer::Write(obj_out, io::Save(config_file).Get());
|
json::Writer::Write(obj_out, io::Save(config_file).Get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Options::SetConfigPath(std::string const& new_path) {
|
|
||||||
config_file = new_path;
|
|
||||||
Flush();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace agi
|
} // namespace agi
|
||||||
|
|
|
@ -106,10 +106,6 @@ public:
|
||||||
|
|
||||||
/// Write the user configuration to disk, throws an exception if something goes wrong.
|
/// Write the user configuration to disk, throws an exception if something goes wrong.
|
||||||
void Flush();
|
void Flush();
|
||||||
|
|
||||||
/// Change where the configuration file should be saved to
|
|
||||||
/// @param new_path New location of the configuration file
|
|
||||||
void SetConfigPath(std::string const& new_path);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace agi
|
} // namespace agi
|
||||||
|
|
|
@ -9,7 +9,6 @@
|
||||||
},
|
},
|
||||||
"Call Tips" : false,
|
"Call Tips" : false,
|
||||||
"First Start" : true,
|
"First Start" : true,
|
||||||
"Local Config" : false,
|
|
||||||
"Locale" : -1,
|
"Locale" : -1,
|
||||||
"Maximized" : false,
|
"Maximized" : false,
|
||||||
"Save Charset" : "UTF-8",
|
"Save Charset" : "UTF-8",
|
||||||
|
|
|
@ -79,9 +79,9 @@
|
||||||
#include <libaegisub/scoped_ptr.h>
|
#include <libaegisub/scoped_ptr.h>
|
||||||
|
|
||||||
namespace config {
|
namespace config {
|
||||||
agi::Options *opt;
|
agi::Options *opt = 0;
|
||||||
agi::MRUManager *mru;
|
agi::MRUManager *mru = 0;
|
||||||
agi::Path *path;
|
agi::Path *path = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -167,30 +167,29 @@ bool AegisubApp::OnInit() {
|
||||||
|
|
||||||
// Set config file
|
// Set config file
|
||||||
StartupLog("Load configuration");
|
StartupLog("Load configuration");
|
||||||
try {
|
|
||||||
config::opt = new agi::Options(STD_STR(StandardPaths::DecodePath("?user/config.json")), GET_DEFAULT_CONFIG(default_config));
|
|
||||||
} catch (agi::Exception& e) {
|
|
||||||
LOG_E("config/init") << "Caught exception: " << e.GetName() << " -> " << e.GetMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
// Try loading configuration from the install dir if one exists there
|
// Try loading configuration from the install dir if one exists there
|
||||||
try {
|
try {
|
||||||
std::string conf_local(STD_STR(StandardPaths::DecodePath("?data/config.json")));
|
std::string conf_local(STD_STR(StandardPaths::DecodePath("?data/config.json")));
|
||||||
agi::scoped_ptr<std::istream> localConfig(agi::io::Open(conf_local));
|
agi::scoped_ptr<std::istream> localConfig(agi::io::Open(conf_local));
|
||||||
config::opt->ConfigNext(*localConfig);
|
config::opt = new agi::Options(conf_local, GET_DEFAULT_CONFIG(default_config));
|
||||||
|
|
||||||
if (OPT_GET("App/Local Config")->GetBool()) {
|
|
||||||
// Local config, make ?user mean ?data so all user settings are placed in install dir
|
// Local config, make ?user mean ?data so all user settings are placed in install dir
|
||||||
StandardPaths::SetPathValue("?user", StandardPaths::DecodePath("?data"));
|
StandardPaths::SetPathValue("?user", StandardPaths::DecodePath("?data"));
|
||||||
StandardPaths::SetPathValue("?local", StandardPaths::DecodePath("?data"));
|
StandardPaths::SetPathValue("?local", StandardPaths::DecodePath("?data"));
|
||||||
config::opt->SetConfigPath(conf_local);
|
|
||||||
}
|
|
||||||
} catch (agi::acs::AcsError const&) {
|
} catch (agi::acs::AcsError const&) {
|
||||||
// File doesn't exist or we can't read it
|
// File doesn't exist or we can't read it
|
||||||
// Might be worth displaying an error in the second case
|
// Might be worth displaying an error in the second case
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (!config::opt)
|
||||||
|
config::opt = new agi::Options(STD_STR(StandardPaths::DecodePath("?user/config.json")), GET_DEFAULT_CONFIG(default_config));
|
||||||
|
} catch (agi::Exception& e) {
|
||||||
|
LOG_E("config/init") << "Caught exception: " << e.GetName() << " -> " << e.GetMessage();
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
config::opt->ConfigUser();
|
config::opt->ConfigUser();
|
||||||
}
|
}
|
||||||
|
|
|
@ -261,19 +261,3 @@ TEST_F(lagi_option, empty_array_decays_to_first_used_type) {
|
||||||
EXPECT_THROW(opt.Get("arr")->GetListInt(), agi::OptionValueErrorInvalidListType);
|
EXPECT_THROW(opt.Get("arr")->GetListInt(), agi::OptionValueErrorInvalidListType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(lagi_option, change_out_path) {
|
|
||||||
util::remove("data/options/tmp");
|
|
||||||
util::remove("data/options/tmp2");
|
|
||||||
|
|
||||||
agi::Options opt("data/options/tmp", default_opt, agi::Options::FLUSH_SKIP);
|
|
||||||
ASSERT_NO_THROW(opt.SetConfigPath("data/options/tmp2"));
|
|
||||||
|
|
||||||
std::ifstream flushed_opts("data/options/tmp2");
|
|
||||||
ASSERT_TRUE(flushed_opts.good());
|
|
||||||
|
|
||||||
flushed_opts.seekg(0, std::ios::end);
|
|
||||||
EXPECT_GT(flushed_opts.tellg(), 0);
|
|
||||||
|
|
||||||
EXPECT_FALSE(std::ifstream("data/options/tmp").good());
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue