Prefer storing playlist-IDs for frozen tracks; but if none is provided then search by name
* no version-check should be necessary because when opening an old session, playlists can be looked-up by discrete names and will be tracked by ID thereafter
This commit is contained in:
parent
8af5f1df02
commit
7b2854b2fb
@ -108,6 +108,7 @@ AudioTrack::state (bool save_template)
|
|||||||
|
|
||||||
freeze_node = new XMLNode (X_("freeze-info"));
|
freeze_node = new XMLNode (X_("freeze-info"));
|
||||||
freeze_node->set_property ("playlist", _freeze_record.playlist->name());
|
freeze_node->set_property ("playlist", _freeze_record.playlist->name());
|
||||||
|
freeze_node->set_property ("playlist-id", _freeze_record.playlist->id().to_s ());
|
||||||
freeze_node->set_property ("state", _freeze_record.state);
|
freeze_node->set_property ("state", _freeze_record.state);
|
||||||
|
|
||||||
for (vector<FreezeRecordProcessorInfo*>::iterator i = _freeze_record.processor_info.begin(); i != _freeze_record.processor_info.end(); ++i) {
|
for (vector<FreezeRecordProcessorInfo*>::iterator i = _freeze_record.processor_info.begin(); i != _freeze_record.processor_info.end(); ++i) {
|
||||||
@ -149,17 +150,20 @@ AudioTrack::set_state_part_two ()
|
|||||||
}
|
}
|
||||||
_freeze_record.processor_info.clear ();
|
_freeze_record.processor_info.clear ();
|
||||||
|
|
||||||
if ((prop = fnode->property (X_("playlist"))) != 0) {
|
boost::shared_ptr<Playlist> freeze_pl;
|
||||||
boost::shared_ptr<Playlist> pl = _session.playlists()->by_name (prop->value());
|
if ((prop = fnode->property (X_("playlist-id"))) != 0) {
|
||||||
if (pl) {
|
freeze_pl = _session.playlists()->by_id (prop->value());
|
||||||
_freeze_record.playlist = boost::dynamic_pointer_cast<AudioPlaylist> (pl);
|
} else if ((prop = fnode->property (X_("playlist"))) != 0) {
|
||||||
|
freeze_pl = _session.playlists()->by_name (prop->value());
|
||||||
|
}
|
||||||
|
if (freeze_pl) {
|
||||||
|
_freeze_record.playlist = boost::dynamic_pointer_cast<AudioPlaylist> (freeze_pl);
|
||||||
_freeze_record.playlist->use();
|
_freeze_record.playlist->use();
|
||||||
} else {
|
} else {
|
||||||
_freeze_record.playlist.reset ();
|
_freeze_record.playlist.reset ();
|
||||||
_freeze_record.state = NoFreeze;
|
_freeze_record.state = NoFreeze;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
fnode->get_property (X_("state"), _freeze_record.state);
|
fnode->get_property (X_("state"), _freeze_record.state);
|
||||||
|
|
||||||
|
@ -227,6 +227,7 @@ MidiTrack::state(bool save_template)
|
|||||||
|
|
||||||
freeze_node = new XMLNode (X_("freeze-info"));
|
freeze_node = new XMLNode (X_("freeze-info"));
|
||||||
freeze_node->set_property ("playlist", _freeze_record.playlist->name());
|
freeze_node->set_property ("playlist", _freeze_record.playlist->name());
|
||||||
|
freeze_node->set_property ("playlist-id", _freeze_record.playlist->id().to_s());
|
||||||
freeze_node->set_property ("state", _freeze_record.state);
|
freeze_node->set_property ("state", _freeze_record.state);
|
||||||
|
|
||||||
for (vector<FreezeRecordProcessorInfo*>::iterator i = _freeze_record.processor_info.begin(); i != _freeze_record.processor_info.end(); ++i) {
|
for (vector<FreezeRecordProcessorInfo*>::iterator i = _freeze_record.processor_info.begin(); i != _freeze_record.processor_info.end(); ++i) {
|
||||||
@ -266,6 +267,7 @@ void
|
|||||||
MidiTrack::set_state_part_two ()
|
MidiTrack::set_state_part_two ()
|
||||||
{
|
{
|
||||||
XMLNode* fnode;
|
XMLNode* fnode;
|
||||||
|
XMLProperty const * prop;
|
||||||
|
|
||||||
/* This is called after all session state has been restored but before
|
/* This is called after all session state has been restored but before
|
||||||
have been made ports and connections are established.
|
have been made ports and connections are established.
|
||||||
@ -284,23 +286,28 @@ MidiTrack::set_state_part_two ()
|
|||||||
}
|
}
|
||||||
_freeze_record.processor_info.clear ();
|
_freeze_record.processor_info.clear ();
|
||||||
|
|
||||||
std::string str;
|
boost::shared_ptr<Playlist> freeze_pl;
|
||||||
if (fnode->get_property (X_("playlist"), str)) {
|
if ((prop = fnode->property (X_("playlist-id"))) != 0) {
|
||||||
boost::shared_ptr<Playlist> pl = _session.playlists()->by_name (str);
|
freeze_pl = _session.playlists()->by_id (prop->value());
|
||||||
if (pl) {
|
} else if ((prop = fnode->property (X_("playlist"))) != 0) {
|
||||||
_freeze_record.playlist = boost::dynamic_pointer_cast<MidiPlaylist> (pl);
|
freeze_pl = _session.playlists()->by_name (prop->value());
|
||||||
|
}
|
||||||
|
if (freeze_pl) {
|
||||||
|
_freeze_record.playlist = boost::dynamic_pointer_cast<MidiPlaylist> (freeze_pl);
|
||||||
|
_freeze_record.playlist->use();
|
||||||
} else {
|
} else {
|
||||||
_freeze_record.playlist.reset();
|
_freeze_record.playlist.reset ();
|
||||||
_freeze_record.state = NoFreeze;
|
_freeze_record.state = NoFreeze;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
fnode->get_property (X_("state"), _freeze_record.state);
|
fnode->get_property (X_("state"), _freeze_record.state);
|
||||||
|
|
||||||
XMLNodeConstIterator citer;
|
XMLNodeConstIterator citer;
|
||||||
XMLNodeList clist = fnode->children();
|
XMLNodeList clist = fnode->children();
|
||||||
|
|
||||||
|
std::string str;
|
||||||
for (citer = clist.begin(); citer != clist.end(); ++citer) {
|
for (citer = clist.begin(); citer != clist.end(); ++citer) {
|
||||||
if ((*citer)->name() != X_("processor")) {
|
if ((*citer)->name() != X_("processor")) {
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
Reference in New Issue
Block a user