summaryrefslogtreecommitdiff
path: root/libs/ardour/playlist_factory.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-06-22 20:06:10 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-06-22 20:06:10 +0000
commit9687e8a6673f61c2b7167cb5c848e2adc5d82238 (patch)
tree1994e9d3d3db156418da5bef938851cf54702724 /libs/ardour/playlist_factory.cc
parent2801e91fe2f43bf83d0f657d1978fe00bf349fb4 (diff)
second half of "bomb out if playlist construction from XML fails"
git-svn-id: svn://localhost/ardour2/branches/3.0@9759 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/playlist_factory.cc')
-rw-r--r--libs/ardour/playlist_factory.cc105
1 files changed, 62 insertions, 43 deletions
diff --git a/libs/ardour/playlist_factory.cc b/libs/ardour/playlist_factory.cc
index f7556cc961..5c3d93a0a0 100644
--- a/libs/ardour/playlist_factory.cc
+++ b/libs/ardour/playlist_factory.cc
@@ -40,18 +40,23 @@ PlaylistFactory::create (Session& s, const XMLNode& node, bool hidden, bool unus
boost::shared_ptr<Playlist> pl;
- if (!type || type->value() == "audio") {
- pl = boost::shared_ptr<Playlist> (new AudioPlaylist (s, node, hidden));
- } else if (type->value() == "midi") {
- pl = boost::shared_ptr<Playlist> (new MidiPlaylist (s, node, hidden));
- }
-
- pl->set_region_ownership ();
-
- if (pl && !hidden) {
- PlaylistCreated (pl, unused);
+ try {
+ if (!type || type->value() == "audio") {
+ pl = boost::shared_ptr<Playlist> (new AudioPlaylist (s, node, hidden));
+ } else if (type->value() == "midi") {
+ pl = boost::shared_ptr<Playlist> (new MidiPlaylist (s, node, hidden));
+ }
+
+ pl->set_region_ownership ();
+
+ if (pl && !hidden) {
+ PlaylistCreated (pl, unused);
+ }
+ return pl;
+
+ } catch (...) {
+ return boost::shared_ptr<Playlist> ();
}
- return pl;
}
boost::shared_ptr<Playlist>
@@ -59,16 +64,20 @@ PlaylistFactory::create (DataType type, Session& s, string name, bool hidden)
{
boost::shared_ptr<Playlist> pl;
- if (type == DataType::AUDIO)
- pl = boost::shared_ptr<Playlist> (new AudioPlaylist (s, name, hidden));
- else if (type == DataType::MIDI)
- pl = boost::shared_ptr<Playlist> (new MidiPlaylist (s, name, hidden));
-
- if (pl && !hidden) {
- PlaylistCreated (pl, false);
+ try {
+ if (type == DataType::AUDIO)
+ pl = boost::shared_ptr<Playlist> (new AudioPlaylist (s, name, hidden));
+ else if (type == DataType::MIDI)
+ pl = boost::shared_ptr<Playlist> (new MidiPlaylist (s, name, hidden));
+
+ if (pl && !hidden) {
+ PlaylistCreated (pl, false);
+ }
+
+ return pl;
+ } catch (...) {
+ return boost::shared_ptr<Playlist> ();
}
-
- return pl;
}
boost::shared_ptr<Playlist>
@@ -77,20 +86,26 @@ PlaylistFactory::create (boost::shared_ptr<const Playlist> old, string name, boo
boost::shared_ptr<Playlist> pl;
boost::shared_ptr<const AudioPlaylist> apl;
boost::shared_ptr<const MidiPlaylist> mpl;
-
- if ((apl = boost::dynamic_pointer_cast<const AudioPlaylist> (old)) != 0) {
- pl = boost::shared_ptr<Playlist> (new AudioPlaylist (apl, name, hidden));
- pl->set_region_ownership ();
- } else if ((mpl = boost::dynamic_pointer_cast<const MidiPlaylist> (old)) != 0) {
- pl = boost::shared_ptr<Playlist> (new MidiPlaylist (mpl, name, hidden));
- pl->set_region_ownership ();
+
+ try {
+
+ if ((apl = boost::dynamic_pointer_cast<const AudioPlaylist> (old)) != 0) {
+ pl = boost::shared_ptr<Playlist> (new AudioPlaylist (apl, name, hidden));
+ pl->set_region_ownership ();
+ } else if ((mpl = boost::dynamic_pointer_cast<const MidiPlaylist> (old)) != 0) {
+ pl = boost::shared_ptr<Playlist> (new MidiPlaylist (mpl, name, hidden));
+ pl->set_region_ownership ();
+ }
+
+ if (pl && !hidden) {
+ PlaylistCreated (pl, false);
+ }
+
+ return pl;
+ } catch (...) {
+ return boost::shared_ptr<Playlist> ();
}
-
- if (pl && !hidden) {
- PlaylistCreated (pl, false);
- }
-
- return pl;
+
}
boost::shared_ptr<Playlist>
@@ -100,15 +115,19 @@ PlaylistFactory::create (boost::shared_ptr<const Playlist> old, framepos_t start
boost::shared_ptr<const AudioPlaylist> apl;
boost::shared_ptr<const MidiPlaylist> mpl;
- if ((apl = boost::dynamic_pointer_cast<const AudioPlaylist> (old)) != 0) {
- pl = boost::shared_ptr<Playlist> (new AudioPlaylist (apl, start, cnt, name, hidden));
- pl->set_region_ownership ();
- } else if ((mpl = boost::dynamic_pointer_cast<const MidiPlaylist> (old)) != 0) {
- pl = boost::shared_ptr<Playlist> (new MidiPlaylist (mpl, start, cnt, name, hidden));
- pl->set_region_ownership ();
+ try {
+ if ((apl = boost::dynamic_pointer_cast<const AudioPlaylist> (old)) != 0) {
+ pl = boost::shared_ptr<Playlist> (new AudioPlaylist (apl, start, cnt, name, hidden));
+ pl->set_region_ownership ();
+ } else if ((mpl = boost::dynamic_pointer_cast<const MidiPlaylist> (old)) != 0) {
+ pl = boost::shared_ptr<Playlist> (new MidiPlaylist (mpl, start, cnt, name, hidden));
+ pl->set_region_ownership ();
+ }
+
+ /* this factory method does NOT notify others */
+
+ return pl;
+ } catch (...) {
+ return boost::shared_ptr<Playlist> ();
}
-
- /* this factory method does NOT notify others */
-
- return pl;
}