Add context menu option to re-examine content (#339).
authorCarl Hetherington <cth@carlh.net>
Thu, 11 Sep 2014 23:11:23 +0000 (00:11 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 11 Sep 2014 23:11:23 +0000 (00:11 +0100)
ChangeLog
src/lib/audio_decoder.cc
src/wx/content_menu.cc
src/wx/content_menu.h

index 1829dbb0a26b7eb5089fb17d9881613b921a7096..33cb4900386026f0bdaed7e47e73e3d0890c1a69 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2014-09-12  Carl Hetherington  <cth@carlh.net>
+
+       * Add "re-examine" option to content context menu (#339).
+
 2014-09-11  Carl Hetherington  <cth@carlh.net>
 
        * Restore encoding optimisations for still-image sources.
index bd9dff8c98a695945e12c5957510ff7da84223a6..75619228635a845c2dd0d4680ea483a903e4e8e4 100644 (file)
@@ -173,6 +173,13 @@ AudioDecoder::audio (shared_ptr<const AudioBuffers> data, ContentTime time)
 void
 AudioDecoder::add (shared_ptr<const AudioBuffers> data)
 {
+       if (!_audio_position) {
+               /* This should only happen when there is a seek followed by a flush, but
+                  we need to cope with it.
+               */
+               return;
+       }
+       
        /* Resize _decoded_audio to fit the new data */
        int new_size = 0;
        if (_decoded_audio.audio->frames() == 0) {
index 741fc8283b00ad67a1e33ef4bb2c3f060ba9048e..3e3c462b2e6981267283186ae2ecc0566db72210 100644 (file)
@@ -41,6 +41,7 @@ enum {
        ID_repeat = 1,
        ID_join,
        ID_find_missing,
+       ID_re_examine,
        ID_kdm,
        ID_remove
 };
@@ -52,6 +53,7 @@ ContentMenu::ContentMenu (wxWindow* p)
        _repeat = _menu->Append (ID_repeat, _("Repeat..."));
        _join = _menu->Append (ID_join, _("Join"));
        _find_missing = _menu->Append (ID_find_missing, _("Find missing..."));
+       _re_examine = _menu->Append (ID_re_examine, _("Re-examine..."));
        _kdm = _menu->Append (ID_kdm, _("Add KDM..."));
        _menu->AppendSeparator ();
        _remove = _menu->Append (ID_remove, _("Remove"));
@@ -59,6 +61,7 @@ ContentMenu::ContentMenu (wxWindow* p)
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::repeat, this), ID_repeat);
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::join, this), ID_join);
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::find_missing, this), ID_find_missing);
+       _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::re_examine, this), ID_re_examine);
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::kdm, this), ID_kdm);
        _parent->Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&ContentMenu::remove, this), ID_remove);
 }
@@ -85,6 +88,7 @@ ContentMenu::popup (weak_ptr<Film> f, ContentList c, wxPoint p)
        _join->Enable (n > 1);
        
        _find_missing->Enable (_content.size() == 1 && !_content.front()->paths_valid ());
+       _re_examine->Enable (!_content.empty ());
 
        if (_content.size() == 1) {
                shared_ptr<DCPContent> dcp = dynamic_pointer_cast<DCPContent> (_content.front ());
@@ -218,6 +222,19 @@ ContentMenu::find_missing ()
        JobManager::instance()->add (j);
 }
 
+void
+ContentMenu::re_examine ()
+{
+       shared_ptr<Film> film = _film.lock ();
+       if (!film) {
+               return;
+       }
+
+       for (ContentList::iterator i = _content.begin(); i != _content.end(); ++i) {
+               film->examine_content (*i);
+       }
+}
+
 void
 ContentMenu::maybe_found_missing (weak_ptr<Job> j, weak_ptr<Content> oc, weak_ptr<Content> nc)
 {
index fccd5f38a4b714070f7c2db7f6f4822be446313c..77cf29a3057400d523ff3449a2ce96cb2f8d8679 100644 (file)
@@ -39,6 +39,7 @@ private:
        void repeat ();
        void join ();
        void find_missing ();
+       void re_examine ();
        void kdm ();
        void remove ();
        void maybe_found_missing (boost::weak_ptr<Job>, boost::weak_ptr<Content>, boost::weak_ptr<Content>);
@@ -51,6 +52,7 @@ private:
        wxMenuItem* _repeat;
        wxMenuItem* _join;
        wxMenuItem* _find_missing;
+       wxMenuItem* _re_examine;
        wxMenuItem* _kdm;
        wxMenuItem* _remove;
 };