summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-05-07 22:35:35 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-05-07 22:35:35 -0400
commitf082e45298b55f58f91c98d687edadd686def624 (patch)
tree3337610caaae21f47e9b13ed1916ab1b7c55320d /libs
parent0038820f473664a9a4fb524537cd846a9e024661 (diff)
extend save-as API to allow for new empty sessions based on current
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/session.h5
-rw-r--r--libs/ardour/session_state.cc37
2 files changed, 27 insertions, 15 deletions
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index b6bbee9d58..8379ed7ae5 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -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 = "");
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index a4492f0223..a387f5d8c0 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -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 */