Rename ScreenKDM -> KDMWithMetadata
[dcpomatic.git] / src / lib / cinema_kdms.cc
index 32879cf6b5763355378e6ddc58432b8095d8ef52..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 (shared_ptr<ScreenKDM> 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");
-               }
-
+       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<shared_ptr<ScreenKDM> > screen_kdms)
+CinemaKDMs::collect (list<shared_ptr<KDMWithMetadata> > screen_kdms)
 {
        list<CinemaKDMs> cinema_kdms;
 
@@ -92,17 +71,17 @@ CinemaKDMs::collect (list<shared_ptr<ScreenKDM> > screen_kdms)
 
                CinemaKDMs ck;
 
-               list<shared_ptr<ScreenKDM> >::iterator i = screen_kdms.begin ();
+               list<shared_ptr<KDMWithMetadata> >::iterator i = screen_kdms.begin ();
                ck.cinema = (*i)->screen->cinema;
                ck.screen_kdms.push_back (*i);
-               list<shared_ptr<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) {
                                ck.screen_kdms.push_back (*i);
-                               list<shared_ptr<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,7 +209,7 @@ CinemaKDMs::email (
                boost::algorithm::replace_all (body, "$CINEMA_NAME", i.cinema->name);
 
                string screens;
-               BOOST_FOREACH (shared_ptr<ScreenKDM> j, i.screen_kdms) {
+               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));