From: Carl Hetherington Date: Sat, 14 Nov 2015 18:27:25 +0000 (+0000) Subject: Fix various misbehaviours with update checking (#749). X-Git-Tag: v2.5.4~17 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=f4e6a36244b0838d4f28d44e09d983686d1bd597 Fix various misbehaviours with update checking (#749). --- diff --git a/ChangeLog b/ChangeLog index a79f7fb14..6c8cab530 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2015-11-14 Carl Hetherington + * Fix various misbehaviours with update checking (#749). + * Updated fr_FR translation from Thierry Journet. 2015-11-13 Carl Hetherington diff --git a/src/lib/update_checker.cc b/src/lib/update_checker.cc index 4c5075e20..31ea9a4fd 100644 --- a/src/lib/update_checker.cc +++ b/src/lib/update_checker.cc @@ -20,7 +20,6 @@ #include "update_checker.h" #include "version.h" #include "safe_stringstream.h" -#include "config.h" #include "util.h" #include "raw_convert.h" #include @@ -154,7 +153,7 @@ UpdateChecker::thread () _stable = stable; } - if (Config::instance()->check_for_test_updates() && version_less_than (dcpomatic_version, test)) { + if (version_less_than (dcpomatic_version, test)) { _test = test; } diff --git a/src/lib/update_checker.h b/src/lib/update_checker.h index b0eb62273..ff1999810 100644 --- a/src/lib/update_checker.h +++ b/src/lib/update_checker.h @@ -57,18 +57,12 @@ public: return _stable; } - /** @return new test version, if there is one and Config is set to look for it */ + /** @return new test version, if there is one */ boost::optional test () { boost::mutex::scoped_lock lm (_data_mutex); return _test; } - /** @return true if the last signal emission was the first */ - bool last_emit_was_first () const { - boost::mutex::scoped_lock lm (_data_mutex); - return _emits == 1; - } - size_t write_callback (void *, size_t, size_t); boost::signals2::signal StateChanged; diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 28198a685..4d74563eb 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -163,6 +163,7 @@ public: , _history_items (0) , _history_position (0) , _history_separator (0) + , _update_news_requested (false) { #if defined(DCPOMATIC_WINDOWS) if (Config::instance()->win32_console ()) { @@ -247,6 +248,8 @@ public: /* 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)); } void new_film (boost::filesystem::path path) @@ -561,6 +564,7 @@ private: void tools_check_for_updates () { UpdateChecker::instance()->run (); + _update_news_requested = true; } void help_about () @@ -770,6 +774,34 @@ private: _history_items = history.size (); } + void update_checker_state_changed () + { + UpdateChecker* uc = UpdateChecker::instance (); + + bool const announce = + _update_news_requested || + (uc->stable() && Config::instance()->check_for_updates()) || + (uc->test() && Config::instance()->check_for_updates() && Config::instance()->check_for_test_updates()); + + _update_news_requested = false; + + if (!announce) { + return; + } + + if (uc->state() == UpdateChecker::YES) { + UpdateDialog* dialog = new UpdateDialog (this, uc->stable (), uc->test ()); + dialog->ShowModal (); + dialog->Destroy (); + } else if (uc->state() == UpdateChecker::FAILED) { + error_dialog (this, _("The DCP-o-matic download server could not be contacted.")); + } else { + error_dialog (this, _("There are no new versions of DCP-o-matic available.")); + } + + _update_news_requested = false; + } + FilmEditor* _film_editor; FilmViewer* _film_viewer; VideoWaveformDialog* _video_waveform_dialog; @@ -782,6 +814,7 @@ private: int _history_position; wxMenuItem* _history_separator; boost::signals2::scoped_connection _config_changed_connection; + bool _update_news_requested; }; static const wxCmdLineEntryDesc command_line_description[] = { @@ -889,7 +922,6 @@ private: _timer.reset (new wxTimer (this)); _timer->Start (1000); - UpdateChecker::instance()->StateChanged.connect (boost::bind (&App::update_checker_state_changed, this)); if (Config::instance()->check_for_updates ()) { UpdateChecker::instance()->run (); } @@ -979,24 +1011,6 @@ private: } } - void update_checker_state_changed () - { - UpdateChecker* uc = UpdateChecker::instance (); - if (uc->state() == UpdateChecker::YES && (uc->stable() || uc->test())) { - UpdateDialog* dialog = new UpdateDialog (_frame, uc->stable (), uc->test ()); - dialog->ShowModal (); - dialog->Destroy (); - } else if (uc->state() == UpdateChecker::FAILED) { - if (!UpdateChecker::instance()->last_emit_was_first ()) { - error_dialog (_frame, _("The DCP-o-matic download server could not be contacted.")); - } - } else { - if (!UpdateChecker::instance()->last_emit_was_first ()) { - error_dialog (_frame, _("There are no new versions of DCP-o-matic available.")); - } - } - } - DOMFrame* _frame; shared_ptr _timer; string _film_to_load;