Prevent infinite loop of audio analysis if it is cancelled.
[dcpomatic.git] / src / wx / audio_dialog.cc
index d885e2d4d08148635a0e4aaf3b37825e32f7e0ce..26655631e8b3ccded05a17c700282c4033d214f1 100644 (file)
@@ -100,16 +100,14 @@ AudioDialog::set_content (shared_ptr<AudioContent> c)
 void
 AudioDialog::try_to_load_analysis ()
 {
-       shared_ptr<AudioAnalysis> a;
-
-       if (boost::filesystem::exists (_content->audio_analysis_path())) {
-               a.reset (new AudioAnalysis (_content->audio_analysis_path ()));
-       } else {
-               if (IsShown ()) {
-                       _content->analyse_audio (bind (&AudioDialog::try_to_load_analysis, this));
-               }
+       if (!boost::filesystem::exists (_content->audio_analysis_path()) && IsShown ()) {
+               _content->analyse_audio (bind (&AudioDialog::analysis_finished, this));
+               return;
        }
-               
+       
+       shared_ptr<AudioAnalysis> a;
+       
+       a.reset (new AudioAnalysis (_content->audio_analysis_path ()));
        _plot->set_analysis (a);
 
        if (_channel_checkbox[0]) {
@@ -123,6 +121,20 @@ AudioDialog::try_to_load_analysis ()
        }
 }
 
+void
+AudioDialog::analysis_finished ()
+{
+       if (!boost::filesystem::exists (_content->audio_analysis_path())) {
+               /* We analysed and still nothing showed up, so maybe it was cancelled or it failed.
+                  Give up.
+               */
+               _plot->set_message (_("Could not analyse audio."));
+               return;
+       }
+
+       try_to_load_analysis ();
+}
+
 void
 AudioDialog::channel_clicked (wxCommandEvent& ev)
 {