X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic.cc;h=6d27a4248cda0f2b3cb07fc031c1f24620d11eb7;hb=f6481c5613e8a03fc3a3361afe406e75171bd960;hp=0c82898aa83999adf02cc2bee9ef3de8fececaca;hpb=cf8e0e9e26dbaefab768000ebc1655b34ad11105;p=dcpomatic.git diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 0c82898aa..6d27a4248 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -36,7 +36,6 @@ #include "wx/film_editor.h" #include "wx/job_manager_view.h" #include "wx/config_dialog.h" -#include "wx/job_wrapper.h" #include "wx/wx_util.h" #include "wx/new_film_dialog.h" #include "wx/properties_dialog.h" @@ -62,11 +61,18 @@ #include #include #include +#include + +#ifdef check +#undef check +#endif using std::cout; +using std::wcout; using std::string; using std::vector; using std::wstring; +using std::wstringstream; using std::map; using std::make_pair; using std::list; @@ -395,8 +401,18 @@ private: return; } } - - JobWrapper::make_dcp (this, _film); + + try { + /* It seems to make sense to auto-save metadata here, since the make DCP may last + a long time, and crashes/power failures are moderately likely. + */ + _film->write_metadata (); + _film->make_dcp (); + } catch (BadSettingError& e) { + error_dialog (this, wxString::Format (_("Bad setting for %s (%s)"), std_to_wx(e.setting()).data(), std_to_wx(e.what()).data())); + } catch (std::exception& e) { + error_dialog (this, wxString::Format (_("Could not make DCP: %s"), std_to_wx(e.what()).data())); + } } void jobs_make_kdms () @@ -453,12 +469,13 @@ private: void jobs_show_dcp () { -#ifdef __WXMSW__ - string d = _film->directory().string (); - wstring w; - w.assign (d.begin(), d.end()); - ShellExecute (0, L"open", w.c_str(), 0, 0, SW_SHOWDEFAULT); -#else +#ifdef DCPOMATIC_WINDOWS + wstringstream args; + args << "/select," << _film->dir (_film->dcp_name(false)); + ShellExecute (0, L"open", L"explorer.exe", args.str().c_str(), 0, SW_SHOWDEFAULT); +#endif + +#ifdef DCPOMATIC_LINUX int r = system ("which nautilus"); if (WEXITSTATUS (r) == 0) { r = system (string ("nautilus " + _film->directory().string()).c_str ()); @@ -475,6 +492,13 @@ private: } } #endif + +#ifdef DCPOMATIC_OSX + int r = system (string ("open -R " + _film->dir (_film->dcp_name (false)).string ()).c_str ()); + if (WEXITSTATUS (r)) { + error_dialog (this, _("Could not show DCP")); + } +#endif } void tools_hints () @@ -839,8 +863,11 @@ class App : public wxApp { try { throw; + } catch (FileError& e) { + error_dialog (0, wxString::Format (_("An exception occurred: %s in %s.\n\n" + REPORT_PROBLEM), e.what(), e.file().string().c_str ())); } catch (exception& e) { - error_dialog (0, wxString::Format (_("An exception occurred (%s)."), e.what ()) + " " + REPORT_PROBLEM); } catch (...) { + error_dialog (0, wxString::Format (_("An exception occurred: %s.\n\n"), e.what ()) + " " + REPORT_PROBLEM); + } catch (...) { error_dialog (0, _("An unknown exception occurred.") + " " + REPORT_PROBLEM); }