/*
Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
- This program is free software; you can redistribute it and/or modify
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
- This program is distributed in the hope that it will be useful,
+ DCP-o-matic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
*/
using boost::function;
#define LOG_ERROR_NC(...) _film->log()->log (__VA_ARGS__, LogEntry::TYPE_ERROR);
+#define LOG_GENERAL(...) _film->log()->log (String::compose (__VA_ARGS__), LogEntry::TYPE_GENERAL);
/** @param film Associated film, or 0 */
Job::Job (shared_ptr<const Film> film)
{
if (_thread) {
_thread->interrupt ();
- DCPOMATIC_ASSERT (_thread->joinable ());
- _thread->join ();
+ /* We can't use DCPOMATIC_ASSERT here as it may throw an exception */
+ if (_thread->joinable ()) {
+ try {
+ _thread->join ();
+ } catch (...) {
+ /* Too late to do anything about this */
+ }
+ }
}
delete _thread;
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())
+ 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()
+ )
);
set_progress (1);
if (e.code() == boost::system::errc::no_such_file_or_directory) {
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."), 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()
+ )
);
} else {
set_error (
void
Job::set_progress (float p, bool force)
{
- if (!force && fabs (p - progress().get_value_or(0)) < 0.01) {
- /* Calm excessive progress reporting */
- return;
+ if (!force) {
+ /* Check for excessively frequent progress reporting */
+ boost::mutex::scoped_lock lm (_progress_mutex);
+ struct timeval now;
+ gettimeofday (&now, 0);
+ if (_last_progress_update && _last_progress_update->tv_sec > 0) {
+ double const elapsed = (now.tv_sec + now.tv_usec / 1000000.0)
+ - (_last_progress_update->tv_sec + _last_progress_update->tv_usec / 1000000.0);
+ if (elapsed < 0.5) {
+ return;
+ }
+ }
+ _last_progress_update = now;
}
set_progress_common (p);
{
{
boost::mutex::scoped_lock lm (_progress_mutex);
+ LOG_GENERAL ("Sub-job %1 starting", n);
_sub_name = n;
}