extend save-as API to allow for new empty sessions based on current

This commit is contained in:
Paul Davis 2015-05-07 22:35:35 -04:00
parent 0038820f47
commit f082e45298
2 changed files with 27 additions and 15 deletions

View file

@ -400,8 +400,11 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
std::string new_parent_folder; /* parent folder where new session folder will be created */ std::string new_parent_folder; /* parent folder where new session folder will be created */
std::string new_name; /* name of newly saved session */ std::string new_name; /* name of newly saved session */
bool switch_to; /* true if we should be working on newly saved session after save-as; false otherwise */ bool switch_to; /* true if we should be working on newly saved session after save-as; false otherwise */
bool include_media; /* true if the newly saved session should contain references to media */
bool copy_media; /* true if media files (audio, media, etc) should be copied into newly saved session; false otherwise */ bool copy_media; /* true if media files (audio, media, etc) should be copied into newly saved session; false otherwise */
bool copy_external; /* true if external media should be consolidated into the newly saved session; false otherwise */ bool copy_external; /* true if external media should be consolidated into the newly saved session; false otherwise */
std::string final_session_folder_name; /* filled in by * Session::save_as(), provides full path to newly saved session */
/* emitted as we make progress. 3 arguments passed to signal /* emitted as we make progress. 3 arguments passed to signal
* handler: * handler:
@ -422,7 +425,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
}; };
int save_as (SaveAs&); int save_as (SaveAs&);
int save_state (std::string snapshot_name, bool pending = false, bool switch_to_snapshot = false); int save_state (std::string snapshot_name, bool pending = false, bool switch_to_snapshot = false, bool template_only = false);
int restore_state (std::string snapshot_name); int restore_state (std::string snapshot_name);
int save_template (std::string template_name); int save_template (std::string template_name);
int save_history (std::string snapshot_name = ""); int save_history (std::string snapshot_name = "");

View file

@ -658,7 +658,7 @@ Session::remove_state (string snapshot_name)
/** @param snapshot_name Name to save under, without .ardour / .pending prefix */ /** @param snapshot_name Name to save under, without .ardour / .pending prefix */
int int
Session::save_state (string snapshot_name, bool pending, bool switch_to_snapshot) Session::save_state (string snapshot_name, bool pending, bool switch_to_snapshot, bool template_only)
{ {
XMLTree tree; XMLTree tree;
std::string xml_path(_session_dir->root_path()); std::string xml_path(_session_dir->root_path());
@ -696,7 +696,11 @@ Session::save_state (string snapshot_name, bool pending, bool switch_to_snapshot
SessionSaveUnderway (); /* EMIT SIGNAL */ SessionSaveUnderway (); /* EMIT SIGNAL */
tree.set_root (&get_state()); if (template_only) {
tree.set_root (&get_template());
} else {
tree.set_root (&get_state());
}
if (snapshot_name.empty()) { if (snapshot_name.empty()) {
snapshot_name = _current_snapshot_name; snapshot_name = _current_snapshot_name;
@ -4209,16 +4213,19 @@ Session::save_as (SaveAs& saveas)
copy_files (old, newdir); copy_files (old, newdir);
} }
if (saveas.copy_media) { if (saveas.include_media) {
/* only needed if we are copying media, since the if (saveas.copy_media) {
* analysis data refers to media data
*/ /* only needed if we are copying media, since the
* analysis data refers to media data
old = analysis_dir (); */
if (Glib::file_test (old, Glib::FILE_TEST_EXISTS)) {
string newdir = Glib::build_filename (to_dir, "analysis"); old = analysis_dir ();
copy_files (old, newdir); if (Glib::file_test (old, Glib::FILE_TEST_EXISTS)) {
string newdir = Glib::build_filename (to_dir, "analysis");
copy_files (old, newdir);
}
} }
} }
@ -4227,7 +4234,7 @@ Session::save_as (SaveAs& saveas)
_current_snapshot_name = saveas.new_name; _current_snapshot_name = saveas.new_name;
_name = saveas.new_name; _name = saveas.new_name;
if (!saveas.copy_media) { if (saveas.include_media && !saveas.copy_media) {
/* reset search paths of the new session (which we're pretending to be right now) to /* reset search paths of the new session (which we're pretending to be right now) to
include the original session search path, so we can still find all audio. include the original session search path, so we can still find all audio.
@ -4246,7 +4253,7 @@ Session::save_as (SaveAs& saveas)
bool was_dirty = dirty (); bool was_dirty = dirty ();
save_state ("", false, false); save_state ("", false, false, !saveas.include_media);
save_default_options (); save_default_options ();
if (saveas.copy_media && saveas.copy_external) { if (saveas.copy_media && saveas.copy_external) {
@ -4255,6 +4262,8 @@ Session::save_as (SaveAs& saveas)
} }
} }
saveas.final_session_folder_name = _path;
if (!saveas.switch_to) { if (!saveas.switch_to) {
/* switch back to the way things were */ /* switch back to the way things were */