X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fverify_dcp_dialog.cc;h=c77f68ea1dc2c7ea1baec1cbbf064d89cfa3963d;hb=HEAD;hp=82d9ca231c7b876e16ab1a916ab14524e7971f3d;hpb=0ecea9f4d1a772e99f396e47364e68abfbfe9f7f;p=dcpomatic.git diff --git a/src/wx/verify_dcp_dialog.cc b/src/wx/verify_dcp_dialog.cc index 82d9ca231..c7a32e5dd 100644 --- a/src/wx/verify_dcp_dialog.cc +++ b/src/wx/verify_dcp_dialog.cc @@ -88,6 +88,20 @@ VerifyDCPDialog::VerifyDCPDialog (wxWindow* parent, shared_ptr job }; auto add = [&counts, &add_bullet](dcp::VerificationNote note, wxString message) { + if (note.reference_hash()) { + message.Replace("%reference_hash", std_to_wx(note.reference_hash().get())); + } + if (note.calculated_hash()) { + message.Replace("%calculated_hash", std_to_wx(note.calculated_hash().get())); + } + if (note.frame()) { + message.Replace("%frame", std_to_wx(dcp::raw_convert(note.frame().get()))); + message.Replace( + "%timecode", + std_to_wx( + dcp::Time(note.frame().get(), note.frame_rate().get(), note.frame_rate().get()).as_string(dcp::Standard::SMPTE) + )); + } if (note.note()) { message.Replace("%n", std_to_wx(note.note().get())); } @@ -97,6 +111,18 @@ VerifyDCPDialog::VerifyDCPDialog (wxWindow* parent, shared_ptr job if (note.line()) { message.Replace("%l", std_to_wx(dcp::raw_convert(note.line().get()))); } + if (note.component()) { + message.Replace("%component", std_to_wx(dcp::raw_convert(note.component().get()))); + } + if (note.size()) { + message.Replace("%size", std_to_wx(dcp::raw_convert(note.size().get()))); + } + if (note.id()) { + message.Replace("%id", std_to_wx(note.id().get())); + } + if (note.other_id()) { + message.Replace("%other_id", std_to_wx(note.other_id().get())); + } add_bullet (note.type(), message); counts[note.type()]++; }; @@ -104,27 +130,28 @@ VerifyDCPDialog::VerifyDCPDialog (wxWindow* parent, shared_ptr job if (job->finished_in_error() && job->error_summary() != "") { /* We have an error that did not come from dcp::verify */ add_bullet (dcp::VerificationNote::Type::ERROR, std_to_wx(job->error_summary())); + ++counts[dcp::VerificationNote::Type::ERROR]; } for (auto i: job->notes()) { switch (i.code()) { case dcp::VerificationNote::Code::FAILED_READ: - add (i, std_to_wx(*i.note())); + add (i, _("Could not read DCP (%n)")); break; case dcp::VerificationNote::Code::MISMATCHED_CPL_HASHES: - add(i, _("The hash of the CPL %n in the PKL does not agree with the CPL file. This probably means that the CPL file is corrupt.")); + add(i, _("The hash (%reference_hash) of the CPL %n in the PKL does not agree with the CPL file (%calculated_hash). This probably means that the CPL file is corrupt.")); break; case dcp::VerificationNote::Code::INVALID_PICTURE_FRAME_RATE: add(i, _("The picture in a reel has a frame rate of %n, which is not valid.")); break; case dcp::VerificationNote::Code::INCORRECT_PICTURE_HASH: - add(i, _("The hash of the picture asset %f does not agree with the PKL file. This probably means that the asset file is corrupt.")); + add(i, _("The hash (%calculated_hash) of the picture asset %f does not agree with the PKL file (%reference_hash). This probably means that the asset file is corrupt.")); break; case dcp::VerificationNote::Code::MISMATCHED_PICTURE_HASHES: add(i, _("The PKL and CPL hashes disagree for picture asset %f.")); break; case dcp::VerificationNote::Code::INCORRECT_SOUND_HASH: - add(i, _("The hash of the sound asset %f does not agree with the PKL file. This probably means that the asset file is corrupt.")); + add(i, _("The hash (%calculated_hash) of the sound asset %f does not agree with the PKL file (%reference_hash). This probably means that the asset file is corrupt.")); break; case dcp::VerificationNote::Code::MISMATCHED_SOUND_HASHES: add(i, _("The PKL and CPL hashes disagree for sound asset %f.")); @@ -158,7 +185,7 @@ VerifyDCPDialog::VerifyDCPDialog (wxWindow* parent, shared_ptr job add(i, _("At least one frame of the video asset %f is over the limit of 250Mbit/s.")); break; case dcp::VerificationNote::Code::NEARLY_INVALID_PICTURE_FRAME_SIZE_IN_BYTES: - add(i, _("At least one frame of the video asset %f is close to the limit of 250MBit/s.")); + add(i, _("Frame %frame (timecode %timecode) in asset %f has an instantaneous bit rate that is close to the limit of 250Mbit/s.")); break; case dcp::VerificationNote::Code::EXTERNAL_ASSET: add(i, _("This DCP refers to at the asset %n in another DCP (and perhaps others), so it is a \"version file\" (VF)")); @@ -389,6 +416,45 @@ VerifyDCPDialog::VerifyDCPDialog (wxWindow* parent, shared_ptr job case dcp::VerificationNote::Code::DUPLICATE_ASSET_ID_IN_ASSETMAP: add(i, _("The ASSETMAP %n has more than one asset with the same ID.")); break; + case dcp::VerificationNote::Code::MISSING_SUBTITLE: + add(i, _("The subtitle asset %n contains no subtitles.")); + break; + case dcp::VerificationNote::Code::INVALID_SUBTITLE_ISSUE_DATE: + add(i, _(" has an invalid value %n")); + break; + case dcp::VerificationNote::Code::MISMATCHED_SOUND_CHANNEL_COUNTS: + add(i, _("Sound assets do not all have the same channel count.")); + break; + case dcp::VerificationNote::Code::INVALID_MAIN_SOUND_CONFIGURATION: + add(i, _(" describes incorrect number of channels (%n)")); + break; + case dcp::VerificationNote::Code::MISSING_FONT: + add(i, _("The font file for font ID \"%n\" was not found, or was not referred to in the ASSETMAP.")); + break; + case dcp::VerificationNote::Code::INVALID_JPEG2000_TILE_PART_SIZE: + add(i, _("Frame %frame has an image component that is too large (component %component is %size bytes in size).")); + break; + case dcp::VerificationNote::Code::INCORRECT_SUBTITLE_NAMESPACE_COUNT: + add(i, _("The XML in the subtitle asset %n has more than one namespace declaration.")); + break; + case dcp::VerificationNote::Code::MISSING_LOAD_FONT_FOR_FONT: + add(i, _("A subtitle or closed caption refers to a font with ID %id that does not have a corresponding node.")); + break; + case dcp::VerificationNote::Code::MISSING_LOAD_FONT: + add(i, _("The SMPTE subtitle asset %id has nodes but no node")); + break; + case dcp::VerificationNote::Code::MISMATCHED_ASSET_MAP_ID: + add(i, _("The asset with ID %id in the asset map actually has an id of %other_id")); + break; + case dcp::VerificationNote::Code::EMPTY_CONTENT_VERSION_LABEL_TEXT: + add(i, _("The in a in CPL %id is empty")); + break; + case dcp::VerificationNote::Code::INVALID_CPL_NAMESPACE: + add(i, _("The CPL %f has an invalid namespace %n")); + break; + case dcp::VerificationNote::Code::MISSING_CPL_CONTENT_VERSION: + add(i, _("The CPL %n has no tag")); + break; } }