some more information output to log during save-as, for debugging
[ardour.git] / libs / ardour / session_state.cc
index a4492f0223dd8050b6baa0c6be81be2e22113be4..03acb63f0e0debe3ef368862fe197afe58842ff3 100644 (file)
@@ -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<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;
+                                               }
+                                       }
                                }
                        }
                }
@@ -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<space_and_path>::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<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) {
@@ -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 */