/** @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());
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;
RegionFactory::remove_regions_using_source (i->second);
sources.erase (i);
+
+ // also remove source from all_sources
+
+ for (set<string>::iterator j = all_sources.begin(); j != all_sources.end(); ++j) {
+ spath = Glib::path_get_basename (*j);
+ if ( spath == i->second->name () ) {
+ all_sources.erase (j);
+ break;
+ }
+ }
}
}
}
}
try {
- /* copy all media files. Find each location in
- * session_dirs, and copy files from there to
- * target.
+ /* copy all relevant files. Find each location in session_dirs,
+ * and copy files from there to target.
*/
for (vector<space_and_path>::const_iterator sd = session_dirs.begin(); sd != session_dirs.end(); ++sd) {
/* media file */
- if (saveas.copy_media) {
+ if (saveas.include_media && saveas.copy_media) {
string to = make_new_media_path (*i, to_dir, new_folder);
+ info << "media file copying from " << from << " to " << to << endmsg;
+
if (!copy_file (from, to)) {
throw Glib::FileError (Glib::FileError::IO_ERROR, "copy failed");
}
if (do_copy) {
string to = Glib::build_filename (to_dir, (*i).substr (prefix_len));
+ info << "attempting to make directory/folder " << to << endmsg;
+
if (g_mkdir_with_parents (Glib::path_get_dirname (to).c_str(), 0755)) {
throw Glib::FileError (Glib::FileError::IO_ERROR, "cannot create required directory");
}
+
+ info << "attempting to copy " << from << " to " << to << endmsg;
if (!copy_file (from, to)) {
throw Glib::FileError (Glib::FileError::IO_ERROR, "copy failed");
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);
+ }
}
}
_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.
if (internal_file_cnt) {
for (vector<string>::iterator s = old_search_path[DataType::AUDIO].begin(); s != old_search_path[DataType::AUDIO].end(); ++s) {
ensure_search_path_includes (*s, DataType::AUDIO);
+ cerr << "be sure to include " << *s << " for audio" << endl;
}
for (vector<string>::iterator s = old_search_path[DataType::MIDI].begin(); s != old_search_path[DataType::MIDI].end(); ++s) {
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) {
}
}
+ saveas.final_session_folder_name = _path;
+
if (!saveas.switch_to) {
/* switch back to the way things were */