From 9d843365fb77e00dd31c03d1e8ea49126ab550f2 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 15 Feb 2024 01:05:22 +0100 Subject: [PATCH] Add option to load prefs from ZIP (#2771). --- cscript | 2 +- src/lib/config.cc | 33 +++++++++++++++++++++++++++++++++ src/lib/config.h | 2 ++ src/tools/dcpomatic.cc | 13 +++++++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/cscript b/cscript index 8c6c126db..222a911b5 100644 --- a/cscript +++ b/cscript @@ -507,7 +507,7 @@ def dependencies(target, options): # Use distro-provided FFmpeg on Arch deps = [] - deps.append(('libdcp', 'v1.8.96')) + deps.append(('libdcp', 'v1.8.97')) deps.append(('libsub', 'v1.6.47')) deps.append(('leqm-nrt', '30dcaea1373ac62fba050e02ce5b0c1085797a23')) deps.append(('rtaudio', 'f619b76')) diff --git a/src/lib/config.cc b/src/lib/config.cc index f5ad60714..384db5cde 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -32,6 +32,7 @@ #include "filter.h" #include "log.h" #include "ratio.h" +#include "unzipper.h" #include "zipper.h" #include #include @@ -1632,6 +1633,38 @@ save_all_config_as_zip (boost::filesystem::path zip_file) } +void +Config::load_from_zip(boost::filesystem::path zip_file) +{ + Unzipper unzipper(zip_file); + dcp::write_string_to_file(unzipper.get("config.xml"), config_write_file()); + + try { + dcp::write_string_to_file(unzipper.get("cinemas.xml"), cinemas_file()); + dcp::write_string_to_file(unzipper.get("dkdm_recipient.xml"), dkdm_recipients_file()); + } catch (std::runtime_error&) {} + + read(); + + changed(Property::USE_ANY_SERVERS); + changed(Property::SERVERS); + changed(Property::CINEMAS); + changed(Property::DKDM_RECIPIENTS); + changed(Property::SOUND); + changed(Property::SOUND_OUTPUT); + changed(Property::PLAYER_CONTENT_DIRECTORY); + changed(Property::PLAYER_PLAYLIST_DIRECTORY); + changed(Property::PLAYER_DEBUG_LOG); + changed(Property::HISTORY); + changed(Property::SHOW_EXPERIMENTAL_AUDIO_PROCESSORS); + changed(Property::AUDIO_MAPPING); + changed(Property::AUTO_CROP_THRESHOLD); + changed(Property::ALLOW_SMPTE_BV20); + changed(Property::ISDCF_NAME_PART_LENGTH); + changed(Property::OTHER); +} + + void Config::set_initial_path(string id, boost::filesystem::path path) { diff --git a/src/lib/config.h b/src/lib/config.h index dce4aafef..f3d080b0b 100644 --- a/src/lib/config.h +++ b/src/lib/config.h @@ -79,6 +79,8 @@ public: boost::filesystem::path default_directory_or (boost::filesystem::path a) const; boost::filesystem::path default_kdm_directory_or (boost::filesystem::path a) const; + void load_from_zip(boost::filesystem::path zip_file); + enum Property { USE_ANY_SERVERS, SERVERS, diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 976842bea..459ce341c 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -36,6 +36,7 @@ #include "wx/full_config_dialog.h" #include "wx/hints_dialog.h" #include "wx/html_dialog.h" +#include "wx/file_dialog.h" #include "wx/i18n_hook.h" #include "wx/id.h" #include "wx/job_manager_view.h" @@ -244,6 +245,7 @@ enum { ID_tools_system_information, ID_tools_restore_default_preferences, ID_tools_export_preferences, + ID_tools_import_preferences, ID_help_report_a_problem, /* IDs for shortcuts (with no associated menu item) */ ID_add_file, @@ -355,6 +357,7 @@ public: Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_system_information, this),ID_tools_system_information); Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_restore_default_preferences, this), ID_tools_restore_default_preferences); Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_export_preferences, this), ID_tools_export_preferences); + Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_import_preferences, this), ID_tools_import_preferences); Bind (wxEVT_MENU, boost::bind (&DOMFrame::help_about, this), wxID_ABOUT); Bind (wxEVT_MENU, boost::bind (&DOMFrame::help_report_a_problem, this), ID_help_report_a_problem); @@ -776,6 +779,15 @@ private: } } + void tools_import_preferences() + { + FileDialog dialog(this, _("Specify ZIP file"), wxT("ZIP files (*.zip)|*.zip"), wxFD_OPEN, "Preferences"); + + if (dialog.show()) { + Config::instance()->load_from_zip(dialog.path()); + } + } + void jobs_make_dcp () { double required; @@ -1393,6 +1405,7 @@ private: add_item (tools, _("Restore default preferences"), ID_tools_restore_default_preferences, ALWAYS); tools->AppendSeparator (); add_item (tools, _("Export preferences..."), ID_tools_export_preferences, ALWAYS); + add_item (tools, _("Import preferences..."), ID_tools_import_preferences, ALWAYS); wxMenu* help = new wxMenu; #ifdef __WXOSX__ -- 2.30.2