X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Ftools%2Fdcpomatic_batch.cc;h=9cb6ddc5546fc3887a598641e9bfc5c0d3ddd996;hb=a5d004b0773f633401528392fc28e66d70e13ac8;hp=ac57baf4bd83bd9d505fd7510f41cdd512272ceb;hpb=bb990ccc49ee724a8af2ad80bde066374af4b68a;p=dcpomatic.git diff --git a/src/tools/dcpomatic_batch.cc b/src/tools/dcpomatic_batch.cc index ac57baf4b..9cb6ddc55 100644 --- a/src/tools/dcpomatic_batch.cc +++ b/src/tools/dcpomatic_batch.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2018 Carl Hetherington + Copyright (C) 2013-2019 Carl Hetherington This file is part of DCP-o-matic. @@ -24,6 +24,7 @@ #include "wx/job_manager_view.h" #include "wx/full_config_dialog.h" #include "wx/servers_list_dialog.h" +#include "wx/dcpomatic_button.h" #include "lib/version.h" #include "lib/compose.hpp" #include "lib/config.h" @@ -32,22 +33,28 @@ #include "lib/job_manager.h" #include "lib/job.h" #include "lib/dcpomatic_socket.h" +#include "lib/transcode_job.h" #include #include #include #include #include #include -#include #include +#include using std::exception; using std::string; using std::cout; using std::list; -using boost::shared_ptr; +using std::set; +using std::shared_ptr; using boost::thread; using boost::scoped_array; +using std::dynamic_pointer_cast; +#if BOOST_VERSION >= 106100 +using namespace boost::placeholders; +#endif static list films_to_load; @@ -119,13 +126,13 @@ public: _sizer->Add (job_manager_view, 1, wxALL | wxEXPAND, 6); wxSizer* buttons = new wxBoxSizer (wxHORIZONTAL); - wxButton* add = new wxButton (panel, wxID_ANY, _("Add Film...")); + wxButton* add = new Button (panel, _("Add Film...")); add->Bind (wxEVT_BUTTON, boost::bind (&DOMFrame::add_film, this)); buttons->Add (add, 1, wxALL, 6); - _pause = new wxButton (panel, wxID_ANY, _("Pause")); + _pause = new Button (panel, _("Pause")); _pause->Bind (wxEVT_BUTTON, boost::bind(&DOMFrame::pause, this)); buttons->Add (_pause, 1, wxALL, 6); - _resume = new wxButton (panel, wxID_ANY, _("Resume")); + _resume = new Button (panel, _("Resume")); _resume->Bind (wxEVT_BUTTON, boost::bind(&DOMFrame::resume, this)); buttons->Add (_resume, 1, wxALL, 6); @@ -162,6 +169,43 @@ public: try { shared_ptr film (new Film (path)); film->read_metadata (); + + double total_required; + double available; + bool can_hard_link; + + film->should_be_enough_disk_space (total_required, available, can_hard_link); + + set > films; + + for (auto i: JobManager::instance()->get()) { + films.insert (i->film()); + } + + for (auto i: films) { + double progress = 0; + for (auto j: JobManager::instance()->get()) { + if (i == j->film() && dynamic_pointer_cast(j)) { + progress = j->progress().get_value_or(0); + } + } + + double required; + i->should_be_enough_disk_space (required, available, can_hard_link); + total_required += (1 - progress) * required; + } + + if ((total_required - available) > 1) { + if (!confirm_dialog ( + this, + wxString::Format( + _("The DCPs for this film and the films already in the queue will take up about %.1f GB. The " + "disks that you are using only have %.1f GB available. Do you want to add this film to the queue anyway?"), + total_required, available))) { + return; + } + } + film->make_dcp (); } catch (std::exception& e) { wxString p = std_to_wx (path.string ()); @@ -340,6 +384,8 @@ class App : public wxApp { bool OnInit () { + wxInitAllImageHandlers (); + SetAppName (_("DCP-o-matic Batch Converter")); is_batch_converter = true; @@ -391,7 +437,7 @@ class App : public wxApp this->Bind (wxEVT_IDLE, boost::bind (&App::idle, this)); shared_ptr film; - BOOST_FOREACH (boost::filesystem::path i, films_to_load) { + for (auto i: films_to_load) { if (boost::filesystem::is_directory (i)) { try { film.reset (new Film (i));