diff options
-rw-r--r-- | libs/ardour/ardour/directory_names.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/file_source.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/playlist.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/region.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/region_factory.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/session_directory.h | 11 | ||||
-rw-r--r-- | libs/ardour/ardour/session_playlists.h | 1 | ||||
-rw-r--r-- | libs/ardour/directory_names.cc | 3 | ||||
-rw-r--r-- | libs/ardour/file_source.cc | 12 | ||||
-rw-r--r-- | libs/ardour/playlist.cc | 31 | ||||
-rw-r--r-- | libs/ardour/region.cc | 23 | ||||
-rw-r--r-- | libs/ardour/region_factory.cc | 12 | ||||
-rw-r--r-- | libs/ardour/session_directory.cc | 21 | ||||
-rw-r--r-- | libs/ardour/session_playlists.cc | 22 | ||||
-rw-r--r-- | libs/ardour/session_state.cc | 221 |
16 files changed, 260 insertions, 110 deletions
diff --git a/libs/ardour/ardour/directory_names.h b/libs/ardour/ardour/directory_names.h index a5fd6dc754..0d330cd5a5 100644 --- a/libs/ardour/ardour/directory_names.h +++ b/libs/ardour/ardour/directory_names.h @@ -11,8 +11,7 @@ extern const char* const old_sound_dir_name; extern const char* const sound_dir_name; extern const char* const midi_dir_name; extern const char* const midi_patch_dir_name; -extern const char* const dead_sound_dir_name; -extern const char* const dead_midi_dir_name; +extern const char* const dead_dir_name; extern const char* const interchange_dir_name; extern const char* const peak_dir_name; extern const char* const export_dir_name; diff --git a/libs/ardour/ardour/file_source.h b/libs/ardour/ardour/file_source.h index e114f82816..23b8b8f8c8 100644 --- a/libs/ardour/ardour/file_source.h +++ b/libs/ardour/ardour/file_source.h @@ -50,6 +50,9 @@ public: int unstubify (); void stubify (); + bool is_stub () const; + + static bool is_stub_path (const std::string& path); virtual bool safe_file_extension (const std::string& path) const = 0; diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index a9bbd9346b..e21199e642 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -159,6 +159,7 @@ public: bool region_is_shuffle_constrained (boost::shared_ptr<Region>); bool has_region_at (framepos_t const) const; + bool uses_source (boost::shared_ptr<const Source> src) const; framepos_t find_next_transient (framepos_t position, int dir); @@ -204,6 +205,8 @@ public: virtual bool destroy_region (boost::shared_ptr<Region>) = 0; + void sync_all_regions_with_regions (); + /* special case function used by UI selection objects, which have playlists that actually own the regions within them. */ diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index 1b88ff1d69..17ea1362d8 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -176,6 +176,7 @@ class Region bool region_list_equivalent (boost::shared_ptr<const Region>) const; bool source_equivalent (boost::shared_ptr<const Region>) const; bool uses_source (boost::shared_ptr<const Source>) const; + bool uses_source_path (const std::string&) const; std::string source_string () const; diff --git a/libs/ardour/ardour/region_factory.h b/libs/ardour/ardour/region_factory.h index b47ba71cc9..647e1fe7d8 100644 --- a/libs/ardour/ardour/region_factory.h +++ b/libs/ardour/ardour/region_factory.h @@ -80,6 +80,7 @@ public: static boost::shared_ptr<Region> create (SourceList& srcs, const XMLNode&); static void get_regions_using_source (boost::shared_ptr<Source>, std::set<boost::shared_ptr<Region> >& ); + static void remove_regions_using_source (boost::shared_ptr<Source>); static void map_remove (boost::shared_ptr<Region>); static void map_remove_with_equivalents (boost::shared_ptr<Region>); diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index a66b3352fc..bf3df2f0a8 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -173,7 +173,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi std::string sound_dir (bool with_path = true) const; std::string peak_dir () const; - std::string dead_sound_dir () const; + std::string dead_dir () const; std::string automation_dir () const; std::string analysis_dir() const; std::string plugins_dir() const; diff --git a/libs/ardour/ardour/session_directory.h b/libs/ardour/ardour/session_directory.h index bcde4bdf2c..b7de1c8f0f 100644 --- a/libs/ardour/ardour/session_directory.h +++ b/libs/ardour/ardour/session_directory.h @@ -90,18 +90,11 @@ public: const PBD::sys::path peak_path () const; /** - * @return The absolute path to the directory that audio - * files are moved to when they are no longer part of the - * session. - */ - const PBD::sys::path dead_sound_path () const; - - /** - * @return The absolute path to the directory that midi + * @return The absolute path to the directory that source * files are moved to when they are no longer part of the * session. */ - const PBD::sys::path dead_midi_path () const; + const PBD::sys::path dead_path () const; /** * @return The absolute path to the directory that audio diff --git a/libs/ardour/ardour/session_playlists.h b/libs/ardour/ardour/session_playlists.h index 0a20c7b905..fe47d171ad 100644 --- a/libs/ardour/ardour/session_playlists.h +++ b/libs/ardour/ardour/session_playlists.h @@ -57,6 +57,7 @@ public: void unassigned (std::list<boost::shared_ptr<Playlist> > & list); void destroy_region (boost::shared_ptr<Region>); boost::shared_ptr<Crossfade> find_crossfade (const PBD::ID &); + void sync_all_regions_with_regions (); private: friend class Session; diff --git a/libs/ardour/directory_names.cc b/libs/ardour/directory_names.cc index 18d43f7ec8..247dd04978 100644 --- a/libs/ardour/directory_names.cc +++ b/libs/ardour/directory_names.cc @@ -9,8 +9,7 @@ const char* const sound_dir_name = X_("audiofiles"); const char* const midi_dir_name = X_("midifiles"); const char* const midi_patch_dir_name = X_("patchfiles"); const char* const peak_dir_name = X_("peaks"); -const char* const dead_sound_dir_name = X_("dead_sounds"); -const char* const dead_midi_dir_name = X_("dead_midi"); +const char* const dead_dir_name = X_("dead"); const char* const interchange_dir_name = X_("interchange"); const char* const export_dir_name = X_("export"); const char* const templates_dir_name = X_("templates"); diff --git a/libs/ardour/file_source.cc b/libs/ardour/file_source.cc index ae7fbdc38c..bf68e2ec15 100644 --- a/libs/ardour/file_source.cc +++ b/libs/ardour/file_source.cc @@ -537,6 +537,18 @@ FileSource::set_within_session_from_path (const std::string& path) _within_session = _session.path_is_within_session (path); } +bool +FileSource::is_stub_path (const std::string& path) +{ + return path.find (stub_dir_name) != string::npos; +} + +bool +FileSource::is_stub () const +{ + return is_stub_path (_path); +} + int FileSource::unstubify () { diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index cb764e7f40..393cc284fb 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -827,12 +827,8 @@ Playlist::add_region_internal (boost::shared_ptr<Region> region, framepos_t posi regions.insert (upper_bound (regions.begin(), regions.end(), region, cmp), region); all_regions.insert (region); - cerr << "Playlist: region added at " << position << endl; - possibly_splice_unlocked (position, region->length(), region); - cerr << "Playlist: post-splice, region @ " << region->position() << endl; - if (!holding_state ()) { /* layers get assigned from XML state, and are not reset during undo/redo */ relayer (); @@ -1309,7 +1305,6 @@ Playlist::paste (boost::shared_ptr<Playlist> other, framepos_t position, float t */ copy_of_region->set_layer (copy_of_region->layer() + top_layer); - cerr << "DEBUG: add new region at " << pos << endl; add_region_internal (copy_of_region, (*i)->position() + pos); } pos += shift; @@ -1704,6 +1699,18 @@ Playlist::drop_regions () } void +Playlist::sync_all_regions_with_regions () +{ + RegionLock rl (this); + + all_regions.clear (); + + for (RegionList::iterator i = regions.begin(); i != regions.end(); ++i) { + all_regions.insert (*i); + } +} + +void Playlist::clear (bool with_signals) { { @@ -2757,6 +2764,20 @@ Playlist::nudge_after (framepos_t start, framecnt_t distance, bool forwards) } +bool +Playlist::uses_source (boost::shared_ptr<const Source> src) const +{ + RegionLock rlock (const_cast<Playlist*> (this)); + + for (set<boost::shared_ptr<Region> >::iterator r = all_regions.begin(); r != all_regions.end(); ++r) { + if ((*r)->uses_source (src)) { + return true; + } + } + + return false; +} + boost::shared_ptr<Region> Playlist::find_region (const ID& id) const { diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index 873e265225..ff9d31fd2d 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -29,14 +29,15 @@ #include "pbd/enumwriter.h" #include "ardour/debug.h" -#include "ardour/region.h" +#include "ardour/file_source.h" +#include "ardour/filter.h" #include "ardour/playlist.h" +#include "ardour/profile.h" +#include "ardour/region.h" +#include "ardour/region_factory.h" #include "ardour/session.h" #include "ardour/source.h" #include "ardour/tempo.h" -#include "ardour/region_factory.h" -#include "ardour/filter.h" -#include "ardour/profile.h" #include "ardour/utils.h" #include "i18n.h" @@ -1474,6 +1475,20 @@ Region::uses_source (boost::shared_ptr<const Source> source) const return false; } +bool +Region::uses_source_path (const std::string& path) const +{ + for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) { + boost::shared_ptr<const FileSource> fs = boost::dynamic_pointer_cast<const FileSource> (*i); + if (fs) { + if (fs->path() == path) { + return true; + } + } + } + return false; +} + framecnt_t Region::source_length(uint32_t n) const { diff --git a/libs/ardour/region_factory.cc b/libs/ardour/region_factory.cc index 1fd81f9a4b..eba237d0d2 100644 --- a/libs/ardour/region_factory.cc +++ b/libs/ardour/region_factory.cc @@ -549,3 +549,15 @@ RegionFactory::get_regions_using_source (boost::shared_ptr<Source> s, std::set<b } } } + +void +RegionFactory::remove_regions_using_source (boost::shared_ptr<Source> src) +{ + Glib::Mutex::Lock lm (region_map_lock); + + for (RegionMap::iterator i = region_map.begin(); i != region_map.end(); ++i) { + if (i->second->uses_source (src)) { + region_map.erase (i); + } + } +} diff --git a/libs/ardour/session_directory.cc b/libs/ardour/session_directory.cc index a848ceee4b..1948a5a9b9 100644 --- a/libs/ardour/session_directory.cc +++ b/libs/ardour/session_directory.cc @@ -135,15 +135,9 @@ SessionDirectory::peak_path () const } const path -SessionDirectory::dead_sound_path () const +SessionDirectory::dead_path () const { - return m_root_path / dead_sound_dir_name; -} - -const path -SessionDirectory::dead_midi_path () const -{ - return m_root_path / dead_midi_dir_name; + return m_root_path / dead_dir_name; } const path @@ -157,12 +151,11 @@ SessionDirectory::sub_directories () const { vector<path> tmp_paths; - tmp_paths.push_back ( sound_path () ); - tmp_paths.push_back ( midi_path () ); - tmp_paths.push_back ( peak_path () ); - tmp_paths.push_back ( dead_sound_path () ); - tmp_paths.push_back ( dead_midi_path () ); - tmp_paths.push_back ( export_path () ); + tmp_paths.push_back (sound_path ()); + tmp_paths.push_back (midi_path ()); + tmp_paths.push_back (peak_path ()); + tmp_paths.push_back (dead_path ()); + tmp_paths.push_back (export_path ()); return tmp_paths; } diff --git a/libs/ardour/session_playlists.cc b/libs/ardour/session_playlists.cc index 66b4b53b67..1e5a276ad4 100644 --- a/libs/ardour/session_playlists.cc +++ b/libs/ardour/session_playlists.cc @@ -26,6 +26,7 @@ #include "ardour/region.h" #include "ardour/playlist_factory.h" #include "ardour/session.h" +#include "ardour/source.h" #include "i18n.h" using namespace std; @@ -246,18 +247,25 @@ uint32_t SessionPlaylists::source_use_count (boost::shared_ptr<const Source> src) const { uint32_t count = 0; + for (List::const_iterator p = playlists.begin(); p != playlists.end(); ++p) { - for (Playlist::RegionList::const_iterator r = (*p)->region_list().begin(); - r != (*p)->region_list().end(); ++r) { - if ((*r)->uses_source(src)) { - ++count; - break; - } - } + if ((*p)->uses_source (src)) { + ++count; + break; + } } return count; } +void +SessionPlaylists::sync_all_regions_with_regions () +{ + Glib::Mutex::Lock lm (lock); + + for (List::const_iterator p = playlists.begin(); p != playlists.end(); ++p) { + (*p)->sync_all_regions_with_regions (); + } +} void SessionPlaylists::update_after_tempo_map_change () diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index 5333c9165c..82ee766b23 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -56,6 +56,7 @@ #include "midi++/manager.h" #include "pbd/boost_debug.h" +#include "pbd/basename.h" #include "pbd/controllable_descriptor.h" #include "pbd/enumwriter.h" #include "pbd/error.h" @@ -146,7 +147,7 @@ Session::first_stage_init (string fullpath, string snapshot_name) _path = string(buf); - if (_path[_path.length()-1] != '/') { + if (_path[_path.length()-1] != G_DIR_SEPARATOR) { _path += G_DIR_SEPARATOR; } @@ -487,7 +488,7 @@ Session::ensure_subdirs () return -1; } - dir = session_directory().dead_sound_path().to_string(); + dir = session_directory().dead_path().to_string(); if (g_mkdir_with_parents (dir.c_str(), 0755) < 0) { error << string_compose(_("Session: cannot create session dead sounds folder \"%1\" (%2)"), dir, strerror (errno)) << endmsg; @@ -2415,18 +2416,46 @@ Session::commit_reversible_command (Command *cmd) } static bool -accept_all_non_peak_files (const string& path, void */*arg*/) +accept_all_non_stub_audio_files (const string& path, void */*arg*/) +{ + if (!Glib::file_test (path, Glib::FILE_TEST_IS_REGULAR)) { + return false; + } + + if (FileSource::is_stub_path (path)) { + return false; + } + + if (!AudioFileSource::safe_audio_file_extension (path)) { + return false; + } + + return true; +} + +static bool +accept_all_non_stub_midi_files (const string& path, void */*arg*/) { if (!Glib::file_test (path, Glib::FILE_TEST_IS_REGULAR)) { return false; } - return (path.length() > 5 && path.find (peakfile_suffix) != (path.length() - 5)); + if (FileSource::is_stub_path (path)) { + return false; + } + + return ((path.length() > 4 && path.find (".mid") != (path.length() - 4)) || + (path.length() > 4 && path.find (".smf") != (path.length() - 4)) || + (path.length() > 5 && path.find (".midi") != (path.length() - 5))); } static bool accept_all_state_files (const string& path, void */*arg*/) { + if (!Glib::file_test (path, Glib::FILE_TEST_IS_REGULAR)) { + return false; + } + return (path.length() > 7 && path.find (".ardour") == (path.length() - 7)); } @@ -2572,10 +2601,12 @@ Session::cleanup_sources (CleanupReport& rep) vector<boost::shared_ptr<Source> > dead_sources; PathScanner scanner; - string sound_path; + string audio_path; + string midi_path; vector<space_and_path>::iterator i; vector<space_and_path>::iterator nexti; - vector<string*>* soundfiles; + vector<string*>* candidates; + vector<string*>* candidates2; vector<string> unused; set<string> all_sources; bool used; @@ -2584,14 +2615,19 @@ Session::cleanup_sources (CleanupReport& rep) _state_of_the_state = (StateOfTheState) (_state_of_the_state | InCleanup); - /* step 1: consider deleting all unused playlists */ + /* consider deleting all unused playlists */ if (playlists->maybe_delete_unused (boost::bind (Session::ask_about_playlist_deletion, _1))) { ret = 0; goto out; } - /* step 2: find all un-used sources */ + /* sync the "all regions" property of each playlist with its current state + */ + + playlists->sync_all_regions_with_regions (); + + /* find all un-used sources */ rep.paths.clear (); rep.space = 0; @@ -2615,7 +2651,7 @@ Session::cleanup_sources (CleanupReport& rep) i = tmp; } - /* build a list of all the possible sound directories for the session */ + /* build a list of all the possible audio directories for the session */ for (i = session_dirs.begin(); i != session_dirs.end(); ) { @@ -2623,25 +2659,49 @@ Session::cleanup_sources (CleanupReport& rep) ++nexti; SessionDirectory sdir ((*i).path); - sound_path += sdir.sound_path().to_string(); + audio_path += sdir.sound_path().to_string(); if (nexti != session_dirs.end()) { - sound_path += ':'; + audio_path += ':'; } i = nexti; } - /* now do the same thing for the files that ended up in the sounds dir(s) - but are not referenced as sources in any snapshot. - */ - soundfiles = scanner (sound_path, accept_all_non_peak_files, (void *) 0, false, true); + /* build a list of all the possible midi directories for the session */ - if (soundfiles == 0) { - return 0; + for (i = session_dirs.begin(); i != session_dirs.end(); ) { + + nexti = i; + ++nexti; + + SessionDirectory sdir ((*i).path); + midi_path += sdir.midi_path().to_string(); + + if (nexti != session_dirs.end()) { + midi_path += ':'; + } + + i = nexti; } + candidates = scanner (audio_path, accept_all_non_stub_audio_files, (void *) 0, true, true); + candidates2 = scanner (midi_path, accept_all_non_stub_midi_files, (void *) 0, true, true); + + /* merge them */ + + if (candidates) { + if (candidates2) { + for (vector<string*>::iterator i = candidates2->begin(); i != candidates2->end(); ++i) { + candidates->push_back (*i); + } + delete candidates2; + } + } else { + candidates = candidates2; // might still be null + } + /* find all sources, but don't use this snapshot because the state file on disk still references sources we may have already dropped. @@ -2652,61 +2712,82 @@ Session::cleanup_sources (CleanupReport& rep) /* add our current source list */ - for (SourceMap::iterator i = sources.begin(); i != sources.end(); ++i) { + for (SourceMap::iterator i = sources.begin(); i != sources.end(); ) { boost::shared_ptr<FileSource> fs; + SourceMap::iterator tmp = i; + ++tmp; if ((fs = boost::dynamic_pointer_cast<FileSource> (i->second)) != 0) { - all_sources.insert (fs->path()); + if (!fs->is_stub()) { + if (playlists->source_use_count (fs) != 0) { + all_sources.insert (fs->path()); + } else { + + /* we might not remove this source from disk, because it may be used + by other snapshots, but its not being used in this version + so lets get rid of it now, along with any representative regions + in the region list. + */ + + cerr << "Source " << i->second->name() << "ID " << i->second->id() << " not used, remove from source list and also all regions\n"; + + RegionFactory::remove_regions_using_source (i->second); + sources.erase (i); + } + } } + + i = tmp; } char tmppath1[PATH_MAX+1]; char tmppath2[PATH_MAX+1]; - for (vector<string*>::iterator x = soundfiles->begin(); x != soundfiles->end(); ++x) { - - used = false; - spath = **x; - - for (set<string>::iterator i = all_sources.begin(); i != all_sources.end(); ++i) { + if (candidates) { + for (vector<string*>::iterator x = candidates->begin(); x != candidates->end(); ++x) { + + used = false; + spath = **x; + + for (set<string>::iterator i = all_sources.begin(); i != all_sources.end(); ++i) { + + if (realpath(spath.c_str(), tmppath1) == 0) { + error << string_compose (_("Cannot expand path %1 (%2)"), + spath, strerror (errno)) << endmsg; + continue; + } + + if (realpath((*i).c_str(), tmppath2) == 0) { + error << string_compose (_("Cannot expand path %1 (%2)"), + (*i), strerror (errno)) << endmsg; + continue; + } - if (realpath(spath.c_str(), tmppath1) == 0) { - error << string_compose (_("Cannot expand path %1 (%2)"), - spath, strerror (errno)) << endmsg; - continue; + if (strcmp(tmppath1, tmppath2) == 0) { + used = true; + break; + } } - - if (realpath((*i).c_str(), tmppath2) == 0) { - error << string_compose (_("Cannot expand path %1 (%2)"), - (*i), strerror (errno)) << endmsg; - continue; + + if (!used) { + unused.push_back (spath); } - if (strcmp(tmppath1, tmppath2) == 0) { - used = true; - break; - } - } + delete *x; + } - if (!used) { - unused.push_back (spath); - } - } + delete candidates; + } - /* now try to move all unused files into the "dead_sounds" directory(ies) */ + /* now try to move all unused files into the "dead" directory(ies) */ for (vector<string>::iterator x = unused.begin(); x != unused.end(); ++x) { struct stat statbuf; - rep.paths.push_back (*x); - if (stat ((*x).c_str(), &statbuf) == 0) { - rep.space += statbuf.st_size; - } - string newpath; /* don't move the file across filesystems, just - stick it in the `dead_sound_dir_name' directory + stick it in the `dead_dir_name' directory on whichever filesystem it was already on. */ @@ -2721,16 +2802,16 @@ Session::cleanup_sources (CleanupReport& rep) /* new school, go up 4 levels */ - newpath = Glib::path_get_dirname (*x); // "audiofiles" + newpath = Glib::path_get_dirname (*x); // "audiofiles" or "midifiles" newpath = Glib::path_get_dirname (newpath); // "session-name" newpath = Glib::path_get_dirname (newpath); // "interchange" newpath = Glib::path_get_dirname (newpath); // "session-dir" } - newpath = Glib::build_filename (newpath, dead_sound_dir_name); + newpath = Glib::build_filename (newpath, dead_dir_name); if (g_mkdir_with_parents (newpath.c_str(), 0755) < 0) { - error << string_compose(_("Session: cannot create session peakfile folder \"%1\" (%2)"), newpath, strerror (errno)) << endmsg; + error << string_compose(_("Session: cannot create dead file folder \"%1\" (%2)"), newpath, strerror (errno)) << endmsg; return -1; } @@ -2747,7 +2828,7 @@ Session::cleanup_sources (CleanupReport& rep) snprintf (buf, sizeof (buf), "%s.%d", newpath.c_str(), version); newpath_v = buf; - while (access (newpath_v.c_str(), F_OK) == 0 && version < 999) { + while (Glib::file_test (newpath_v.c_str(), Glib::FILE_TEST_EXISTS) && version < 999) { snprintf (buf, sizeof (buf), "%s.%d", newpath.c_str(), ++version); newpath_v = buf; } @@ -2766,8 +2847,10 @@ Session::cleanup_sources (CleanupReport& rep) } + stat ((*x).c_str(), &statbuf); + if (::rename ((*x).c_str(), newpath.c_str()) != 0) { - error << string_compose (_("cannot rename audio file source from %1 to %2 (%3)"), + error << string_compose (_("cannot rename unused file source from %1 to %2 (%3)"), (*x), newpath, strerror (errno)) << endmsg; goto out; @@ -2776,22 +2859,27 @@ Session::cleanup_sources (CleanupReport& rep) /* see if there an easy to find peakfile for this file, and remove it. */ - string peakpath = (*x).substr (0, (*x).find_last_of ('.')); - peakpath += peakfile_suffix; - - if (access (peakpath.c_str(), W_OK) == 0) { + string base = basename_nosuffix (*x); + base += "%A"; /* this is what we add for the channel suffix of all native files, + or for the first channel of embedded files. it will miss + some peakfiles for other channels + */ + string peakpath = peak_path (base); + + if (Glib::file_test (peakpath.c_str(), Glib::FILE_TEST_EXISTS)) { if (::unlink (peakpath.c_str()) != 0) { error << string_compose (_("cannot remove peakfile %1 for %2 (%3)"), - peakpath, _path, strerror (errno)) + peakpath, _path, strerror (errno)) << endmsg; /* try to back out */ rename (newpath.c_str(), _path.c_str()); goto out; } } - } - ret = 0; + rep.paths.push_back (*x); + rep.space += statbuf.st_size; + } /* dump the history list */ @@ -2802,6 +2890,7 @@ Session::cleanup_sources (CleanupReport& rep) */ save_state (""); + ret = 0; out: _state_of_the_state = (StateOfTheState) (_state_of_the_state & ~InCleanup); @@ -2815,17 +2904,17 @@ Session::cleanup_trash_sources (CleanupReport& rep) // FIXME: needs adaptation for MIDI vector<space_and_path>::iterator i; - string dead_sound_dir; + string dead_dir; rep.paths.clear (); rep.space = 0; for (i = session_dirs.begin(); i != session_dirs.end(); ++i) { - dead_sound_dir = (*i).path; - dead_sound_dir += dead_sound_dir_name; + dead_dir = (*i).path; + dead_dir += dead_dir_name; - clear_directory (dead_sound_dir, &rep.space, &rep.paths); + clear_directory (dead_dir, &rep.space, &rep.paths); } return 0; |