mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-28 17:37:41 +01:00
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
This commit is contained in:
parent
143e8eba1d
commit
d631a8d89f
8 changed files with 192 additions and 85 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue