Fix build.
[dcpomatic.git] / src / lib / job.cc
index dacc8bf311e4eb1fcbec1f4026d77b0395ecce2e..3472f27768b5d8082ff09bbfa01230fb2f664b6b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -28,6 +28,7 @@
 #include "exceptions.h"
 #include "film.h"
 #include "log.h"
+#include "analytics.h"
 #include "compose.hpp"
 #include <dcp/exceptions.h>
 #include <sub/exceptions.h>
@@ -87,6 +88,9 @@ Job::start ()
        _start_time = time (0);
        _sub_start_time = time (0);
        _thread = new boost::thread (boost::bind (&Job::run_wrapper, this));
+#ifdef DCPOMATIC_LINUX
+       pthread_setname_np (_thread->native_handle(), "job-wrapper");
+#endif
 }
 
 /** A wrapper for the ::run() method to catch exceptions */
@@ -120,8 +124,9 @@ Job::run_wrapper ()
                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."),
-                               boost::filesystem::absolute (e.file()).string()
+                               _("DCP-o-matic could not open the file %1 (%2).  Perhaps it does not exist or is in an unexpected format."),
+                               boost::filesystem::absolute (e.file()).string(),
+                               e.what()
                                )
                        );
 
@@ -134,8 +139,9 @@ Job::run_wrapper ()
                        set_error (
                                String::compose (_("Could not open %1"), e.path1().string ()),
                                String::compose (
-                                       _("DCP-o-matic could not open the file %1.  Perhaps it does not exist or is in an unexpected format."),
-                                       boost::filesystem::absolute (e.path1()).string()
+                                       _("DCP-o-matic could not open the file %1 (%2).  Perhaps it does not exist or is in an unexpected format."),
+                                       boost::filesystem::absolute (e.path1()).string(),
+                                       e.what()
                                        )
                                );
                } else {
@@ -169,6 +175,18 @@ Job::run_wrapper ()
                set_progress (1);
                set_state (FINISHED_ERROR);
 
+       } catch (dcp::DCPReadError& e) {
+
+               set_error (e.what(), "");//message(), e.detail().get_value_or(""));
+               set_progress (1);
+               set_state (FINISHED_ERROR);
+
+       } catch (KDMError& e) {
+
+               set_error (e.summary(), e.detail());
+               set_progress (1);
+               set_state (FINISHED_ERROR);
+
        } catch (std::exception& e) {
 
                set_error (
@@ -269,11 +287,14 @@ Job::set_state (State s)
                        finished = true;
                        _sub_name.clear ();
                }
+
        }
 
        if (finished) {
                emit (boost::bind (boost::ref (Finished)));
        }
+
+       Analytics::instance()->job_state_changed (shared_from_this());
 }
 
 /** @return DCPTime (in seconds) that this sub-job has been running */
@@ -302,6 +323,7 @@ Job::check_for_interruption_or_pause ()
 
 /** Set the progress of the current part of the job.
  *  @param p Progress (from 0 to 1)
+ *  @param force Do not ignore this update, even if it hasn't been long since the last one.
  */
 void
 Job::set_progress (float p, bool force)
@@ -374,7 +396,8 @@ Job::error_summary () const
 }
 
 /** Set the current error string.
- *  @param e New error string.
+ *  @param s New error string.
+ *  @param d New error detail string.
  */
 void
 Job::set_error (string s, string d)
@@ -421,8 +444,8 @@ Job::status () const
                if (t > 10 && r > 0) {
                        boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
                        boost::posix_time::ptime finish = now + boost::posix_time::seconds(r);
-                       char finish_string[6];
-                       snprintf (finish_string, sizeof(finish_string), "%02d:%02d", finish.time_of_day().hours(), finish.time_of_day().minutes());
+                       char finish_string[16];
+                       snprintf (finish_string, sizeof(finish_string), "%02d:%02d", int(finish.time_of_day().hours()), int(finish.time_of_day().minutes()));
                        string day;
                        if (now.date() != finish.date()) {
                                /// TRANSLATORS: the %1 in this string will be filled in with a day of the week