summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2012-10-25 01:40:24 +0100
committerCarl Hetherington <cth@carlh.net>2012-10-25 01:40:24 +0100
commit8c3eac75cc3717371dce1132bf10093f5ec3a26f (patch)
tree70611b7b8ac166efd84715faaca7b5fe95b03993 /src/lib
parent5ef9c8005218793b1a02bc6f0ecdc68184b1a603 (diff)
Fix up ze tests.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/film.cc59
-rw-r--r--src/lib/job_manager.cc4
2 files changed, 42 insertions, 21 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index fd8b90d99..e8a23377d 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -907,39 +907,55 @@ Film::set_content (string c)
c = c.substr (_directory.length() + 1);
}
+ string old_content;
+
{
boost::mutex::scoped_lock lm (_state_mutex);
if (c == _content) {
return;
}
+ old_content = _content;
_content = c;
}
-
+
/* Create a temporary decoder so that we can get information
about the content.
*/
-
- shared_ptr<Options> o (new Options ("", "", ""));
- o->out_size = Size (1024, 1024);
-
- shared_ptr<Decoder> d = decoder_factory (shared_from_this(), o, 0, 0);
-
- set_size (d->native_size ());
- set_frames_per_second (d->frames_per_second ());
- set_audio_sample_rate (d->audio_sample_rate ());
- set_has_subtitles (d->has_subtitles ());
- set_audio_streams (d->audio_streams ());
- set_subtitle_streams (d->subtitle_streams ());
- set_audio_stream (audio_streams().empty() ? -1 : 0);
- set_subtitle_stream (subtitle_streams().empty() ? -1 : 0);
-
- signal_changed (CONTENT);
+ try {
+ shared_ptr<Options> o (new Options ("", "", ""));
+ o->out_size = Size (1024, 1024);
+
+ shared_ptr<Decoder> d = decoder_factory (shared_from_this(), o, 0, 0);
+
+ set_size (d->native_size ());
+ set_frames_per_second (d->frames_per_second ());
+ set_audio_sample_rate (d->audio_sample_rate ());
+ set_has_subtitles (d->has_subtitles ());
+ set_audio_streams (d->audio_streams ());
+ set_subtitle_streams (d->subtitle_streams ());
+ set_audio_stream (audio_streams().empty() ? -1 : 0);
+ set_subtitle_stream (subtitle_streams().empty() ? -1 : 0);
+
+ {
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _content = c;
+ }
+
+ signal_changed (CONTENT);
+
+ set_content_digest (md5_digest (content_path ()));
+
+ examine_content ();
- set_content_digest (md5_digest (content_path ()));
+ } catch (...) {
- examine_content ();
+ boost::mutex::scoped_lock lm (_state_mutex);
+ _content = old_content;
+ throw;
+
+ }
}
void
@@ -1336,7 +1352,10 @@ Film::signal_changed (Property p)
boost::mutex::scoped_lock lm (_state_mutex);
_dirty = true;
}
- ui_signaller->emit (boost::bind (boost::ref (Changed), p));
+
+ if (ui_signaller) {
+ ui_signaller->emit (boost::bind (boost::ref (Changed), p));
+ }
}
int
diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc
index 507bf6791..fa02fd370 100644
--- a/src/lib/job_manager.cc
+++ b/src/lib/job_manager.cc
@@ -124,7 +124,9 @@ JobManager::scheduler ()
if (active_jobs != _last_active_jobs) {
_last_active_jobs = active_jobs;
- ui_signaller->emit (boost::bind (boost::ref (ActiveJobsChanged), active_jobs));
+ if (ui_signaller) {
+ ui_signaller->emit (boost::bind (boost::ref (ActiveJobsChanged), active_jobs));
+ }
}
dvdomatic_sleep (1);