+ }
+
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+ optional<dcp::EncryptedKDM> get_kdm_from_url (shared_ptr<DCPContent> dcp)
+ {
+ ScopedTemporary temp;
+ string url = Config::instance()->kdm_server_url();
+ boost::algorithm::replace_all (url, "{CPL}", *dcp->cpl());
+ optional<dcp::EncryptedKDM> kdm;
+ if (dcp->cpl() && !get_from_url(url, false, temp)) {
+ try {
+ kdm = dcp::EncryptedKDM (dcp::file_to_string(temp.file()));
+ if (kdm->cpl_id() != dcp->cpl()) {
+ kdm = boost::none;
+ }
+ } catch (std::exception& e) {
+ /* Hey well */
+ }
+ }
+ return kdm;
+ }
+#endif
+
+ optional<dcp::EncryptedKDM> get_kdm_from_directory (shared_ptr<DCPContent> dcp)
+ {
+ using namespace boost::filesystem;
+ optional<path> kdm_dir = Config::instance()->player_kdm_directory();
+ if (!kdm_dir) {
+ return optional<dcp::EncryptedKDM>();
+ }
+ for (directory_iterator i = directory_iterator(*kdm_dir); i != directory_iterator(); ++i) {
+ try {
+ if (file_size(i->path()) < MAX_KDM_SIZE) {
+ dcp::EncryptedKDM kdm (dcp::file_to_string(i->path()));
+ if (kdm.cpl_id() == dcp->cpl()) {
+ return kdm;
+ }
+ }
+ } catch (std::exception& e) {
+ /* Hey well */
+ }
+ }
+ return optional<dcp::EncryptedKDM>();
+ }
+
+ void reset_film (shared_ptr<Film> film = shared_ptr<Film>(new Film(optional<boost::filesystem::path>())))
+ {
+ _film = film;
+ _viewer->set_film (_film);
+ _film->Change.connect (bind(&DOMFrame::film_changed, this, _1, _2));
+ }