Write the config and MRU files to ?data in portable mode rather than ?user
Originally committed to SVN as r6187.
This commit is contained in:
parent
d01d7eb78b
commit
84d1315736
4 changed files with 33 additions and 10 deletions
|
@ -184,8 +184,12 @@ void Options::Flush() {
|
|||
}
|
||||
}
|
||||
|
||||
io::Save file(config_file);
|
||||
json::Writer::Write(obj_out, 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
|
||||
|
|
|
@ -68,7 +68,7 @@ private:
|
|||
::json::Object CreateObject(std::string path);
|
||||
|
||||
/// User config (file that will be written to disk)
|
||||
const std::string config_file;
|
||||
std::string config_file;
|
||||
|
||||
/// Settings.
|
||||
const OptionSetting setting;
|
||||
|
@ -106,6 +106,10 @@ public:
|
|||
|
||||
/// Write the user configuration to disk, throws an exception if something goes wrong.
|
||||
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
|
||||
|
|
|
@ -81,8 +81,7 @@
|
|||
#include <libaegisub/access.h>
|
||||
#include <libaegisub/log.h>
|
||||
#include <libaegisub/hotkey.h>
|
||||
|
||||
|
||||
#include <libaegisub/scoped_ptr.h>
|
||||
|
||||
namespace config {
|
||||
agi::Options *opt;
|
||||
|
@ -186,9 +185,6 @@ bool AegisubApp::OnInit() {
|
|||
// Init icons.
|
||||
icon::icon_init();
|
||||
|
||||
const std::string conf_mru(StandardPaths::DecodePath("?user/mru.json"));
|
||||
config::mru = new agi::MRUManager(conf_mru, GET_DEFAULT_CONFIG(default_mru));
|
||||
|
||||
// Set config file
|
||||
StartupLog("Load configuration");
|
||||
try {
|
||||
|
@ -202,13 +198,13 @@ bool AegisubApp::OnInit() {
|
|||
// Try loading configuration from the install dir if one exists there
|
||||
try {
|
||||
const std::string conf_local(StandardPaths::DecodePath("?data/config.json"));
|
||||
std::ifstream* localConfig = agi::io::Open(conf_local);
|
||||
agi::scoped_ptr<std::istream> localConfig(agi::io::Open(conf_local));
|
||||
config::opt->ConfigNext(*localConfig);
|
||||
delete localConfig;
|
||||
|
||||
if (OPT_GET("App/Local Config")->GetBool()) {
|
||||
// Local config, make ?user mean ?data so all user settings are placed in install dir
|
||||
StandardPaths::SetPathValue("?user", StandardPaths::DecodePath("?data"));
|
||||
config::opt->SetConfigPath(conf_local);
|
||||
}
|
||||
} catch (agi::acs::AcsError const&) {
|
||||
// File doesn't exist or we can't read it
|
||||
|
@ -222,6 +218,9 @@ bool AegisubApp::OnInit() {
|
|||
wxMessageBox("Configuration file is invalid. Error reported:\n" + lagi_wxString(err.GetMessage()), "Error");
|
||||
}
|
||||
|
||||
StartupLog("Load MRU");
|
||||
const std::string conf_mru(StandardPaths::DecodePath("?user/mru.json"));
|
||||
config::mru = new agi::MRUManager(conf_mru, GET_DEFAULT_CONFIG(default_mru));
|
||||
|
||||
#ifdef __VISUALC__
|
||||
SetThreadName((DWORD) -1,"AegiMain");
|
||||
|
|
|
@ -261,3 +261,19 @@ TEST_F(lagi_option, empty_array_decays_to_first_used_type) {
|
|||
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