summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-12-16 15:59:02 +0000
committerCarl Hetherington <cth@carlh.net>2016-12-16 15:59:02 +0000
commit7e4d7d9e4f146576a63c6ab1be9bca5a79b507d9 (patch)
tree96c0edcde9d9bcaface13ce6bbdf00f24d46619d /src
parent7af655af72ef6259368583a917987dee6d7e4646 (diff)
Confirm overwrite of KDMs (#1008).
Diffstat (limited to 'src')
-rw-r--r--src/lib/screen_kdm.cc19
-rw-r--r--src/lib/screen_kdm.h5
-rw-r--r--src/tools/dcpomatic_kdm.cc29
-rw-r--r--src/tools/dcpomatic_kdm_cli.cc12
-rw-r--r--src/wx/kdm_dialog.cc13
-rw-r--r--src/wx/kdm_dialog.h1
6 files changed, 65 insertions, 14 deletions
diff --git a/src/lib/screen_kdm.cc b/src/lib/screen_kdm.cc
index 182d03bb0..5d8409ea7 100644
--- a/src/lib/screen_kdm.cc
+++ b/src/lib/screen_kdm.cc
@@ -34,14 +34,27 @@ operator== (ScreenKDM const & a, ScreenKDM const & b)
return a.screen == b.screen && a.kdm == b.kdm;
}
-void
-ScreenKDM::write_files (list<ScreenKDM> screen_kdms, boost::filesystem::path directory, dcp::NameFormat name_format, dcp::NameFormat::Map name_values)
+int
+ScreenKDM::write_files (
+ list<ScreenKDM> screen_kdms,
+ boost::filesystem::path directory,
+ dcp::NameFormat name_format,
+ dcp::NameFormat::Map name_values,
+ boost::function<bool (boost::filesystem::path)> confirm_overwrite
+ )
{
+ int written = 0;
+
/* Write KDMs to the specified directory */
BOOST_FOREACH (ScreenKDM const & i, screen_kdms) {
name_values['c'] = i.screen->cinema->name;
name_values['s'] = i.screen->name;
boost::filesystem::path out = directory / (name_format.get(name_values, ".xml"));
- i.kdm.as_xml (out);
+ if (!boost::filesystem::exists (out) || confirm_overwrite (out)) {
+ i.kdm.as_xml (out);
+ ++written;
+ }
}
+
+ return written;
}
diff --git a/src/lib/screen_kdm.h b/src/lib/screen_kdm.h
index 60486c259..9ab73b851 100644
--- a/src/lib/screen_kdm.h
+++ b/src/lib/screen_kdm.h
@@ -36,9 +36,10 @@ public:
, kdm (k)
{}
- static void write_files (
+ static int write_files (
std::list<ScreenKDM> screen_kdms, boost::filesystem::path directory,
- dcp::NameFormat name_format, dcp::NameFormat::Map name_values
+ dcp::NameFormat name_format, dcp::NameFormat::Map name_values,
+ boost::function<bool (boost::filesystem::path)> confirm_overwrite
);
boost::shared_ptr<Screen> screen;
diff --git a/src/tools/dcpomatic_kdm.cc b/src/tools/dcpomatic_kdm.cc
index a0a3a59f8..880aec454 100644
--- a/src/tools/dcpomatic_kdm.cc
+++ b/src/tools/dcpomatic_kdm.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2015 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2015-2016 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -63,6 +63,7 @@ using std::vector;
using boost::shared_ptr;
using boost::bind;
using boost::optional;
+using boost::ref;
enum {
ID_help_report_a_problem = 1,
@@ -268,6 +269,14 @@ private:
m->Append (help, _("&Help"));
}
+ bool confirm_overwrite (boost::filesystem::path path)
+ {
+ return confirm_dialog (
+ this,
+ wxString::Format (_("File %s already exists. Do you want to overwrite it?"), std_to_wx(path.string()).data())
+ );
+ }
+
void create_kdms ()
{
try {
@@ -315,13 +324,19 @@ private:
name_values['e'] = dcp::LocalTime(_timing->until()).date() + " " + dcp::LocalTime(_timing->until()).time_of_day();
if (_output->write_to()) {
- ScreenKDM::write_files (screen_kdms, _output->directory(), _output->name_format(), name_values);
- /* XXX: proper plural form support in wxWidgets? */
- wxString s = screen_kdms.size() == 1 ? _("%d KDM written to %s") : _("%d KDMs written to %s");
- message_dialog (
- this,
- wxString::Format (s, int(screen_kdms.size()), std_to_wx(_output->directory().string()).data())
+ int written = ScreenKDM::write_files (
+ screen_kdms, _output->directory(), _output->name_format(), name_values,
+ bind (&DOMFrame::confirm_overwrite, this, _1)
);
+
+ if (written > 0) {
+ /* XXX: proper plural form support in wxWidgets? */
+ wxString s = written == 1 ? _("%d KDM written to %s") : _("%d KDMs written to %s");
+ message_dialog (
+ this,
+ wxString::Format (s, written, std_to_wx(_output->directory().string()).data())
+ );
+ }
} else {
string film_name = decrypted.annotation_text().get_value_or ("");
if (film_name.empty ()) {
diff --git a/src/tools/dcpomatic_kdm_cli.cc b/src/tools/dcpomatic_kdm_cli.cc
index f0097d7de..7cfcaa171 100644
--- a/src/tools/dcpomatic_kdm_cli.cc
+++ b/src/tools/dcpomatic_kdm_cli.cc
@@ -40,6 +40,7 @@ using std::list;
using std::vector;
using boost::shared_ptr;
using boost::optional;
+using boost::bind;
static void
help ()
@@ -106,6 +107,12 @@ duration_from_string (string d)
exit (EXIT_FAILURE);
}
+static bool
+always_overwrite ()
+{
+ return true;
+}
+
int main (int argc, char* argv[])
{
boost::filesystem::path output;
@@ -306,7 +313,10 @@ int main (int argc, char* argv[])
cout << "Wrote ZIP files to " << output << "\n";
}
} else {
- ScreenKDM::write_files (screen_kdms, output, Config::instance()->kdm_filename_format(), values);
+ ScreenKDM::write_files (
+ screen_kdms, output, Config::instance()->kdm_filename_format(), values,
+ bind (&always_overwrite)
+ );
if (verbose) {
cout << "Wrote KDM files to " << output << "\n";
diff --git a/src/wx/kdm_dialog.cc b/src/wx/kdm_dialog.cc
index 8294a12aa..5ed1169b1 100644
--- a/src/wx/kdm_dialog.cc
+++ b/src/wx/kdm_dialog.cc
@@ -48,6 +48,7 @@ using std::cout;
using std::vector;
using std::make_pair;
using boost::shared_ptr;
+using boost::bind;
KDMDialog::KDMDialog (wxWindow* parent, shared_ptr<const Film> film)
: wxDialog (parent, wxID_ANY, _("Make KDMs"))
@@ -123,6 +124,15 @@ KDMDialog::setup_sensitivity ()
_make->Enable (!_screens->screens().empty() && _timing->valid() && _cpl->has_selected());
}
+bool
+KDMDialog::confirm_overwrite (boost::filesystem::path path)
+{
+ return confirm_dialog (
+ this,
+ wxString::Format (_("File %s already exists. Do you want to overwrite it?"), std_to_wx(path.string()).data())
+ );
+}
+
void
KDMDialog::make_clicked ()
{
@@ -146,7 +156,8 @@ KDMDialog::make_clicked ()
screen_kdms,
_output->directory(),
_output->name_format(),
- name_values
+ name_values,
+ bind (&KDMDialog::confirm_overwrite, this, _1)
);
}
diff --git a/src/wx/kdm_dialog.h b/src/wx/kdm_dialog.h
index a76c2a14f..099db951b 100644
--- a/src/wx/kdm_dialog.h
+++ b/src/wx/kdm_dialog.h
@@ -42,6 +42,7 @@ public:
private:
void setup_sensitivity ();
void make_clicked ();
+ bool confirm_overwrite (boost::filesystem::path path);
boost::weak_ptr<const Film> _film;
ScreensPanel* _screens;