Build fixes for Boost >= 1.73
[dcpomatic.git] / src / tools / dcpomatic.cc
index 3ba9ceb9dfc5b6bf497b4473228eec2c0c61ac81..d0d8320083517fabe80a9b1344e1f5d1128066e5 100644 (file)
@@ -125,6 +125,9 @@ using boost::optional;
 using boost::function;
 using boost::is_any_of;
 using boost::algorithm::find;
+#if BOOST_VERSION >= 106100
+using namespace boost::placeholders;
+#endif
 using dcp::raw_convert;
 
 class FilmChangedClosingDialog : public boost::noncopyable
@@ -439,10 +442,21 @@ public:
 
                JobManager::instance()->add(shared_ptr<Job>(new CheckContentChangeJob(film)));
        }
-       catch (std::exception& e) {
-               wxString p = std_to_wx (file.string ());
-               wxCharBuffer b = p.ToUTF8 ();
-               error_dialog (this, wxString::Format (_("Could not open film at %s"), p.data()), std_to_wx (e.what()));
+       catch (FileNotFoundError& e) {
+               boost::filesystem::path const dir = e.file().parent_path();
+               if (boost::filesystem::exists(dir / "ASSETMAP") || boost::filesystem::exists(dir / "ASSETMAP.xml")) {
+                       error_dialog (
+                               this, _("Could not open this folder as a DCP-o-matic project."),
+                               _("It looks like you are trying to open a DCP.  File -> Open is for loading DCP-o-matic projects, not DCPs.  To import a DCP, create a new project with File -> New and then click the \"Add DCP...\" button.")
+                               );
+               } else {
+                       wxString const p = std_to_wx(file.string ());
+                       error_dialog (this, wxString::Format(_("Could not open film at %s"), p.data()), std_to_wx(e.what()));
+               }
+
+       } catch (std::exception& e) {
+               wxString const p = std_to_wx (file.string());
+               error_dialog (this, wxString::Format(_("Could not open film at %s"), p.data()), std_to_wx(e.what()));
        }
 
        void set_film (shared_ptr<Film> film)
@@ -505,7 +519,7 @@ private:
                        } catch (boost::filesystem::filesystem_error& e) {
 #ifdef DCPOMATIC_WINDOWS
                                string bad_chars = "<>:\"/|?*";
-                               string const filename = d->path().string();
+                               string const filename = d->path().filename().string();
                                string found_bad_chars;
                                for (size_t i = 0; i < bad_chars.length(); ++i) {
                                        if (filename.find(bad_chars[i]) != string::npos && found_bad_chars.find(bad_chars[i]) == string::npos) {
@@ -513,9 +527,11 @@ private:
                                        }
                                }
                                wxString message = _("Could not create folder to store film.");
+                               message += "  ";
                                if (!found_bad_chars.empty()) {
-                                       message += "  ";
                                        message += wxString::Format (_("Try removing the %s characters from your folder name."), std_to_wx(found_bad_chars).data());
+                               } else {
+                                       message += _("Please check that you do not have Windows controlled folder access enabled for DCP-o-matic.");
                                }
                                error_dialog (this, message, std_to_wx(e.what()));
 #else
@@ -1442,6 +1458,8 @@ static const wxCmdLineEntryDesc command_line_description[] = {
        { wxCMD_LINE_SWITCH, "n", "new", "create new film", wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL },
        { wxCMD_LINE_OPTION, "c", "content", "add content file / directory", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
        { wxCMD_LINE_OPTION, "d", "dcp", "add content DCP", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
+       { wxCMD_LINE_SWITCH, "v", "version", "show DCP-o-matic version", wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL },
+       { wxCMD_LINE_OPTION, "", "config", "directory containing config.xml and cinemas.xml", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
        { wxCMD_LINE_PARAM, 0, 0, "film to load or create", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
        { wxCMD_LINE_NONE, "", "", "", wxCmdLineParamType (0), 0 }
 };
@@ -1575,6 +1593,11 @@ private:
 
        bool OnCmdLineParsed (wxCmdLineParser& parser)
        {
+               if (parser.Found (wxT("version"))) {
+                       cout << "dcpomatic version " << dcpomatic_version << " " << dcpomatic_git_commit << "\n";
+                       exit (EXIT_SUCCESS);
+               }
+
                if (parser.GetParamCount() > 0) {
                        if (parser.Found (wxT ("new"))) {
                                _film_to_create = wx_to_std (parser.GetParam (0));
@@ -1593,6 +1616,11 @@ private:
                        _dcp_to_add = wx_to_std (dcp);
                }
 
+               wxString config;
+               if (parser.Found (wxT("config"), &config)) {
+                       State::override_path = wx_to_std (config);
+               }
+
                return true;
        }