extend save-as API to allow for new empty sessions based on current
This commit is contained in:
parent
0038820f47
commit
f082e45298
@ -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_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 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_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
|
||||
* handler:
|
||||
@ -422,7 +425,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
|
||||
};
|
||||
|
||||
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 save_template (std::string template_name);
|
||||
int save_history (std::string snapshot_name = "");
|
||||
|
@ -658,7 +658,7 @@ Session::remove_state (string snapshot_name)
|
||||
|
||||
/** @param snapshot_name Name to save under, without .ardour / .pending prefix */
|
||||
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;
|
||||
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 */
|
||||
|
||||
tree.set_root (&get_state());
|
||||
if (template_only) {
|
||||
tree.set_root (&get_template());
|
||||
} else {
|
||||
tree.set_root (&get_state());
|
||||
}
|
||||
|
||||
if (snapshot_name.empty()) {
|
||||
snapshot_name = _current_snapshot_name;
|
||||
@ -4209,16 +4213,19 @@ Session::save_as (SaveAs& saveas)
|
||||
copy_files (old, newdir);
|
||||
}
|
||||
|
||||
if (saveas.copy_media) {
|
||||
|
||||
/* 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");
|
||||
copy_files (old, newdir);
|
||||
if (saveas.include_media) {
|
||||
|
||||
if (saveas.copy_media) {
|
||||
|
||||
/* 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");
|
||||
copy_files (old, newdir);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -4227,7 +4234,7 @@ Session::save_as (SaveAs& saveas)
|
||||
_current_snapshot_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
|
||||
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 ();
|
||||
|
||||
save_state ("", false, false);
|
||||
save_state ("", false, false, !saveas.include_media);
|
||||
save_default_options ();
|
||||
|
||||
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) {
|
||||
|
||||
/* switch back to the way things were */
|
||||
|
Loading…
Reference in New Issue
Block a user