Remove polling from JobManagerView and use signals instead (fixes #137).
[dcpomatic.git] / src / lib / job.cc
index 8bb43a91f28bc3c5acbe207c3b61a6433b013518..18df40878f8feafae345fa64786be06d51e0ecaf 100644 (file)
@@ -28,6 +28,7 @@
 #include "util.h"
 #include "cross.h"
 #include "ui_signaller.h"
+#include "exceptions.h"
 
 #include "i18n.h"
 
@@ -36,9 +37,7 @@ using std::list;
 using std::stringstream;
 using boost::shared_ptr;
 
-/** @param s Film that we are operating on.
- */
-Job::Job (shared_ptr<Film> f)
+Job::Job (shared_ptr<const Film> f)
        : _film (f)
        , _thread (0)
        , _state (NEW)
@@ -85,17 +84,27 @@ Job::run_wrapper ()
 
                set_error (e.what(), m);
 
+       } catch (OpenFileError& e) {
+
+               set_progress (1);
+               set_state (FINISHED_ERROR);
+
+               set_error (
+                       String::compose (_("Could not open %1"), e.file().string()),
+                       String::compose (_("DCP-o-matic could not open the file %1.  Perhaps it does not exist or is in an unexpected format."), e.file().string())
+                       );
+
        } catch (boost::thread_interrupted &) {
 
                set_state (FINISHED_CANCELLED);
-               
+               
        } catch (std::exception& e) {
 
                set_progress (1);
                set_state (FINISHED_ERROR);
                set_error (
                        e.what (),
-                       _("It is not known what caused this error.  The best idea is to report the problem to the DVD-o-matic mailing list (dvdomatic@carlh.net)")
+                       _("It is not known what caused this error.  The best idea is to report the problem to the DCP-o-matic mailing list (dcpomatic@carlh.net)")
                        );
 
        } catch (...) {
@@ -104,7 +113,7 @@ Job::run_wrapper ()
                set_state (FINISHED_ERROR);
                set_error (
                        _("Unknown error"),
-                       _("It is not known what caused this error.  The best idea is to report the problem to the DVD-o-matic mailing list (dvdomatic@carlh.net)")
+                       _("It is not known what caused this error.  The best idea is to report the problem to the DCP-o-matic mailing list (dcpomatic@carlh.net)")
                        );
 
        }
@@ -204,7 +213,11 @@ Job::set_progress (float p)
        boost::this_thread::interruption_point ();
 
        if (paused ()) {
-               dvdomatic_sleep (1);
+               dcpomatic_sleep (1);
+       }
+
+       if (ui_signaller) {
+               ui_signaller->emit (boost::bind (boost::ref (Progress)));
        }
 }