X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fcontent_menu.cc;h=c5dc1606d790bb577a0a5ba5382b218febc45867;hb=61efbb1cfe73c2a41896e60a8a335457e30674d1;hp=0240a8c3372e2789821fb5db0e23fca8be4e2db5;hpb=332ad44023ff81ae44b15f2587f4d40e4d5ccff5;p=dcpomatic.git diff --git a/src/wx/content_menu.cc b/src/wx/content_menu.cc index 0240a8c33..c5dc1606d 100644 --- a/src/wx/content_menu.cc +++ b/src/wx/content_menu.cc @@ -35,6 +35,7 @@ #include "lib/dcp_examiner.h" #include "lib/ffmpeg_content.h" #include "lib/audio_content.h" +#include "lib/config.h" #include #include #include @@ -125,13 +126,13 @@ ContentMenu::popup (weak_ptr film, ContentList c, TimelineContentViewList _kdm->Enable (dcp->encrypted ()); _ov->Enable (dcp->needs_assets ()); try { - DCPExaminer ex (dcp); + DCPExaminer ex (dcp, true); list > cpls = ex.cpls (); _choose_cpl->Enable (cpls.size() > 1); /* We can't have 0 as a menu item ID on OS X */ int id = 1; BOOST_FOREACH (shared_ptr i, cpls) { - wxMenuItem* item = _cpl_menu->AppendCheckItem ( + wxMenuItem* item = _cpl_menu->AppendRadioItem ( id++, wxString::Format ( "%s (%s)", @@ -141,8 +142,12 @@ ContentMenu::popup (weak_ptr film, ContentList c, TimelineContentViewList ); item->Check (dcp->cpl() && dcp->cpl() == i->id()); } - } catch (dcp::DCPReadError) { + } catch (dcp::DCPReadError &) { /* The DCP is probably missing */ + } catch (dcp::KDMDecryptionError &) { + /* We have an incorrect KDM */ + } catch (KDMError &) { + /* We have an incorrect KDM */ } } else { _kdm->Enable (false); @@ -204,7 +209,7 @@ ContentMenu::join () } try { - shared_ptr joined (new FFmpegContent (film, fc)); + shared_ptr joined (new FFmpegContent(fc)); film->remove_content (_content); film->examine_and_add_content (joined); } catch (JoinError& e) { @@ -278,8 +283,6 @@ ContentMenu::find_missing () return; } - shared_ptr content; - /* XXX: a bit nasty */ shared_ptr ic = dynamic_pointer_cast (_content.front ()); shared_ptr dc = dynamic_pointer_cast (_content.front ()); @@ -299,27 +302,35 @@ ContentMenu::find_missing () d->Destroy (); } + list > content; + if (r == wxID_OK) { - content = content_factory (film, path); + if (dc) { + content.push_back (shared_ptr(new DCPContent(path))); + } else { + content = content_factory (path); + } } - if (!content) { + if (content.empty ()) { return; } - shared_ptr j (new ExamineContentJob (film, content)); + BOOST_FOREACH (shared_ptr i, content) { + shared_ptr j (new ExamineContentJob (film, i)); - j->Finished.connect ( - bind ( - &ContentMenu::maybe_found_missing, - this, - boost::weak_ptr (j), - boost::weak_ptr (_content.front ()), - boost::weak_ptr (content) - ) - ); + j->Finished.connect ( + bind ( + &ContentMenu::maybe_found_missing, + this, + boost::weak_ptr (j), + boost::weak_ptr (_content.front ()), + boost::weak_ptr (i) + ) + ); - JobManager::instance()->add (j); + JobManager::instance()->add (j); + } } void @@ -353,7 +364,7 @@ ContentMenu::maybe_found_missing (weak_ptr j, weak_ptr oc, weak_pt return; } - old_content->set_path (new_content->path (0)); + old_content->set_paths (new_content->paths()); } void @@ -369,7 +380,7 @@ ContentMenu::kdm () try { dcp->add_kdm (dcp::EncryptedKDM (dcp::file_to_string (wx_to_std (d->GetPath ()), MAX_KDM_SIZE))); } catch (exception& e) { - error_dialog (_parent, wxString::Format (_("Could not load KDM (%s)"), e.what ())); + error_dialog (_parent, _("Could not load KDM"), std_to_wx(e.what())); d->Destroy (); return; } @@ -404,7 +415,9 @@ ContentMenu::ov () void ContentMenu::properties () { - ContentPropertiesDialog* d = new ContentPropertiesDialog (_parent, _content.front ()); + shared_ptr film = _film.lock (); + DCPOMATIC_ASSERT (film); + ContentPropertiesDialog* d = new ContentPropertiesDialog (_parent, film, _content.front()); d->ShowModal (); d->Destroy (); } @@ -420,7 +433,7 @@ ContentMenu::cpl_selected (wxCommandEvent& ev) shared_ptr dcp = dynamic_pointer_cast (_content.front ()); DCPOMATIC_ASSERT (dcp); - DCPExaminer ex (dcp); + DCPExaminer ex (dcp, true); list > cpls = ex.cpls (); DCPOMATIC_ASSERT (ev.GetId() > 0); DCPOMATIC_ASSERT (ev.GetId() <= int (cpls.size()));