Fix incorrect extension on interop subtitle files (#2270).
[dcpomatic.git] / src / lib / util.cc
index 7d0d2bf606c698d3a2a4881f2336c4e156456899..79730d3472f7584e6aaccf95b2f46712e07f421d 100644 (file)
@@ -705,44 +705,47 @@ split_get_request (string url)
        return r;
 }
 
+
+static
 string
-video_asset_filename (shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, optional<string> summary)
+asset_filename (shared_ptr<dcp::Asset> asset, string type, int reel_index, int reel_count, optional<string> summary, string extension)
 {
        dcp::NameFormat::Map values;
-       values['t'] = "j2c";
-       values['r'] = raw_convert<string> (reel_index + 1);
-       values['n'] = raw_convert<string> (reel_count);
+       values['t'] = type;
+       values['r'] = raw_convert<string>(reel_index + 1);
+       values['n'] = raw_convert<string>(reel_count);
        if (summary) {
-               values['c'] = careful_string_filter (summary.get());
+               values['c'] = careful_string_filter(summary.get());
        }
-       return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf");
+       return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + extension);
+}
+
+
+string
+video_asset_filename (shared_ptr<dcp::PictureAsset> asset, int reel_index, int reel_count, optional<string> summary)
+{
+       return asset_filename(asset, "j2c", reel_index, reel_count, summary, ".mxf");
 }
 
+
 string
 audio_asset_filename (shared_ptr<dcp::SoundAsset> asset, int reel_index, int reel_count, optional<string> summary)
 {
-       dcp::NameFormat::Map values;
-       values['t'] = "pcm";
-       values['r'] = raw_convert<string> (reel_index + 1);
-       values['n'] = raw_convert<string> (reel_count);
-       if (summary) {
-               values['c'] = careful_string_filter (summary.get());
-       }
-       return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf");
+       return asset_filename(asset, "pcm", reel_index, reel_count, summary, ".mxf");
+}
+
+
+string
+subtitle_asset_filename (shared_ptr<dcp::SubtitleAsset> asset, int reel_index, int reel_count, optional<string> summary, string extension)
+{
+       return asset_filename(asset, "sub", reel_index, reel_count, summary, extension);
 }
 
 
 string
 atmos_asset_filename (shared_ptr<dcp::AtmosAsset> asset, int reel_index, int reel_count, optional<string> summary)
 {
-       dcp::NameFormat::Map values;
-       values['t'] = "atmos";
-       values['r'] = raw_convert<string> (reel_index + 1);
-       values['n'] = raw_convert<string> (reel_count);
-       if (summary) {
-               values['c'] = careful_string_filter (summary.get());
-       }
-       return Config::instance()->dcp_asset_filename_format().get(values, "_" + asset->id() + ".mxf");
+       return asset_filename(asset, "atmos", reel_index, reel_count, summary, ".mxf");
 }
 
 
@@ -791,7 +794,7 @@ careful_string_filter (string s)
        /* Then remove anything that's not in a very limited character set */
        wstring out;
        wstring const allowed = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_%.+";
-       for (size_t i = 0; i < transliterated_more.length(); ++i) {
+       for (int i = 0; i < transliterated_more.length(); ++i) {
                wchar_t c = transliterated_more[i];
                if (allowed.find(c) != string::npos) {
                        out += c;