summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-07-25 16:21:51 +0100
committerCarl Hetherington <cth@carlh.net>2013-07-25 16:21:51 +0100
commit290daefb79ec399cf7ba54968fc7e92e375e98d6 (patch)
tree62a4388335991818eb85f5f9e3f0f498d792b024 /src
parent945460f71db55d8daa232df3d869cc604ae5a240 (diff)
Try to be more careful when loading FrameInfos from disk.
Diffstat (limited to 'src')
-rw-r--r--src/lib/job.h3
-rw-r--r--src/lib/writer.cc4
-rw-r--r--src/wx/job_manager_view.cc7
3 files changed, 8 insertions, 6 deletions
diff --git a/src/lib/job.h b/src/lib/job.h
index eb09ba386..9b8b14a93 100644
--- a/src/lib/job.h
+++ b/src/lib/job.h
@@ -70,6 +70,9 @@ public:
void ascend ();
void descend (float);
float overall_progress () const;
+ bool progress_unknown () const {
+ return _progress_unknown;
+ }
boost::signals2::signal<void()> Progress;
/** Emitted from the UI thread when the job is finished */
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index 522ecc1c1..4c8a36597 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -411,6 +411,10 @@ Writer::check_existing_picture_mxf_frame (FILE* mxf, int f, Eyes eyes)
/* Read the frame info as written */
ifstream ifi (_film->info_path (f, eyes).c_str());
libdcp::FrameInfo info (ifi);
+ if (info.size == 0) {
+ _film->log()->log (String::compose ("Existing frame %1 has no info file", f));
+ return false;
+ }
/* Read the data from the MXF and hash it */
fseek (mxf, info.offset, SEEK_SET);
diff --git a/src/wx/job_manager_view.cc b/src/wx/job_manager_view.cc
index 20f885a9b..b627edc2f 100644
--- a/src/wx/job_manager_view.cc
+++ b/src/wx/job_manager_view.cc
@@ -43,7 +43,6 @@ public:
, _window (window)
, _panel (panel)
, _table (table)
- , _needs_pulse (false)
{
int n = 0;
@@ -86,11 +85,9 @@ public:
void maybe_pulse ()
{
- if (_job->running() && _needs_pulse) {
+ if (_job->running() && _job->progress_unknown ()) {
_gauge->Pulse ();
}
-
- _needs_pulse = true;
}
private:
@@ -101,7 +98,6 @@ private:
if (p >= 0) {
checked_set (_message, _job->status ());
_gauge->SetValue (p * 100);
- _needs_pulse = false;
}
_table->Layout ();
@@ -156,7 +152,6 @@ private:
wxButton* _cancel;
wxButton* _pause;
wxButton* _details;
- bool _needs_pulse;
};
/** Must be called in the GUI thread */