From 443a7d74ff2a49ad45a4fb44f92abd619bc0a0b0 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 7 Mar 2017 10:18:06 +0000 Subject: [PATCH] Handle failure to write to cinemas file more nicely. --- ChangeLog | 4 ++++ src/lib/config.cc | 8 ++++---- src/lib/config.h | 9 +++++---- src/tools/dcpomatic.cc | 36 ++++++++++++++++++++++++++++++------ src/wx/screens_panel.cc | 8 ++++---- 5 files changed, 47 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8a9d86d2f..f7e10cc3e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2017-03-07 Carl Hetherington + + * Handle failure to write to cinemas file more nicely. + 2017-02-28 Carl Hetherington * Updated de_DE translation from Carsten Kurz. diff --git a/src/lib/config.cc b/src/lib/config.cc index 031c046c9..6a08125cf 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -366,12 +366,12 @@ Config::instance () void Config::write () const { - write_config_xml (); - write_cinemas_xml (); + write_config (); + write_cinemas (); } void -Config::write_config_xml () const +Config::write_config () const { xmlpp::Document doc; xmlpp::Element* root = doc.create_root_node ("Config"); @@ -482,7 +482,7 @@ Config::write_config_xml () const } void -Config::write_cinemas_xml () const +Config::write_cinemas () const { xmlpp::Document doc; xmlpp::Element* root = doc.create_root_node ("Cinemas"); diff --git a/src/lib/config.h b/src/lib/config.h index 8b8d7c38a..1bdbcb96e 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -66,6 +66,7 @@ public: enum Property { USE_ANY_SERVERS, SERVERS, + CINEMAS, OTHER }; @@ -345,12 +346,12 @@ public: void add_cinema (boost::shared_ptr c) { _cinemas.push_back (c); - changed (); + changed (CINEMAS); } void remove_cinema (boost::shared_ptr c) { _cinemas.remove (c); - changed (); + changed (CINEMAS); } void set_allowed_dcp_frame_rates (std::list const & r) { @@ -539,6 +540,8 @@ public: static boost::signals2::signal FailedToLoad; void write () const; + void write_config () const; + void write_cinemas () const; void save_template (boost::shared_ptr film, std::string name) const; bool existing_template (std::string name) const; @@ -558,8 +561,6 @@ private: void read (); void set_defaults (); void set_kdm_email_to_default (); - void write_config_xml () const; - void write_cinemas_xml () const; void read_cinemas (cxml::Document const & f); boost::shared_ptr create_certificate_chain (); boost::filesystem::path directory_or (boost::optional dir, boost::filesystem::path a) const; diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 2b6a62f11..d091512a0 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -214,8 +214,8 @@ public: SetIcon (wxIcon (std_to_wx ("id"))); #endif - _config_changed_connection = Config::instance()->Changed.connect (boost::bind (&DOMFrame::config_changed, this)); - config_changed (); + _config_changed_connection = Config::instance()->Changed.connect (boost::bind (&DOMFrame::config_changed, this, _1)); + config_changed (Config::OTHER); Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_new, this), ID_file_new); Bind (wxEVT_MENU, boost::bind (&DOMFrame::file_open, this), ID_file_open); @@ -277,9 +277,6 @@ public: wxAcceleratorTable accel_table (2, accel); SetAcceleratorTable (accel_table); - /* Instantly save any config changes when using the DCP-o-matic GUI */ - Config::instance()->Changed.connect (boost::bind (&Config::write, Config::instance ())); - UpdateChecker::instance()->StateChanged.connect (boost::bind (&DOMFrame::update_checker_state_changed, this)); } @@ -925,8 +922,35 @@ private: m->Append (help, _("&Help")); } - void config_changed () + void config_changed (Config::Property what) { + /* Instantly save any config changes when using the DCP-o-matic GUI */ + if (what == Config::CINEMAS) { + try { + Config::instance()->write_cinemas(); + } catch (exception& e) { + error_dialog ( + this, + wxString::Format ( + _("Could not write to cinemas file at %s. Your changes have not been saved."), + std_to_wx (Config::instance()->cinemas_file().string()).data() + ) + ); + } + } else { + try { + Config::instance()->write_config(); + } catch (exception& e) { + error_dialog ( + this, + wxString::Format ( + _("Could not write to config file at %s. Your changes have not been saved."), + std_to_wx (Config::instance()->cinemas_file().string()).data() + ) + ); + } + } + for (int i = 0; i < _history_items; ++i) { delete _file_menu->Remove (ID_file_history + i); } diff --git a/src/wx/screens_panel.cc b/src/wx/screens_panel.cc index 3abe1f970..908e94f4d 100644 --- a/src/wx/screens_panel.cc +++ b/src/wx/screens_panel.cc @@ -177,7 +177,7 @@ ScreensPanel::edit_cinema_clicked () c.second->set_utc_offset_hour (d->utc_offset_hour ()); c.second->set_utc_offset_minute (d->utc_offset_minute ()); _targets->SetItemText (c.first, std_to_wx (d->name())); - Config::instance()->changed (); + Config::instance()->changed (Config::CINEMAS); } d->Destroy (); @@ -229,7 +229,7 @@ ScreensPanel::add_screen_clicked () _targets->Expand (id.get ()); } - Config::instance()->changed (); + Config::instance()->changed (Config::CINEMAS); d->Destroy (); } @@ -268,7 +268,7 @@ ScreensPanel::edit_screen_clicked () s.second->recipient = d->recipient (); s.second->trusted_devices = d->trusted_devices (); _targets->SetItemText (s.first, std_to_wx (d->name())); - Config::instance()->changed (); + Config::instance()->changed (Config::CINEMAS); d->Destroy (); } @@ -295,7 +295,7 @@ ScreensPanel::remove_screen_clicked () _targets->Delete (i->first); } - Config::instance()->changed (); + Config::instance()->changed (Config::CINEMAS); } list > -- 2.30.2