From: Carl Hetherington Date: Sun, 6 Jan 2019 19:49:37 +0000 (+0000) Subject: Improve hints dialog in various ways, especially with long projects (#1439). X-Git-Tag: v2.13.95~8 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=d43434e463f5ef76ee448046ffb09ffe4b05ea8d;p=dcpomatic.git Improve hints dialog in various ways, especially with long projects (#1439). --- diff --git a/ChangeLog b/ChangeLog index 1f87ca82e..6b4528edb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2019-01-06 Carl Hetherington + * Improve behaviour of hints dialog with long projects (#1439). + * Fix incorrect video waveform display (#1425). 2019-01-05 Carl Hetherington diff --git a/src/lib/hints.cc b/src/lib/hints.cc index 185626983..d961b1a30 100644 --- a/src/lib/hints.cc +++ b/src/lib/hints.cc @@ -56,6 +56,7 @@ Hints::Hints (weak_ptr film) , _long_ccap (false) , _overlap_ccap (false) , _too_many_ccap_lines (false) + , _stop (false) { } @@ -65,6 +66,10 @@ Hints::stop_thread () { if (_thread) { try { + { + boost::mutex::scoped_lock lm (_mutex); + _stop = true; + } _thread->interrupt (); _thread->join (); } catch (...) { @@ -88,6 +93,7 @@ Hints::start () _long_ccap = false; _overlap_ccap = false; _too_many_ccap_lines = false; + _stop = false; _thread = new boost::thread (bind(&Hints::thread, this)); } @@ -267,8 +273,24 @@ Hints::thread () player->set_ignore_video (); player->set_ignore_audio (); player->Text.connect (bind(&Hints::text, this, _1, _2, _4)); - while (!player->pass ()) { - bind (boost::ref(Pulse)); + + struct timeval last_pulse; + gettimeofday (&last_pulse, 0); + + while (!player->pass()) { + + struct timeval now; + gettimeofday (&now, 0); + if ((seconds(now) - seconds(last_pulse)) > 1) { + { + boost::mutex::scoped_lock lm (_mutex); + if (_stop) { + break; + } + } + emit (bind (boost::ref(Pulse))); + last_pulse = now; + } } emit (bind(boost::ref(Finished))); diff --git a/src/lib/hints.h b/src/lib/hints.h index b8bc806c0..35e361842 100644 --- a/src/lib/hints.h +++ b/src/lib/hints.h @@ -56,4 +56,7 @@ private: bool _overlap_ccap; bool _too_many_ccap_lines; boost::optional _last; + + boost::mutex _mutex; + bool _stop; }; diff --git a/src/wx/hints_dialog.cc b/src/wx/hints_dialog.cc index 099b31327..18e8a6f9e 100644 --- a/src/wx/hints_dialog.cc +++ b/src/wx/hints_dialog.cc @@ -41,6 +41,7 @@ HintsDialog::HintsDialog (wxWindow* parent, boost::weak_ptr film, bool ok) : wxDialog (parent, wxID_ANY, _("Hints")) , _film (film) , _hints (new Hints (film)) + , _finished (false) { wxBoxSizer* sizer = new wxBoxSizer (wxVERTICAL); @@ -109,6 +110,7 @@ HintsDialog::film_change (ChangeType type) Layout (); _gauge->SetValue (0); update (); + _finished = false; _hints->start (); } @@ -123,7 +125,11 @@ HintsDialog::update () { _text->Clear (); if (_current.empty ()) { - _text->WriteText (_("There are no hints: everything looks good!")); + if (_finished) { + _text->WriteText (_("There are no hints: everything looks good!")); + } else { + _text->WriteText (_("There are no hints yet: project check in progress.")); + } } else { _text->BeginStandardBullet (N_("standard/circle"), 1, 50); BOOST_FOREACH (string i, _current) { @@ -156,6 +162,8 @@ HintsDialog::pulse () void HintsDialog::finished () { + _finished = true; + update (); _gauge->Hide (); _gauge_message->Hide (); Layout (); diff --git a/src/wx/hints_dialog.h b/src/wx/hints_dialog.h index 2755c70fd..709587ac9 100644 --- a/src/wx/hints_dialog.h +++ b/src/wx/hints_dialog.h @@ -48,6 +48,7 @@ private: wxRichTextCtrl* _text; boost::shared_ptr _hints; std::list _current; + bool _finished; boost::signals2::scoped_connection _film_change_connection; boost::signals2::scoped_connection _film_content_change_connection;