#include "wx/about_dialog.h"
#include "wx/dcpomatic_button.h"
#include "wx/editable_list.h"
+#include "wx/file_dialog.h"
#include "wx/file_picker_ctrl.h"
#include "wx/full_config_dialog.h"
#include "wx/job_view_dialog.h"
#include "lib/cinema.h"
#include "lib/collator.h"
#include "lib/compose.hpp"
+#include "lib/constants.h"
#include "lib/config.h"
#include "lib/cross.h"
#include "lib/dcpomatic_log.h"
#include "lib/file_log.h"
#include "lib/job_manager.h"
#include "lib/kdm_with_metadata.h"
+#include "lib/scope_guard.h"
#include "lib/screen.h"
#include "lib/send_kdm_email_job.h"
-#include "lib/util.h"
#include <dcp/encrypted_kdm.h>
#include <dcp/decrypted_kdm.h>
#include <dcp/exceptions.h>
overall_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_HIDE_ROOT | wxTR_HAS_BUTTONS | wxTR_LINES_AT_ROOT
);
dkdm_sizer->Add(_dkdm, 1, wxEXPAND | wxBOTTOM, DCPOMATIC_SIZER_Y_GAP);
- wxBoxSizer* dkdm_buttons = new wxBoxSizer(wxVERTICAL);
+ auto dkdm_buttons = new wxBoxSizer(wxVERTICAL);
_add_dkdm = new Button (overall_panel, _("Add..."));
dkdm_buttons->Add (_add_dkdm, 0, wxALL | wxEXPAND, DCPOMATIC_BUTTON_STACK_GAP);
_add_dkdm_folder = new Button (overall_panel, _("Add folder..."));
continue;
}
- dcp::LocalTime begin(_timing->from(), i->cinema->utc_offset_hour(), i->cinema->utc_offset_minute());
- dcp::LocalTime end(_timing->until(), i->cinema->utc_offset_hour(), i->cinema->utc_offset_minute());
+ dcp::LocalTime begin(_timing->from(), dcp::UTCOffset(i->cinema->utc_offset_hour(), i->cinema->utc_offset_minute()));
+ dcp::LocalTime end(_timing->until(), dcp::UTCOffset(i->cinema->utc_offset_hour(), i->cinema->utc_offset_minute()));
/* Make an empty KDM */
dcp::DecryptedKDM kdm (
void add_dkdm_clicked ()
{
- auto d = new wxFileDialog(
- this,
- _("Select DKDM file"),
- wxEmptyString,
- wxEmptyString,
- wxT("XML files|*.xml|All files|*.*"),
- wxFD_MULTIPLE
- );
+ auto dialog = new FileDialog(this, _("Select DKDM file"), wxT("XML files|*.xml|All files|*.*"), wxFD_MULTIPLE, "AddDKDMPath");
- if (d->ShowModal() == wxID_OK) {
- auto chain = Config::instance()->decryption_chain();
- DCPOMATIC_ASSERT (chain->key());
-
- wxArrayString paths;
- d->GetPaths(paths);
- for (unsigned int i = 0; i < paths.GetCount(); ++i) {
- try {
- dcp::EncryptedKDM ekdm(dcp::file_to_string(wx_to_std(paths[i]), MAX_KDM_SIZE));
- /* Decrypt the DKDM to make sure that we can */
- dcp::DecryptedKDM dkdm(ekdm, chain->key().get());
-
- auto new_dkdm = make_shared<DKDM>(ekdm);
- auto group = dynamic_pointer_cast<DKDMGroup> (selected_dkdm());
- if (!group) {
- group = Config::instance()->dkdms ();
- }
- add_dkdm(new_dkdm, group);
- } catch (dcp::KDMFormatError& e) {
- error_dialog (
- this,
- _("Could not read file as a KDM. Perhaps it is badly formatted, or not a KDM at all."),
- std_to_wx(e.what())
- );
- return;
- } catch (dcp::KDMDecryptionError &) {
- error_dialog (
- this,
- _("Could not decrypt the DKDM. Perhaps it was not created with the correct certificate.")
- );
- } catch (dcp::MiscError& e) {
- error_dialog (
- this,
- _("Could not read file as a KDM. It is much too large. Make sure you are loading a DKDM (XML) file."),
- std_to_wx(e.what())
- );
+ ScopeGuard sg = [dialog]() { dialog->Destroy(); };
+
+ if (!dialog->show()) {
+ return;
+ }
+
+ auto chain = Config::instance()->decryption_chain();
+ DCPOMATIC_ASSERT (chain->key());
+
+ for (auto path: dialog->paths()) {
+ try {
+ dcp::EncryptedKDM ekdm(dcp::file_to_string(path, MAX_KDM_SIZE));
+ /* Decrypt the DKDM to make sure that we can */
+ dcp::DecryptedKDM dkdm(ekdm, chain->key().get());
+
+ auto new_dkdm = make_shared<DKDM>(ekdm);
+ auto group = dynamic_pointer_cast<DKDMGroup> (selected_dkdm());
+ if (!group) {
+ group = Config::instance()->dkdms ();
}
+ add_dkdm(new_dkdm, group);
+ } catch (dcp::KDMFormatError& e) {
+ error_dialog (
+ this,
+ _("Could not read file as a KDM. Perhaps it is badly formatted, or not a KDM at all."),
+ std_to_wx(e.what())
+ );
+ return;
+ } catch (dcp::KDMDecryptionError &) {
+ error_dialog (
+ this,
+ _("Could not decrypt the DKDM. Perhaps it was not created with the correct certificate.")
+ );
+ } catch (dcp::MiscError& e) {
+ error_dialog (
+ this,
+ _("Could not read file as a KDM. It is much too large. Make sure you are loading a DKDM (XML) file."),
+ std_to_wx(e.what())
+ );
}
- update_dkdm_view();
}
- d->Destroy ();
+ update_dkdm_view();
}
void add_dkdm_folder_clicked ()