summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorSakari Bergen <sakari.bergen@beatwaves.net>2008-11-29 20:16:16 +0000
committerSakari Bergen <sakari.bergen@beatwaves.net>2008-11-29 20:16:16 +0000
commita8cc30be5fe817d120d23ba72e6d75839085f81b (patch)
tree1aea260f517ddcc96f1357328dbc68f21ebca041 /libs
parent4af523ca38eb99e910d8de93867dde069105f1d1 (diff)
First revision with working track import
git-svn-id: svn://localhost/ardour2/branches/3.0@4270 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/audio_playlist_importer.h1
-rw-r--r--libs/ardour/ardour/audio_region_importer.h1
-rw-r--r--libs/ardour/ardour/audio_track_importer.h1
-rw-r--r--libs/ardour/ardour/element_import_handler.h5
-rw-r--r--libs/ardour/ardour/session.h2
-rw-r--r--libs/ardour/audio_playlist_importer.cc5
-rw-r--r--libs/ardour/audio_region_importer.cc4
-rw-r--r--libs/ardour/audio_track_importer.cc46
-rw-r--r--libs/ardour/element_import_handler.cc9
-rw-r--r--libs/ardour/element_importer.cc1
10 files changed, 60 insertions, 15 deletions
diff --git a/libs/ardour/ardour/audio_playlist_importer.h b/libs/ardour/ardour/audio_playlist_importer.h
index b94523128f..3a54367495 100644
--- a/libs/ardour/ardour/audio_playlist_importer.h
+++ b/libs/ardour/ardour/audio_playlist_importer.h
@@ -72,6 +72,7 @@ class AudioPlaylistImporter : public ElementImporter
public:
AudioPlaylistImporter (XMLTree const & source, Session & session, AudioPlaylistImportHandler & handler, XMLNode const & node);
AudioPlaylistImporter (AudioPlaylistImporter const & other);
+ ~AudioPlaylistImporter ();
string get_info () const;
diff --git a/libs/ardour/ardour/audio_region_importer.h b/libs/ardour/ardour/audio_region_importer.h
index 8123f89e42..c968fc8129 100644
--- a/libs/ardour/ardour/audio_region_importer.h
+++ b/libs/ardour/ardour/audio_region_importer.h
@@ -72,6 +72,7 @@ class AudioRegionImporter : public ElementImporter
{
public:
AudioRegionImporter (XMLTree const & source, Session & session, AudioRegionImportHandler & handler, XMLNode const & node);
+ ~AudioRegionImporter ();
// Interface implementation
string get_info () const;
diff --git a/libs/ardour/ardour/audio_track_importer.h b/libs/ardour/ardour/audio_track_importer.h
index 6beee4a408..87b3b25177 100644
--- a/libs/ardour/ardour/audio_track_importer.h
+++ b/libs/ardour/ardour/audio_track_importer.h
@@ -54,6 +54,7 @@ class AudioTrackImporter : public ElementImporter
AudioTrackImportHandler & track_handler,
XMLNode const & node,
AudioPlaylistImportHandler & pl_handler);
+ ~AudioTrackImporter ();
string get_info () const;
diff --git a/libs/ardour/ardour/element_import_handler.h b/libs/ardour/ardour/element_import_handler.h
index 9393c31559..f56d3ce76d 100644
--- a/libs/ardour/ardour/element_import_handler.h
+++ b/libs/ardour/ardour/element_import_handler.h
@@ -23,6 +23,7 @@
#include <string>
#include <list>
+#include <set>
#include <boost/shared_ptr.hpp>
@@ -101,8 +102,8 @@ class ElementImportHandler
static bool _errors;
private:
- /// List of names for duplicate checking
- std::list<string> names;
+ /// Set of names for duplicate checking
+ std::set<string> names;
};
} // namespace ARDOUR
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 14e8c6d841..a5245b73f8 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -307,6 +307,7 @@ class Session : public PBD::StatefulDestructible
typedef std::list<boost::shared_ptr<Diskstream> > DiskstreamList;
typedef std::list<boost::shared_ptr<Route> > RouteList;
+ int load_routes (const XMLNode&);
boost::shared_ptr<RouteList> get_routes() const {
return routes.reader ();
}
@@ -1446,7 +1447,6 @@ class Session : public PBD::StatefulDestructible
void add_routes (RouteList&, bool save);
uint32_t destructive_index;
- int load_routes (const XMLNode&);
boost::shared_ptr<Route> XMLRouteFactory (const XMLNode&);
/* mixer stuff */
diff --git a/libs/ardour/audio_playlist_importer.cc b/libs/ardour/audio_playlist_importer.cc
index 0318a4ed54..50aa6f2225 100644
--- a/libs/ardour/audio_playlist_importer.cc
+++ b/libs/ardour/audio_playlist_importer.cc
@@ -134,6 +134,11 @@ AudioPlaylistImporter::AudioPlaylistImporter (AudioPlaylistImporter const & othe
populate_region_list ();
}
+AudioPlaylistImporter::~AudioPlaylistImporter ()
+{
+
+}
+
string
AudioPlaylistImporter::get_info () const
{
diff --git a/libs/ardour/audio_region_importer.cc b/libs/ardour/audio_region_importer.cc
index 142b96bcad..714446bfe2 100644
--- a/libs/ardour/audio_region_importer.cc
+++ b/libs/ardour/audio_region_importer.cc
@@ -118,6 +118,10 @@ AudioRegionImporter::AudioRegionImporter (XMLTree const & source, Session & sess
handler.register_id (old_id, id);
}
+AudioRegionImporter::~AudioRegionImporter ()
+{
+}
+
string
AudioRegionImporter::get_info () const
{
diff --git a/libs/ardour/audio_track_importer.cc b/libs/ardour/audio_track_importer.cc
index 016f133bb0..0f17323dc6 100644
--- a/libs/ardour/audio_track_importer.cc
+++ b/libs/ardour/audio_track_importer.cc
@@ -21,6 +21,7 @@
#include <ardour/audio_track_importer.h>
#include <ardour/audio_playlist_importer.h>
+#include <ardour/audio_diskstream.h>
#include <ardour/session.h>
#include <pbd/failed_constructor.h>
@@ -70,7 +71,7 @@ AudioTrackImportHandler::get_info () const
AudioTrackImporter::AudioTrackImporter (XMLTree const & source,
Session & session,
- AudioTrackImportHandler & handler,
+ AudioTrackImportHandler & track_handler,
XMLNode const & node,
AudioPlaylistImportHandler & pl_handler) :
ElementImporter (source, session),
@@ -102,6 +103,11 @@ AudioTrackImporter::AudioTrackImporter (XMLTree const & source,
xml_track.remove_nodes_and_delete ("extra");
}
+AudioTrackImporter::~AudioTrackImporter ()
+{
+ playlists.clear ();
+}
+
bool
AudioTrackImporter::parse_route_xml ()
{
@@ -148,6 +154,10 @@ AudioTrackImporter::parse_io ()
return false;
}
+ // TODO
+ io->remove_property ("inputs");
+ io->remove_property ("outputs");
+
XMLPropertyList const & props = io->properties();
for (XMLPropertyList::const_iterator it = props.begin(); it != props.end(); ++it) {
@@ -232,7 +242,6 @@ AudioTrackImporter::_prepare_move ()
xml_track.child ("IO")->property ("name")->set_value (name);
track_handler.add_name (name);
- // TODO
return true;
}
@@ -241,13 +250,40 @@ AudioTrackImporter::_cancel_move ()
{
track_handler.remove_name (name);
playlists.clear ();
- // TODO
}
void
AudioTrackImporter::_move ()
-{
- // TODO
+{
+ /* Add diskstream */
+
+ boost::shared_ptr<XMLSharedNodeList> ds_node_list;
+ string xpath = "/Session/DiskStreams/AudioDiskstream[@id='" + old_ds_id.to_s() + "']";
+ ds_node_list = source.root()->find (xpath);
+
+ if (ds_node_list->size() != 1) {
+ error << string_compose (_("Error Importing Audio track %1"), name) << endmsg;
+ return;
+ }
+
+ boost::shared_ptr<XMLNode> ds_node = ds_node_list->front();
+ ds_node->property ("id")->set_value (new_ds_id.to_s());
+
+ boost::shared_ptr<Diskstream> new_ds (new AudioDiskstream (session, *ds_node));
+ new_ds->set_name (name);
+ session.add_diskstream (new_ds);
+
+ /* Import playlists */
+
+ for (PlaylistList::const_iterator it = playlists.begin(); it != playlists.end(); ++it) {
+ (*it)->move ();
+ }
+
+ /* Import track */
+
+ XMLNode routes ("Routes");
+ routes.add_child_copy (xml_track);
+ session.load_routes (routes);
}
bool
diff --git a/libs/ardour/element_import_handler.cc b/libs/ardour/element_import_handler.cc
index 013dd3fe44..3169da436e 100644
--- a/libs/ardour/element_import_handler.cc
+++ b/libs/ardour/element_import_handler.cc
@@ -36,20 +36,17 @@ ElementImportHandler::~ElementImportHandler ()
bool
ElementImportHandler::check_name (const string & name) const
{
- return std::find (names.begin(), names.end(), name) == names.end();
+ return !names.count (name);
}
void
ElementImportHandler::add_name (string name)
{
- names.push_back (name);
+ names.insert (name);
}
void
ElementImportHandler::remove_name (const string & name)
{
- std::list<string>::iterator it = std::find (names.begin(), names.end(), name);
- if (it != names.end()) {
- names.erase(it);
- }
+ names.erase (name);
}
diff --git a/libs/ardour/element_importer.cc b/libs/ardour/element_importer.cc
index af8dd770da..580c2876ad 100644
--- a/libs/ardour/element_importer.cc
+++ b/libs/ardour/element_importer.cc
@@ -51,7 +51,6 @@ ElementImporter::ElementImporter (XMLTree const & source, ARDOUR::Session & sess
ElementImporter::~ElementImporter ()
{
- cancel_move ();
}
void