+2016-03-08 Carl Hetherington <cth@carlh.net>
+
+ * Store time zone with cinemas and use them to
+ mark KDM start and end times correctly (#788).
+
2016-03-08 Carl Hetherington <cth@carlh.net>
* Version 2.7.0 released.
/*
- Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "ffmpeg_content.h"
#include "dcp_content.h"
#include "screen_kdm.h"
+#include "cinema.h"
#include <libcxml/cxml.h>
#include <dcp/cpl.h>
#include <dcp/certificate_chain.h>
return fit_ratio_within (container()->ratio(), full_frame ());
}
+/** @param from KDM from time expressed as a local time with an offset from UTC
+ * @param to KDM to time expressed as a local time with an offset from UTC
+ */
dcp::EncryptedKDM
Film::make_kdm (
dcp::Certificate recipient,
).encrypt (signer, recipient, trusted_devices, formulation);
}
+/** @param from KDM from time expressed as a local time in the time zone of the Screen's Cinema.
+ * @param to KDM to time expressed as a local time in the time zone of the Screen's Cinema.
+ */
list<ScreenKDM>
Film::make_kdms (
list<shared_ptr<Screen> > screens,
boost::filesystem::path dcp,
- dcp::LocalTime from,
- dcp::LocalTime until,
+ boost::posix_time::ptime from,
+ boost::posix_time::ptime until,
dcp::Formulation formulation
) const
{
BOOST_FOREACH (shared_ptr<Screen> i, screens) {
if (i->recipient) {
- kdms.push_back (ScreenKDM (i, make_kdm (i->recipient.get(), i->trusted_devices, dcp, from, until, formulation)));
+ dcp::EncryptedKDM const kdm = make_kdm (
+ i->recipient.get(),
+ i->trusted_devices,
+ dcp,
+ dcp::LocalTime (from, i->cinema->utc_offset(), 0),
+ dcp::LocalTime (until, i->cinema->utc_offset(), 0),
+ formulation
+ );
+
+ kdms.push_back (ScreenKDM (i, kdm));
}
}
/*
- Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
std::list<ScreenKDM> make_kdms (
std::list<boost::shared_ptr<Screen> >,
boost::filesystem::path cpl_file,
- dcp::LocalTime from,
- dcp::LocalTime until,
+ boost::posix_time::ptime from,
+ boost::posix_time::ptime until,
dcp::Formulation formulation
) const;
#include "lib/cinema_kdms.h"
#include "lib/send_kdm_email_job.h"
#include "lib/compose.hpp"
+#include "lib/cinema.h"
#include <dcp/encrypted_kdm.h>
#include <dcp/decrypted_kdm.h>
#include <dcp/exceptions.h>
/* Make an empty KDM */
dcp::DecryptedKDM kdm (
- _timing->from(), _timing->until(), decrypted.annotation_text(), decrypted.content_title_text(), dcp::LocalTime().as_string()
+ dcp::LocalTime (_timing->from(), i->cinema->utc_offset(), 0),
+ dcp::LocalTime (_timing->until(), i->cinema->utc_offset(), 0),
+ decrypted.annotation_text(),
+ decrypted.content_title_text(),
+ dcp::LocalTime().as_string()
);
/* Add keys from the DKDM */
cerr << "Syntax: " << program_name << " [OPTION] [<FILM>]\n"
" -h, --help show this help\n"
" -o, --output output file or directory\n"
- " -f, --valid-from valid from time (in local time zone) (e.g. \"2013-09-28 01:41:51\") or \"now\"\n"
- " -t, --valid-to valid to time (in local time zone) (e.g. \"2014-09-28 01:41:51\")\n"
+ " -f, --valid-from valid from time (in local time zone of the cinema) (e.g. \"2013-09-28 01:41:51\") or \"now\"\n"
+ " -t, --valid-to valid to time (in local time zone of the cinema) (e.g. \"2014-09-28 01:41:51\")\n"
" -d, --valid-duration valid duration (e.g. \"1 day\", \"4 hours\", \"2 weeks\")\n"
" --formulation modified-transitional-1, dci-any or dci-specific [default modified-transitional-1]\n"
" -z, --zip ZIP each cinema's KDMs into its own file\n"
try {
list<ScreenKDM> screen_kdms = film->make_kdms (
- (*i)->screens(), cpl, dcp::LocalTime (valid_from.get()), dcp::LocalTime (valid_to.get()), formulation
+ (*i)->screens(), cpl, valid_from.get(), valid_to.get(), formulation
);
if (zip) {
KDMDialog (wxWindow *, boost::shared_ptr<const Film>);
std::list<boost::shared_ptr<Screen> > screens () const;
- /** @return KDM from time in local time */
+ /** @return KDM from time in local time; note that ptime has no time zone information */
boost::posix_time::ptime from () const;
- /** @return KDM until time in local time */
+ /** @return KDM until time in local time; note that ptime has no time zone information */
boost::posix_time::ptime until () const;
boost::filesystem::path cpl () const;