diff options
| author | Carl Hetherington <cth@carlh.net> | 2018-01-05 20:03:43 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2018-01-05 20:03:43 +0000 |
| commit | ad59559fdd19f89852eebd94299691e6091ff02f (patch) | |
| tree | fcdbebfdfd0b25f2a071d0104450748f4ac56f64 /src | |
| parent | 66469adf1bd6e5c288542dda601a66b22d955794 (diff) | |
Backup more than one config on failure to load.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/config.cc | 29 | ||||
| -rw-r--r-- | src/lib/config.h | 2 |
2 files changed, 22 insertions, 9 deletions
diff --git a/src/lib/config.cc b/src/lib/config.cc index 2a8a3cc89..983fb69d8 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -31,6 +31,7 @@ #include "cross.h" #include "film.h" #include "dkdm_wrapper.h" +#include "compose.hpp" #include <dcp/raw_convert.h> #include <dcp/name_format.h> #include <dcp/certificate_chain.h> @@ -65,6 +66,7 @@ using dcp::raw_convert; Config* Config::_instance = 0; boost::signals2::signal<void ()> Config::FailedToLoad; boost::signals2::signal<void (string)> Config::Warning; +boost::optional<boost::filesystem::path> Config::test_path; /** Construct default configuration */ Config::Config () @@ -390,8 +392,13 @@ catch (...) { /* Make a copy of the configuration */ try { - boost::filesystem::copy_file (path ("config.xml", false), path ("config.xml.backup", false)); - boost::filesystem::copy_file (path ("cinemas.xml", false), path ("cinemas.xml.backup", false)); + int n = 1; + while (n < 100 && boost::filesystem::exists(path(String::compose("config.xml.%1", n)))) { + ++n; + } + + boost::filesystem::copy_file(path("config.xml", false), path(String::compose("config.xml.%1", n), false)); + boost::filesystem::copy_file(path("cinemas.xml", false), path(String::compose("cinemas.xml.%1", n), false)); } catch (...) {} /* We have a config file but it didn't load */ @@ -410,16 +417,20 @@ boost::filesystem::path Config::path (string file, bool create_directories) { boost::filesystem::path p; + if (test_path) { + p = test_path.get(); + } else { #ifdef DCPOMATIC_OSX - p /= g_get_home_dir (); - p /= "Library"; - p /= "Preferences"; - p /= "com.dcpomatic"; - p /= "2"; + p /= g_get_home_dir (); + p /= "Library"; + p /= "Preferences"; + p /= "com.dcpomatic"; + p /= "2"; #else - p /= g_get_user_config_dir (); - p /= "dcpomatic2"; + p /= g_get_user_config_dir (); + p /= "dcpomatic2"; #endif + } boost::system::error_code ec; if (create_directories) { boost::filesystem::create_directories (p, ec); diff --git a/src/lib/config.h b/src/lib/config.h index a57fbd587..61d9c64e6 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -675,6 +675,8 @@ public: static bool have_existing (std::string); static boost::filesystem::path config_file (); + static boost::optional<boost::filesystem::path> test_path; + private: Config (); static boost::filesystem::path path (std::string file, bool create_directories = true); |
