Add option to export config as a .zip (#1776).
authorCarl Hetherington <cth@carlh.net>
Sun, 23 Jan 2022 19:47:27 +0000 (20:47 +0100)
committerCarl Hetherington <cth@carlh.net>
Wed, 9 Mar 2022 16:04:02 +0000 (17:04 +0100)
src/lib/config.cc
src/lib/config.h
src/tools/dcpomatic.cc

index bab15ecb705768025d00e58c3e2bf7ebd4982761..9b369a81f22442c98d7baa0cfcf27e63d9fc55cb 100644 (file)
 #include "compose.hpp"
 #include "crypto.h"
 #include "dkdm_recipient.h"
-#include <dcp/raw_convert.h>
-#include <dcp/name_format.h>
+#include "zipper.h"
 #include <dcp/certificate_chain.h>
+#include <dcp/name_format.h>
+#include <dcp/raw_convert.h>
 #include <libcxml/cxml.h>
 #include <glib.h>
 #include <libxml++/libxml++.h>
@@ -1478,3 +1479,21 @@ Config::check_certificates () const
        return bad;
 }
 
+
+void
+save_all_config_as_zip (boost::filesystem::path zip_file)
+{
+       Zipper zipper (zip_file);
+
+       auto config = Config::instance();
+       zipper.add ("config.xml", dcp::file_to_string(config->config_read_file()));
+       if (boost::filesystem::exists(config->cinemas_file())) {
+               zipper.add ("cinemas.xml", dcp::file_to_string(config->cinemas_file()));
+       }
+       if (boost::filesystem::exists(config->dkdm_recipients_file())) {
+               zipper.add ("dkdm_recipients.xml", dcp::file_to_string(config->dkdm_recipients_file()));
+       }
+
+       zipper.close ();
+}
+
index e01eab780e8c9ce4dfabd2aee89caa7675d1845e..39704fde14eba7b7cbdf039b5ae03d37b36a7b54 100644 (file)
@@ -44,6 +44,10 @@ class Film;
 class DKDMGroup;
 class DKDMRecipient;
 
+
+extern void save_all_config_as_zip (boost::filesystem::path zip_file);
+
+
 /** @class Config
  *  @brief A singleton class holding configuration.
  */
index 0226eb7af1ac32e69217959bde0e491d27dd4ff5..78543919f1d08cd910ed3494826eb17f9c2e2534 100644 (file)
@@ -256,6 +256,7 @@ enum {
        ID_tools_send_translations,
        ID_tools_system_information,
        ID_tools_restore_default_preferences,
+       ID_tools_export_preferences,
        ID_help_report_a_problem,
        /* IDs for shortcuts (with no associated menu item) */
        ID_add_file,
@@ -338,6 +339,7 @@ public:
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_send_translations, this), ID_tools_send_translations);
                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::help_about, this),              wxID_ABOUT);
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::help_report_a_problem, this),   ID_help_report_a_problem);
 
@@ -747,6 +749,21 @@ private:
                }
        }
 
+       void tools_export_preferences ()
+       {
+               auto dialog = new wxFileDialog (
+                       this, _("Specify ZIP file"), wxEmptyString, wxT("dcpomatic_config.zip"), wxT("ZIP files (*.zip)|*.zip"),
+                       wxFD_SAVE | wxFD_OVERWRITE_PROMPT
+                       );
+
+               int const r = dialog->ShowModal ();
+               dialog->Destroy ();
+
+               if (r == wxID_OK) {
+                       save_all_config_as_zip (wx_to_std(dialog->GetPath()));
+               }
+       }
+
        void jobs_make_dcp ()
        {
                double required;
@@ -1375,6 +1392,8 @@ private:
                add_item (tools, _("System information..."), ID_tools_system_information, 0);
                tools->AppendSeparator ();
                add_item (tools, _("Restore default preferences"), ID_tools_restore_default_preferences, ALWAYS);
+               tools->AppendSeparator ();
+               add_item (tools, _("Export preferences..."), ID_tools_export_preferences, ALWAYS);
 
                wxMenu* help = new wxMenu;
 #ifdef __WXOSX__