diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2007-09-04 09:01:28 +0000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2007-09-04 09:01:28 +0000 |
commit | 41ba22d2253f682861d4db15d62bdaac971ad99e (patch) | |
tree | 602e3f9ee0ff6883b6587f9247660d62c8134e82 /libs/ardour | |
parent | d07c90b003d7680eb4e0fd91e526ce8b5596de92 (diff) |
Add ARDOUR::TapeFileMatcher class for matching filenames and use it in Session::remove_empty_sounds
git-svn-id: svn://localhost/ardour2/trunk@2410 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/SConscript | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/tape_file_matcher.h | 45 | ||||
-rw-r--r-- | libs/ardour/session.cc | 21 | ||||
-rw-r--r-- | libs/ardour/tape_file_matcher.cc | 62 |
4 files changed, 112 insertions, 17 deletions
diff --git a/libs/ardour/SConscript b/libs/ardour/SConscript index 039c6dd31b..3892af6e9b 100644 --- a/libs/ardour/SConscript +++ b/libs/ardour/SConscript @@ -34,6 +34,7 @@ directory_names.cc filename_extensions.cc filesystem_paths.cc find_session.cc +tape_file_matcher.cc template_utils.cc track.cc audio_diskstream.cc diff --git a/libs/ardour/ardour/tape_file_matcher.h b/libs/ardour/ardour/tape_file_matcher.h new file mode 100644 index 0000000000..59ec18e818 --- /dev/null +++ b/libs/ardour/ardour/tape_file_matcher.h @@ -0,0 +1,45 @@ +/* + Copyright (C) 2007 Tim Mayberry + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef ARDOUR_TAPE_FILE_MATCHER_INCLUDED +#define ARDOUR_TAPE_FILE_MATCHER_INCLUDED + +#include <string> + +#include <regex.h> + +namespace ARDOUR { + +using std::string; + +class TapeFileMatcher +{ +public: + + TapeFileMatcher(); + + bool matches (const string& filename) const; + +private: + + regex_t m_compiled_pattern; +}; + +} // namespace ARDOUR + +#endif diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index d20f0fcf90..eab864623b 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -78,6 +78,7 @@ #include <ardour/region_factory.h> #include <ardour/filename_extensions.h> #include <ardour/session_directory.h> +#include <ardour/tape_file_matcher.h> #ifdef HAVE_LIBLO #include <ardour/osc.h> @@ -3380,27 +3381,13 @@ Session::remove_empty_sounds () get_files_in_directory (_session_dir->sound_path(), audio_filenames); Glib::Mutex::Lock lm (source_lock); - - regex_t compiled_tape_track_pattern; - int err; - if ((err = regcomp (&compiled_tape_track_pattern, "/T[0-9][0-9][0-9][0-9]-", REG_EXTENDED|REG_NOSUB))) { + TapeFileMatcher tape_file_matcher; - char msg[256]; - - regerror (err, &compiled_tape_track_pattern, msg, sizeof (msg)); - - error << string_compose (_("Cannot compile tape track regexp for use (%1)"), msg) << endmsg; - return; - } + remove_if (audio_filenames.begin(), audio_filenames.end(), + sigc::mem_fun (tape_file_matcher, &TapeFileMatcher::matches)); for (vector<string>::iterator i = audio_filenames.begin(); i != audio_filenames.end(); ++i) { - - // never remove files that appear to be a tape track - - if (regexec (&compiled_tape_track_pattern, i->c_str(), 0, 0, 0) == 0) { - continue; - } sys::path audio_file_path (_session_dir->sound_path()); diff --git a/libs/ardour/tape_file_matcher.cc b/libs/ardour/tape_file_matcher.cc new file mode 100644 index 0000000000..835a951f8a --- /dev/null +++ b/libs/ardour/tape_file_matcher.cc @@ -0,0 +1,62 @@ +/* + Copyright (C) 2007 Tim Mayberry + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include <pbd/error.h> + +#include <ardour/tape_file_matcher.h> + +#include "i18n.h" + +namespace { + +const char* const tape_file_regex_string = X_("/T[0-9][0-9][0-9][0-9]-"); + +} + +namespace ARDOUR { + +TapeFileMatcher::TapeFileMatcher() +{ + int err; + + if ((err = regcomp (&m_compiled_pattern, + tape_file_regex_string, REG_EXTENDED|REG_NOSUB))) + { + char msg[256]; + + regerror (err, &m_compiled_pattern, msg, sizeof (msg)); + + PBD::error << string_compose (_("Cannot compile tape track regexp for use (%1)"), msg) << endmsg; + // throw + } + +} + +bool +TapeFileMatcher::matches (const string& audio_filename) const +{ + + if (regexec (&m_compiled_pattern, audio_filename.c_str(), 0, 0, 0) == 0) + { + // matches + return true; + } + return false; +} + +} // namespace ARDOUR |