swaroop: fix crash when there's an incorrect ecinema KDM.
[dcpomatic.git] / src / wx / swaroop_controls.cc
index 34241078b0dfc1c54af93c38a59f63a8a70b2676..5ce6c45fc7a637f6e6c1e99124d596f7698cb422 100644 (file)
@@ -104,9 +104,6 @@ SwaroopControls::SwaroopControls (wxWindow* parent, shared_ptr<FilmViewer> viewe
 
        _v_sizer->Add (e_sizer, 1, wxEXPAND);
 
-       _log = new wxTextCtrl (this, wxID_ANY, wxT(""), wxDefaultPosition, wxSize(-1, 200), wxTE_READONLY | wxTE_MULTILINE);
-       _v_sizer->Add (_log, 0, wxALL | wxEXPAND, DCPOMATIC_SIZER_GAP);
-
        _play_button->Bind     (wxEVT_BUTTON, boost::bind(&SwaroopControls::play_clicked,  this));
        _pause_button->Bind    (wxEVT_BUTTON, boost::bind(&SwaroopControls::pause_clicked, this));
        _stop_button->Bind     (wxEVT_BUTTON, boost::bind(&SwaroopControls::stop_clicked,  this));
@@ -204,6 +201,7 @@ SwaroopControls::deselect_playlist ()
                _selected_playlist = boost::none;
                _spl_view->SetItemState (selected, 0, wxLIST_STATE_SELECTED);
        }
+       ResetFilm (shared_ptr<Film>(new Film(optional<boost::filesystem::path>())));
 }
 
 void
@@ -295,6 +293,11 @@ SwaroopControls::next_clicked ()
 void
 SwaroopControls::log (wxString s)
 {
+       optional<boost::filesystem::path> log = Config::instance()->player_activity_log_file();
+       if (!log) {
+               return;
+       }
+
        struct timeval time;
        gettimeofday (&time, 0);
        char buffer[64];
@@ -302,14 +305,10 @@ SwaroopControls::log (wxString s)
        struct tm* t = localtime (&sec);
        strftime (buffer, 64, "%c", t);
        wxString ts = std_to_wx(string(buffer)) + N_(": ");
-       _log->SetValue(_log->GetValue() + ts + s + "\n");
-
-       optional<boost::filesystem::path> log = Config::instance()->player_activity_log_file();
-       if (!log) {
+       FILE* f = fopen_boost (*log, "a");
+       if (!f) {
                return;
        }
-
-       FILE* f = fopen_boost (*log, "a");
        fprintf (f, "%s%s\n", wx_to_std(ts).c_str(), wx_to_std(s).c_str());
        fclose (f);
 }
@@ -490,7 +489,7 @@ SwaroopControls::select_playlist (int selected, int position)
                        }
                        if (dcp->needs_kdm()) {
                                /* We didn't get a KDM for this */
-                               error_dialog (this, "This playlist cannot be loaded as a KDM is missing.");
+                               error_dialog (this, "This playlist cannot be loaded as a KDM is missing or incorrect.");
                                deselect_playlist ();
                                return;
                        }
@@ -503,10 +502,12 @@ SwaroopControls::select_playlist (int selected, int position)
                                        ffmpeg->add_kdm (*kdm);
                                        ffmpeg->examine (_film, shared_ptr<Job>());
                                } catch (KDMError& e) {
-                                       error_dialog (this, "Could not load KDM.");
+                                       error_dialog (this, "This playlist cannot be loaded as a KDM is missing or incorrect.");
+                                       deselect_playlist ();
+                                       return;
                                }
                        } else {
-                               error_dialog (this, "This playlist cannot be loaded as a KDM is missing.");
+                               error_dialog (this, "This playlist cannot be loaded as a KDM is missing or incorrect.");
                                deselect_playlist ();
                                return;
                        }