summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2021-03-20 08:38:25 +0100
committerCarl Hetherington <cth@carlh.net>2021-03-22 09:56:55 +0100
commitd461d2685050842cb86875f5a5aa62505779b9ed (patch)
tree04dc973c71ad70c8a9ada6b216079b666aa360d4 /src/lib
parentaed5d7b60b78ed6485f617dde4db9edca853d525 (diff)
Add simpler language tag dialog (#1931).
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/config.cc24
-rw-r--r--src/lib/config.h8
2 files changed, 32 insertions, 0 deletions
diff --git a/src/lib/config.cc b/src/lib/config.cc
index 23b06f2e4..0dcc84117 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -176,6 +176,7 @@ Config::set_defaults ()
_player_kdm_directory = boost::none;
_audio_mapping = boost::none;
_minimum_frame_size = 65536;
+ _custom_languages.clear ();
_allowed_dcp_frame_rates.clear ();
_allowed_dcp_frame_rates.push_back (24);
@@ -552,6 +553,15 @@ try
_minimum_frame_size = f.optional_number_child<int>("MinimumFrameSize").get_value_or(65536);
+ for (auto i: f.node_children("CustomLanguage")) {
+ try {
+ /* This will fail if it's called before dcp::init() as it won't recognise the
+ * tag. That's OK because the Config will be reloaded again later.
+ */
+ _custom_languages.push_back (dcp::LanguageTag(i->content()));
+ } catch (std::runtime_error& e) {}
+ }
+
if (boost::filesystem::exists (_cinemas_file)) {
cxml::Document f ("Cinemas");
f.read_file (_cinemas_file);
@@ -981,6 +991,9 @@ Config::write_config () const
_audio_mapping->as_xml (root->add_child("AudioMapping"));
}
root->add_child("MinimumFrameSize")->add_child_text(raw_convert<string>(_minimum_frame_size));
+ for (auto const& i: _custom_languages) {
+ root->add_child("CustomLanguage")->add_child_text(i.to_string());
+ }
try {
auto const s = doc.write_to_string_formatted ();
@@ -1420,3 +1433,14 @@ Config::set_audio_mapping_to_default ()
_audio_mapping = audio_mapping (ch);
changed (AUDIO_MAPPING);
}
+
+
+void
+Config::add_custom_language (dcp::LanguageTag tag)
+{
+ if (find(_custom_languages.begin(), _custom_languages.end(), tag) == _custom_languages.end()) {
+ _custom_languages.push_back (tag);
+ changed ();
+ }
+}
+
diff --git a/src/lib/config.h b/src/lib/config.h
index 0e8fccb53..3371e48bf 100644
--- a/src/lib/config.h
+++ b/src/lib/config.h
@@ -33,6 +33,7 @@
#include <dcp/name_format.h>
#include <dcp/certificate_chain.h>
#include <dcp/encrypted_kdm.h>
+#include <dcp/language_tag.h>
#include <boost/signals2.hpp>
#include <boost/filesystem.hpp>
#include <vector>
@@ -540,6 +541,10 @@ public:
return _minimum_frame_size;
}
+ std::vector<dcp::LanguageTag> custom_languages () const {
+ return _custom_languages;
+ }
+
/* SET (mostly) */
void set_master_encoding_threads (int n) {
@@ -1055,6 +1060,8 @@ public:
maybe_set (_minimum_frame_size, size);
}
+ void add_custom_language (dcp::LanguageTag tag);
+
void changed (Property p = OTHER);
boost::signals2::signal<void (Property)> Changed;
/** Emitted if read() failed on an existing Config file. There is nothing
@@ -1269,6 +1276,7 @@ private:
boost::optional<boost::filesystem::path> _player_kdm_directory;
boost::optional<AudioMapping> _audio_mapping;
int _minimum_frame_size;
+ std::vector<dcp::LanguageTag> _custom_languages;
static int const _current_version;