Use boost::optional for Config::_default_directory.
authorCarl Hetherington <cth@carlh.net>
Fri, 16 Dec 2016 12:02:51 +0000 (12:02 +0000)
committerCarl Hetherington <cth@carlh.net>
Fri, 16 Dec 2016 12:02:51 +0000 (12:02 +0000)
src/lib/config.cc
src/lib/config.h

index 9222d8498ad0e5267338ced40d92505af15b079c..30ed1243b6890e70e010e4263ca1878c252761db 100644 (file)
@@ -160,7 +160,11 @@ try
        optional<int> version = f.optional_number_child<int> ("Version");
 
        _num_local_encoding_threads = f.number_child<int> ("NumLocalEncodingThreads");
-       _default_directory = f.string_child ("DefaultDirectory");
+       _default_directory = f.optional_string_child ("DefaultDirectory");
+       if (_default_directory && _default_directory->empty ()) {
+               /* We used to store an empty value for this to mean "none set" */
+               _default_directory = boost::optional<boost::filesystem::path> ();
+       }
 
        boost::optional<int> b = f.optional_number_child<int> ("ServerPort");
        if (!b) {
@@ -374,7 +378,9 @@ Config::write_config_xml () const
 
        root->add_child("Version")->add_child_text ("2");
        root->add_child("NumLocalEncodingThreads")->add_child_text (raw_convert<string> (_num_local_encoding_threads));
-       root->add_child("DefaultDirectory")->add_child_text (_default_directory.string ());
+       if (_default_directory) {
+               root->add_child("DefaultDirectory")->add_child_text (_default_directory->string ());
+       }
        root->add_child("ServerPortBase")->add_child_text (raw_convert<string> (_server_port_base));
        root->add_child("UseAnyServers")->add_child_text (_use_any_servers ? "1" : "0");
 
@@ -495,17 +501,17 @@ Config::write_cinemas_xml () const
 boost::filesystem::path
 Config::default_directory_or (boost::filesystem::path a) const
 {
-       if (_default_directory.empty()) {
+       if (!_default_directory) {
                return a;
        }
 
        boost::system::error_code ec;
-       bool const e = boost::filesystem::exists (_default_directory, ec);
+       bool const e = boost::filesystem::exists (*_default_directory, ec);
        if (ec || !e) {
                return a;
        }
 
-       return _default_directory;
+       return *_default_directory;
 }
 
 void
index a38fb129cdc5f3bca38e3c83af7fefb18ab85c8a..c5084670715d4a42f8c7b015b858a50801d1c77f 100644 (file)
@@ -52,7 +52,7 @@ public:
                return _num_local_encoding_threads;
        }
 
-       boost::filesystem::path default_directory () const {
+       boost::optional<boost::filesystem::path> default_directory () const {
                return _default_directory;
        }
 
@@ -290,7 +290,11 @@ public:
        }
 
        void set_default_directory (boost::filesystem::path d) {
-               maybe_set (_default_directory, d);
+               if (_default_directory && *_default_directory == d) {
+                       return;
+               }
+               _default_directory = d;
+               changed ();
        }
 
        /** @param p New server port */
@@ -558,7 +562,7 @@ private:
        /** number of threads to use for J2K encoding on the local machine */
        int _num_local_encoding_threads;
        /** default directory to put new films in */
-       boost::filesystem::path _default_directory;
+       boost::optional<boost::filesystem::path> _default_directory;
        /** base port number to use for J2K encoding servers;
         *  this port and the two above it will be used.
         */