summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-11-19 15:04:28 +0100
committerCarl Hetherington <cth@carlh.net>2020-11-20 23:47:03 +0100
commit60adc5a3312a9412b8988a0e2e82724779b5b84e (patch)
treeb95575a4f1dcdd03fab05f2d80ba4499a9319c7a /src
parent84a0d8a228f36f95ac265bac163c8e3f02dc1fd0 (diff)
Recover subtitle language metadata from the places is was written
in older films.
Diffstat (limited to 'src')
-rw-r--r--src/lib/film.cc33
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;
}