+ void jobs_make_dcp_batch ()
+ {
+ if (!_film) {
+ return;
+ }
+
+ _film->write_metadata ();
+
+ /* i = 0; try to connect via socket
+ i = 1; try again, and then try to start the batch converter
+ i = 2 onwards; try again.
+ */
+ for (int i = 0; i < 8; ++i) {
+ try {
+ boost::asio::io_service io_service;
+ boost::asio::ip::tcp::resolver resolver (io_service);
+ boost::asio::ip::tcp::resolver::query query ("127.0.0.1", raw_convert<string> (Config::instance()->server_port_base() + 2));
+ boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve (query);
+ Socket socket (5);
+ socket.connect (*endpoint_iterator);
+ string s = _film->directory().string ();
+ socket.write (s.length() + 1);
+ socket.write ((uint8_t *) s.c_str(), s.length() + 1);
+ /* OK\0 */
+ uint8_t ok[3];
+ socket.read (ok, 3);
+ return;
+ } catch (exception& e) {
+
+ }
+
+ if (i == 1) {
+ start_batch_converter (wx_to_std (wxStandardPaths::Get().GetExecutablePath()));
+ }
+
+ dcpomatic_sleep (1);
+ }
+
+ error_dialog (this, _("Could not find batch converter."));
+ }
+
+ void jobs_make_self_dkdm ()
+ {
+ if (!_film) {
+ return;
+ }
+
+ SelfDKDMDialog* d = new SelfDKDMDialog (this, _film);
+ if (d->ShowModal () != wxID_OK) {
+ d->Destroy ();
+ return;
+ }
+
+ optional<dcp::EncryptedKDM> kdm;
+ try {
+ kdm = _film->make_kdm (
+ Config::instance()->decryption_chain()->leaf(),
+ vector<dcp::Certificate> (),
+ d->cpl (),
+ dcp::LocalTime ("2012-01-01T01:00:00+00:00"),
+ dcp::LocalTime ("2112-01-01T01:00:00+00:00"),
+ dcp::MODIFIED_TRANSITIONAL_1
+ );
+ } catch (dcp::NotEncryptedError& e) {
+ error_dialog (this, _("CPL's content is not encrypted."));
+ } catch (exception& e) {
+ error_dialog (this, e.what ());
+ } catch (...) {
+ error_dialog (this, _("An unknown exception occurred."));
+ }
+
+ if (kdm) {
+ if (d->internal ()) {
+ vector<dcp::EncryptedKDM> dkdms = Config::instance()->dkdms ();
+ dkdms.push_back (kdm.get());
+ Config::instance()->set_dkdms (dkdms);
+ } else {
+ boost::filesystem::path path = d->directory() / (_film->dcp_name(false) + "_DKDM.xml");
+ kdm->as_xml (path);
+ }
+ }
+
+ d->Destroy ();
+ }
+