summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-11-14 18:27:25 +0000
committerCarl Hetherington <cth@carlh.net>2015-11-14 18:27:54 +0000
commitf4e6a36244b0838d4f28d44e09d983686d1bd597 (patch)
treee4f98678c0d7ad1a1c1bb966263072ecb89a56b2 /src
parentb25fb46d830ec091fefd473a1bfe52b527a43eee (diff)
Fix various misbehaviours with update checking (#749).
Diffstat (limited to 'src')
-rw-r--r--src/lib/update_checker.cc3
-rw-r--r--src/lib/update_checker.h8
-rw-r--r--src/tools/dcpomatic.cc52
3 files changed, 35 insertions, 28 deletions
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 <libcxml/cxml.h>
@@ -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<std::string> 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<void (void)> 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<wxTimer> _timer;
string _film_to_load;