From 28745a8eaac66be77ba80834612625291ca4d89c Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sat, 13 Oct 2018 23:26:04 +0100 Subject: [PATCH] Give a more informative error when using bad filename characters on Windows. --- src/lib/film.cc | 1 + src/tools/dcpomatic.cc | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/lib/film.cc b/src/lib/film.cc index bd5724828..17df689d5 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -408,6 +408,7 @@ void Film::write_metadata () const { DCPOMATIC_ASSERT (directory()); + throw DecodeError("can't do that"); boost::filesystem::create_directories (directory().get()); shared_ptr doc = metadata (); doc->write_to_file_formatted (file(metadata_file).string ()); diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index aa6526311..63a5143e8 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -91,6 +91,7 @@ #include #include #include +#include #include #include /* This is OK as it's only used with DCPOMATIC_WINDOWS */ @@ -114,6 +115,8 @@ using boost::shared_ptr; using boost::dynamic_pointer_cast; using boost::optional; using boost::function; +using boost::is_any_of; +using boost::algorithm::find; using dcp::raw_convert; class FilmChangedClosingDialog : public boost::noncopyable @@ -476,7 +479,23 @@ private: try { new_film (d->path(), d->template_name()); } catch (boost::filesystem::filesystem_error& e) { - error_dialog (this, _("Could not create folder to store film"), std_to_wx(e.what())); +#ifdef DCPOMATIC_WINDOWS + string bad_chars = "<>:\"/\\|?*"; + string const filename = d->path().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) { + found_bad_chars += bad_chars[i]; + } + } + error_dialog ( + this, + String::compose(_("Could not create folder to store film. Try removing the %1 characters from your folder name.", found_bad_chars)), + std_to_wx(e.what()) + ); +#else + error_dialog (this, _("Could not create folder to store film."), std_to_wx(e.what())); +#endif } } -- 2.30.2