Various Doxygen fixes.
[dcpomatic.git] / src / lib / util.cc
index 38451e9314e9bbd67da2afeb9a226115727ead83..574d1d8894a94b9a6735e81b2246b9632dc8f2b8 100644 (file)
@@ -462,7 +462,7 @@ digest_head_tail (vector<boost::filesystem::path> files, boost::uintmax_t size)
 
 /** Round a number up to the nearest multiple of another number.
  *  @param c Index.
- *  @param s Array of numbers to round, indexed by c.
+ *  @param stride Array of numbers to round, indexed by c.
  *  @param t Multiple to round to.
  *  @return Rounded number.
  */
@@ -533,8 +533,8 @@ short_audio_channel_name (int c)
                _("BsR"),
                _("DBP"),
                _("DBS"),
-               _(""),
-               _("")
+               "",
+               ""
        };
 
        return channels[c];
@@ -557,6 +557,18 @@ valid_image_file (boost::filesystem::path f)
                );
 }
 
+bool
+valid_sound_file (boost::filesystem::path f)
+{
+       if (boost::starts_with (f.leaf().string(), "._")) {
+               return false;
+       }
+
+       string ext = f.extension().string();
+       transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
+       return (ext == ".wav" || ext == ".mp3" || ext == ".aif" || ext == ".aiff");
+}
+
 bool
 valid_j2k_file (boost::filesystem::path f)
 {
@@ -646,7 +658,7 @@ video_asset_filename (shared_ptr<dcp::PictureAsset> asset, int reel_index, int r
        values['r'] = raw_convert<string> (reel_index + 1);
        values['n'] = raw_convert<string> (reel_count);
        if (summary) {
-               values['c'] = summary.get();
+               values['c'] = careful_string_filter (summary.get());
        }
        return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf");
 }
@@ -659,7 +671,7 @@ audio_asset_filename (shared_ptr<dcp::SoundAsset> asset, int reel_index, int ree
        values['r'] = raw_convert<string> (reel_index + 1);
        values['n'] = raw_convert<string> (reel_count);
        if (summary) {
-               values['c'] = summary.get();
+               values['c'] = careful_string_filter (summary.get());
        }
        return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf");
 }
@@ -675,3 +687,22 @@ relaxed_string_to_float (string s)
                return lexical_cast<float> (s);
        }
 }
+
+string
+careful_string_filter (string s)
+{
+       /* Filter out `bad' characters which `may' cause problems with some systems (either for DCP name or filename).
+          There's no apparent list of what really is allowed, so this is a guess.
+          Safety first and all that.
+       */
+
+       string out;
+       string const allowed = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_%.";
+       for (size_t i = 0; i < s.size(); ++i) {
+               if (allowed.find (s[i]) != string::npos) {
+                       out += s[i];
+               }
+       }
+
+       return out;
+}