X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcinema.cc;h=7388dbc2fb890390a15ca75f9f5beead2f956a20;hb=957f92414a6f88dd6ef1ceb901ef0b61414bf6cd;hp=43a4322396144417041ec801c380895f170079bf;hpb=1629bd7df2150156109afbc7a16677cb29e82adf;p=dcpomatic.git diff --git a/src/lib/cinema.cc b/src/lib/cinema.cc index 43a432239..7388dbc2f 100644 --- a/src/lib/cinema.cc +++ b/src/lib/cinema.cc @@ -1,45 +1,56 @@ /* - Copyright (C) 2013 Carl Hetherington + Copyright (C) 2013-2021 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ -#include -#include + #include "cinema.h" +#include "screen.h" +#include "dcpomatic_assert.h" +#include +#include +#include -using std::list; -using boost::shared_ptr; -Cinema::Cinema (shared_ptr node) +using std::make_shared; +using std::shared_ptr; +using std::string; +using dcp::raw_convert; +using dcpomatic::Screen; + + +Cinema::Cinema (cxml::ConstNodePtr node) : name (node->string_child ("Name")) - , email (node->string_child ("Email")) + , notes (node->optional_string_child("Notes").get_value_or("")) { - + for (auto i: node->node_children("Email")) { + emails.push_back (i->content ()); + } } /* This is necessary so that we can use shared_from_this in add_screen (which cannot be done from a constructor) */ void -Cinema::read_screens (shared_ptr node) +Cinema::read_screens (cxml::ConstNodePtr node) { - list s = node->node_children ("Screen"); - for (list::iterator i = s.begin(); i != s.end(); ++i) { - add_screen (shared_ptr (new Screen (*i))); + for (auto i: node->node_children("Screen")) { + add_screen (make_shared(i)); } } @@ -47,10 +58,15 @@ void Cinema::as_xml (xmlpp::Element* parent) const { parent->add_child("Name")->add_child_text (name); - parent->add_child("Email")->add_child_text (email); - for (list >::const_iterator i = _screens.begin(); i != _screens.end(); ++i) { - (*i)->as_xml (parent->add_child ("Screen")); + for (auto i: emails) { + parent->add_child("Email")->add_child_text (i); + } + + parent->add_child("Notes")->add_child_text (notes); + + for (auto i: _screens) { + i->as_xml (parent->add_child ("Screen")); } } @@ -64,20 +80,9 @@ Cinema::add_screen (shared_ptr s) void Cinema::remove_screen (shared_ptr s) { - _screens.remove (s); -} - -Screen::Screen (shared_ptr node) -{ - name = node->string_child ("Name"); - certificate = shared_ptr (new dcp::Certificate (node->string_child ("Certificate"))); -} - -void -Screen::as_xml (xmlpp::Element* parent) const -{ - parent->add_child("Name")->add_child_text (name); - parent->add_child("Certificate")->add_child_text (certificate->certificate (true)); + auto iter = std::find(_screens.begin(), _screens.end(), s); + if (iter != _screens.end()) { + _screens.erase(iter); + } } -