summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-03-07 10:18:06 +0000
committerCarl Hetherington <cth@carlh.net>2017-03-07 10:18:06 +0000
commit443a7d74ff2a49ad45a4fb44f92abd619bc0a0b0 (patch)
tree5cdba2339a97f9882a4f82038c914ae15de52dc0 /src
parent5a7b85d0456941a03fc1682e49fdffac2d44f817 (diff)
Handle failure to write to cinemas file more nicely.
Diffstat (limited to 'src')
-rw-r--r--src/lib/config.cc8
-rw-r--r--src/lib/config.h9
-rw-r--r--src/tools/dcpomatic.cc36
-rw-r--r--src/wx/screens_panel.cc8
4 files changed, 43 insertions, 18 deletions
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<Cinema> c) {
_cinemas.push_back (c);
- changed ();
+ changed (CINEMAS);
}
void remove_cinema (boost::shared_ptr<Cinema> c) {
_cinemas.remove (c);
- changed ();
+ changed (CINEMAS);
}
void set_allowed_dcp_frame_rates (std::list<int> const & r) {
@@ -539,6 +540,8 @@ public:
static boost::signals2::signal<void ()> FailedToLoad;
void write () const;
+ void write_config () const;
+ void write_cinemas () const;
void save_template (boost::shared_ptr<const Film> 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<dcp::CertificateChain> create_certificate_chain ();
boost::filesystem::path directory_or (boost::optional<boost::filesystem::path> 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<shared_ptr<Screen> >