X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fsession_state.cc;h=03acb63f0e0debe3ef368862fe197afe58842ff3;hb=7f902ae1b6e40ddaeab1c7e13095acc16bfa6883;hp=a4492f0223dd8050b6baa0c6be81be2e22113be4;hpb=0038820f473664a9a4fb524537cd846a9e024661;p=ardour.git diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index a4492f0223..03acb63f0e 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; @@ -2785,6 +2789,16 @@ Session::cleanup_sources (CleanupReport& rep) RegionFactory::remove_regions_using_source (i->second); sources.erase (i); + + // also remove source from all_sources + + for (set::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; + } + } } } } @@ -4087,9 +4101,8 @@ Session::save_as (SaveAs& saveas) } 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::const_iterator sd = session_dirs.begin(); sd != session_dirs.end(); ++sd) { @@ -4120,10 +4133,12 @@ Session::save_as (SaveAs& saveas) /* 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"); } @@ -4151,9 +4166,13 @@ Session::save_as (SaveAs& saveas) 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"); @@ -4209,16 +4228,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 +4249,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. @@ -4236,6 +4258,7 @@ Session::save_as (SaveAs& saveas) if (internal_file_cnt) { for (vector::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::iterator s = old_search_path[DataType::MIDI].begin(); s != old_search_path[DataType::MIDI].end(); ++s) { @@ -4246,7 +4269,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 +4278,8 @@ Session::save_as (SaveAs& saveas) } } + saveas.final_session_folder_name = _path; + if (!saveas.switch_to) { /* switch back to the way things were */