summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorTaybin Rutkin <taybin@taybin.com>2007-01-05 04:24:23 +0000
committerTaybin Rutkin <taybin@taybin.com>2007-01-05 04:24:23 +0000
commitd631a8d89fd0a4b72a84c415ca2bdb4c2ca99bbc (patch)
tree85bedee3c8a30a2aecb452cbf55be1b23ab09a52 /libs
parent143e8eba1dce4d8c68e01c786e2d51075d4a58e2 (diff)
First pass of sfdb tag searching. Not functional, but very very close.
git-svn-id: svn://localhost/ardour2/trunk@1272 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/audio_library.h5
-rw-r--r--libs/ardour/ardour/audiofilesource.h2
-rw-r--r--libs/ardour/audio_library.cc35
-rw-r--r--libs/ardour/audiofilesource.cc23
-rw-r--r--libs/pbd/pbd/tokenizer.h30
5 files changed, 62 insertions, 33 deletions
diff --git a/libs/ardour/ardour/audio_library.h b/libs/ardour/ardour/audio_library.h
index 4edf6d94e4..8c01f0e3dc 100644
--- a/libs/ardour/ardour/audio_library.h
+++ b/libs/ardour/ardour/audio_library.h
@@ -46,9 +46,8 @@ class AudioLibrary
private:
string src;
- string path2uri (string);
-
- bool safe_file_extension (string);
+ string path2uri (string path);
+ string uri2path (string uri);
};
extern AudioLibrary* Library;
diff --git a/libs/ardour/ardour/audiofilesource.h b/libs/ardour/ardour/audiofilesource.h
index 66cc240770..2133136e68 100644
--- a/libs/ardour/ardour/audiofilesource.h
+++ b/libs/ardour/ardour/audiofilesource.h
@@ -59,6 +59,8 @@ class AudioFileSource : public AudioSource {
static bool get_soundfile_info (string path, SoundFileInfo& _info, string& error);
+ static bool safe_file_extension (string path);
+
void set_allow_remove_if_empty (bool yn);
void mark_for_remove();
diff --git a/libs/ardour/audio_library.cc b/libs/ardour/audio_library.cc
index 92069d929f..2ed4739a96 100644
--- a/libs/ardour/audio_library.cc
+++ b/libs/ardour/audio_library.cc
@@ -77,6 +77,13 @@ AudioLibrary::path2uri (string path)
return uri.str();
}
+string
+AudioLibrary::uri2path (string uri)
+{
+ string path = xmlURIUnescapeString(uri.c_str(), 0, 0);
+ return path.substr(5);
+}
+
void
AudioLibrary::set_tags (string member, vector<string> tags)
{
@@ -142,8 +149,8 @@ AudioLibrary::search_members_and (vector<string>& members, const vector<string>
if (*head != 0) {
lrdf_uris* ulist = lrdf_match_multi(*head);
for (uint32_t j = 0; ulist && j < ulist->count; ++j) {
-// printf("AND: %s\n", ulist->items[j]);
- members.push_back(ulist->items[j]);
+// cerr << "AND: " << uri2path(ulist->items[j]) << endl;
+ members.push_back(uri2path(ulist->items[j]));
}
lrdf_free_uris(ulist);
@@ -154,33 +161,9 @@ AudioLibrary::search_members_and (vector<string>& members, const vector<string>
// memory clean up
pattern = *head;
while(pattern){
- free(pattern->predicate);
free(pattern->object);
old = pattern;
pattern = pattern->next;
delete old;
}
}
-
-bool
-AudioLibrary::safe_file_extension(string file)
-{
- return !(file.rfind(".wav") == string::npos &&
- file.rfind(".aiff")== string::npos &&
- file.rfind(".aif") == string::npos &&
- file.rfind(".snd") == string::npos &&
- file.rfind(".au") == string::npos &&
- file.rfind(".raw") == string::npos &&
- file.rfind(".sf") == string::npos &&
- file.rfind(".cdr") == string::npos &&
- file.rfind(".smp") == string::npos &&
- file.rfind(".maud")== string::npos &&
- file.rfind(".vwe") == string::npos &&
- file.rfind(".paf") == string::npos &&
-#ifdef HAVE_COREAUDIO
- file.rfind(".mp3") == string::npos &&
- file.rfind(".aac") == string::npos &&
- file.rfind(".mp4") == string::npos &&
-#endif // HAVE_COREAUDIO
- file.rfind(".voc") == string::npos);
-}
diff --git a/libs/ardour/audiofilesource.cc b/libs/ardour/audiofilesource.cc
index 53809c3c2f..1915957f3d 100644
--- a/libs/ardour/audiofilesource.cc
+++ b/libs/ardour/audiofilesource.cc
@@ -543,3 +543,26 @@ AudioFileSource::setup_peakfile ()
return 0;
}
}
+
+bool
+AudioFileSource::safe_file_extension(string file)
+{
+ return !(file.rfind(".wav") == string::npos &&
+ file.rfind(".aiff")== string::npos &&
+ file.rfind(".aif") == string::npos &&
+ file.rfind(".snd") == string::npos &&
+ file.rfind(".au") == string::npos &&
+ file.rfind(".raw") == string::npos &&
+ file.rfind(".sf") == string::npos &&
+ file.rfind(".cdr") == string::npos &&
+ file.rfind(".smp") == string::npos &&
+ file.rfind(".maud")== string::npos &&
+ file.rfind(".vwe") == string::npos &&
+ file.rfind(".paf") == string::npos &&
+#ifdef HAVE_COREAUDIO
+ file.rfind(".mp3") == string::npos &&
+ file.rfind(".aac") == string::npos &&
+ file.rfind(".mp4") == string::npos &&
+#endif // HAVE_COREAUDIO
+ file.rfind(".voc") == string::npos);
+}
diff --git a/libs/pbd/pbd/tokenizer.h b/libs/pbd/pbd/tokenizer.h
index a976b79341..b80e3eac4a 100644
--- a/libs/pbd/pbd/tokenizer.h
+++ b/libs/pbd/pbd/tokenizer.h
@@ -4,18 +4,24 @@
#include <iterator>
#include <string>
+#include <pbd/whitespace.h>
+
namespace PBD {
/**
Tokenize string, this should work for standard
- strings aswell as Glib::ustring. This is a bit of a hack,
+ strings as well as Glib::ustring. This is a bit of a hack,
there are much better string tokenizing patterns out there.
+ If strip_whitespace is set to true, tokens will be checked to see
+ that they still have a length after stripping. If no length, they
+ are discarded.
*/
template<typename StringType, typename Iter>
unsigned int
tokenize(const StringType& str,
const StringType& delims,
- Iter it)
+ Iter it,
+ bool strip_whitespace=false)
{
typename StringType::size_type start_pos = 0;
typename StringType::size_type end_pos = 0;
@@ -28,14 +34,30 @@ tokenize(const StringType& str,
if (end_pos == str.npos) {
end_pos = str.length();
}
- *it++ = str.substr(start_pos, end_pos - start_pos);
+ if (strip_whitespace) {
+ StringType stripped = str.substr(start_pos, end_pos - start_pos);
+ strip_whitespace_edges (stripped);
+ if (stripped.length()) {
+ *it++ = stripped;
+ }
+ } else {
+ *it++ = str.substr(start_pos, end_pos - start_pos);
+ }
++token_count;
start_pos = str.find_first_not_of(delims, end_pos + 1);
}
} while (start_pos != str.npos);
if (start_pos != str.npos) {
- *it++ = str.substr(start_pos, str.length() - start_pos);
+ if (strip_whitespace) {
+ StringType stripped = str.substr(start_pos, str.length() - start_pos);
+ strip_whitespace_edges (stripped);
+ if (stripped.length()) {
+ *it++ = stripped;
+ }
+ } else {
+ *it++ = str.substr(start_pos, str.length() - start_pos);
+ }
++token_count;
}