swaroop: check for KDMs when selecting playlist.
authorCarl Hetherington <cth@carlh.net>
Fri, 21 Dec 2018 23:57:09 +0000 (23:57 +0000)
committerCarl Hetherington <cth@carlh.net>
Fri, 21 Dec 2018 23:57:09 +0000 (23:57 +0000)
src/tools/dcpomatic_player.cc
src/wx/swaroop_controls.cc
src/wx/swaroop_controls.h

index 26110b373761e5a02f867d98a658dae69b7c788f..b39e59d6ba302dc1caa80cdf88e3bc4361dcd2fe 100644 (file)
@@ -389,49 +389,6 @@ public:
                }
        }
 
-#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_weak (weak_ptr<Film> weak_film)
        {
                shared_ptr<Film> film = weak_film.lock ();
@@ -464,20 +421,6 @@ public:
 
                BOOST_FOREACH (shared_ptr<Content> i, _film->content()) {
                        shared_ptr<DCPContent> dcp = dynamic_pointer_cast<DCPContent>(i);
-                       if (dcp && dcp->needs_kdm()) {
-                               optional<dcp::EncryptedKDM> kdm;
-#ifdef DCPOMATIC_VARIANT_SWAROOP
-                               kdm = get_kdm_from_url (dcp);
-#endif
-                               if (!kdm) {
-                                       kdm = get_kdm_from_directory (dcp);
-                               }
-
-                               if (kdm) {
-                                       dcp->add_kdm (*kdm);
-                                       dcp->examine (_film, shared_ptr<Job>());
-                               }
-                       }
 
                        BOOST_FOREACH (shared_ptr<TextContent> j, i->text) {
                                j->set_use (true);
index 870ac518bb1d6dc13d6d30b04c63aced19e2597e..7eed86743df2ea4b7434a6df43b2103249108a69 100644 (file)
@@ -27,6 +27,8 @@
 #include "lib/player_video.h"
 #include "lib/dcp_content.h"
 #include "lib/cross.h"
+#include "lib/scoped_temporary.h"
+#include "lib/internet.h"
 #include <dcp/raw_convert.h>
 #include <wx/listctrl.h>
 #include <wx/progdlg.h>
@@ -317,6 +319,49 @@ SwaroopControls::update_playlist_directory ()
        _selected_playlist = boost::none;
 }
 
+optional<dcp::EncryptedKDM>
+SwaroopControls::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;
+}
+
+optional<dcp::EncryptedKDM>
+SwaroopControls::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
 SwaroopControls::spl_selection_changed ()
 {
@@ -342,6 +387,28 @@ SwaroopControls::spl_selection_changed ()
        wxProgressDialog dialog (_("DCP-o-matic"), "Loading playlist");
        dialog.Pulse ();
 
+       BOOST_FOREACH (SPLEntry const & i, _playlists[selected].get()) {
+               shared_ptr<DCPContent> dcp = dynamic_pointer_cast<DCPContent> (i.content);
+               if (dcp && dcp->needs_kdm()) {
+                       optional<dcp::EncryptedKDM> kdm;
+                       kdm = get_kdm_from_url (dcp);
+                       if (!kdm) {
+                               kdm = get_kdm_from_directory (dcp);
+                       }
+                       if (kdm) {
+                               dcp->add_kdm (*kdm);
+                               dcp->examine (_film, shared_ptr<Job>());
+                       }
+                       if (dcp->needs_kdm()) {
+                               /* We didn't get a KDM for this */
+                               error_dialog (this, "This playlist cannot be loaded as a KDM is missing.");
+                               _selected_playlist = boost::none;
+                               _spl_view->SetItemState (selected, 0, wxLIST_STATE_SELECTED);
+                               return;
+                       }
+               }
+       }
+
        _current_spl_view->DeleteAllItems ();
 
        int N = 0;
index 077b16fbea83a8ea3edddcda25c3a802f8f7a4bd..e2c4190b66520639228f58204acbaa6e81318e37 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "controls.h"
 
+class DCPContent;
+
 class SwaroopControls : public Controls
 {
 public:
@@ -56,6 +58,9 @@ private:
        bool can_do_previous ();
        bool can_do_next ();
 
+       boost::optional<dcp::EncryptedKDM> get_kdm_from_url (boost::shared_ptr<DCPContent> dcp);
+       boost::optional<dcp::EncryptedKDM> get_kdm_from_directory (boost::shared_ptr<DCPContent> dcp);
+
        wxButton* _play_button;
        wxButton* _pause_button;
        wxButton* _stop_button;