diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-11-19 15:04:28 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-11-20 23:47:03 +0100 |
| commit | 60adc5a3312a9412b8988a0e2e82724779b5b84e (patch) | |
| tree | b95575a4f1dcdd03fab05f2d80ba4499a9319c7a /src | |
| parent | 84a0d8a228f36f95ac265bac163c8e3f02dc1fd0 (diff) | |
Recover subtitle language metadata from the places is was written
in older films.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/film.cc | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc index 9943711f5..5d298baae 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -686,6 +686,39 @@ Film::read_metadata (optional<boost::filesystem::path> path) set_backtrace_file (file ("backtrace.txt")); } + /* Around 2.15.108 we removed subtitle language state from the text content and the ISDCF + * metadata and put it into the Film instead. If we've loaded an old Film let's try and fish + * out the settings from where they were so that they don't get lost. + */ + + optional<dcp::LanguageTag> found_language; + + BOOST_FOREACH (cxml::ConstNodePtr i, f.node_child("Playlist")->node_children("Content")) { + cxml::ConstNodePtr text = i->optional_node_child("Text"); + if (text && text->optional_string_child("Language") && !found_language) { + try { + found_language = dcp::LanguageTag(text->string_child("Language")); + } catch (...) {} + } + } + + optional<string> isdcf_language = f.node_child("ISDCFMetadata")->optional_string_child("SubtitleLanguage"); + if (isdcf_language && !found_language) { + try { + found_language = dcp::LanguageTag(*isdcf_language); + } catch (...) { + try { + found_language = dcp::LanguageTag(boost::algorithm::to_lower_copy(*isdcf_language)); + } catch (...) { + + } + } + } + + if (found_language) { + _subtitle_languages.push_back (*found_language); + } + _dirty = false; return notes; } |
