Rename ScreenKDM -> KDMWithMetadata
[dcpomatic.git] / src / lib / cinema_kdms.cc
index 558aee504bca2998aee932681b2b04b4cf7047e2..99d1511520b1bbb3d1e1a73b5d01a6190c7ac07c 100644 (file)
@@ -27,8 +27,8 @@
 #include "emailer.h"
 #include "compose.hpp"
 #include "log.h"
+#include "zipper.h"
 #include "dcpomatic_log.h"
-#include <zip.h>
 #include <boost/foreach.hpp>
 
 #include "i18n.h"
@@ -43,46 +43,25 @@ using boost::function;
 void
 CinemaKDMs::make_zip_file (boost::filesystem::path zip_file, dcp::NameFormat name_format, dcp::NameFormat::Map name_values) const
 {
-       int error;
-       struct zip* zip = zip_open (zip_file.string().c_str(), ZIP_CREATE | ZIP_EXCL, &error);
-       if (!zip) {
-               if (error == ZIP_ER_EXISTS) {
-                       throw FileError ("ZIP file already exists", zip_file);
-               }
-               throw FileError ("could not create ZIP file", zip_file);
-       }
-
-       list<shared_ptr<string> > kdm_strings;
+       Zipper zipper (zip_file);
 
        name_values['c'] = cinema->name;
 
-       BOOST_FOREACH (ScreenKDM const & i, screen_kdms) {
-               shared_ptr<string> kdm (new string (i.kdm.as_xml ()));
-               kdm_strings.push_back (kdm);
-
-               struct zip_source* source = zip_source_buffer (zip, kdm->c_str(), kdm->length(), 0);
-               if (!source) {
-                       throw runtime_error ("could not create ZIP source");
-               }
-
-               name_values['s'] = i.screen->name;
-               name_values['i'] = i.kdm.id ();
+       BOOST_FOREACH (shared_ptr<KDMWithMetadata> i, screen_kdms) {
+               name_values['s'] = i->screen->name;
+               name_values['i'] = i->kdm_id ();
                string const name = careful_string_filter(name_format.get(name_values, ".xml"));
-               if (zip_add (zip, name.c_str(), source) == -1) {
-                       throw runtime_error ("failed to add KDM to ZIP archive");
-               }
+               zipper.add (name, i->kdm_as_xml());
        }
 
-       if (zip_close (zip) == -1) {
-               throw runtime_error ("failed to close ZIP archive");
-       }
+       zipper.close ();
 }
 
-/** Collect a list of ScreenKDMs into a list of CinemaKDMs so that each
+/** Collect a list of KDMWithMetadatas into a list of CinemaKDMs so that each
  *  CinemaKDM contains the KDMs for its cinema.
  */
 list<CinemaKDMs>
-CinemaKDMs::collect (list<ScreenKDM> screen_kdms)
+CinemaKDMs::collect (list<shared_ptr<KDMWithMetadata> > screen_kdms)
 {
        list<CinemaKDMs> cinema_kdms;
 
@@ -92,17 +71,17 @@ CinemaKDMs::collect (list<ScreenKDM> screen_kdms)
 
                CinemaKDMs ck;
 
-               list<ScreenKDM>::iterator i = screen_kdms.begin ();
-               ck.cinema = i->screen->cinema;
+               list<shared_ptr<KDMWithMetadata> >::iterator i = screen_kdms.begin ();
+               ck.cinema = (*i)->screen->cinema;
                ck.screen_kdms.push_back (*i);
-               list<ScreenKDM>::iterator j = i;
+               list<shared_ptr<KDMWithMetadata> >::iterator j = i;
                ++i;
                screen_kdms.remove (*j);
 
                while (i != screen_kdms.end ()) {
-                       if (i->screen->cinema == ck.cinema) {
+                       if ((*i)->screen->cinema == ck.cinema) {
                                ck.screen_kdms.push_back (*i);
-                               list<ScreenKDM>::iterator j = i;
+                               list<shared_ptr<KDMWithMetadata> >::iterator j = i;
                                ++i;
                                screen_kdms.remove (*j);
                        } else {
@@ -138,7 +117,7 @@ CinemaKDMs::write_directories (
                path /= container_name_format.get(name_values, "");
                if (!boost::filesystem::exists (path) || confirm_overwrite (path)) {
                        boost::filesystem::create_directories (path);
-                       ScreenKDM::write_files (i.screen_kdms, path, filename_format, name_values, confirm_overwrite);
+                       KDMWithMetadata::write_files (i.screen_kdms, path, filename_format, name_values, confirm_overwrite);
                }
                written += i.screen_kdms.size();
        }
@@ -230,8 +209,8 @@ CinemaKDMs::email (
                boost::algorithm::replace_all (body, "$CINEMA_NAME", i.cinema->name);
 
                string screens;
-               BOOST_FOREACH (ScreenKDM const & j, i.screen_kdms) {
-                       screens += j.screen->name + ", ";
+               BOOST_FOREACH (shared_ptr<KDMWithMetadata> j, i.screen_kdms) {
+                       screens += j->screen->name + ", ";
                }
                boost::algorithm::replace_all (body, "$SCREENS", screens.substr (0, screens.length() - 2));
 
@@ -249,7 +228,7 @@ CinemaKDMs::email (
                Config* c = Config::instance ();
 
                try {
-                       email.send (c->mail_server(), c->mail_port(), c->mail_user(), c->mail_password());
+                       email.send (c->mail_server(), c->mail_port(), c->mail_protocol(), c->mail_user(), c->mail_password());
                } catch (...) {
                        boost::filesystem::remove (zip_file);
                        dcpomatic_log->log ("Email content follows", LogEntry::TYPE_DEBUG_EMAIL);