X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudio_library.cc;h=662b8cb33e66f844dac4fa63231f76c3d89dc789;hb=204baa31d842d4c2f833d319b6fa55e402a1bfb8;hp=92069d929ff7c25ea3af2916256d8bc4234b76ec;hpb=505d37a58f938db53286ac9c2f1ad32ef867a539;p=ardour.git diff --git a/libs/ardour/audio_library.cc b/libs/ardour/audio_library.cc index 92069d929f..662b8cb33e 100644 --- a/libs/ardour/audio_library.cc +++ b/libs/ardour/audio_library.cc @@ -22,26 +22,40 @@ #include #include +#include -#include +#include -#include -#include +#include "pbd/compose.h" + +#include "ardour/audio_library.h" +#include "ardour/utils.h" +#include "ardour/filesystem_paths.h" #include "i18n.h" using namespace std; +using namespace PBD; using namespace ARDOUR; -static char* TAG = "http://ardour.org/ontology/Tag"; +namespace { + const char* const sfdb_file_name = "sfdb"; +} // anonymous namespace + +static const char* TAG = "http://ardour.org/ontology/Tag"; AudioLibrary::AudioLibrary () { - src = "file:" + get_user_ardour_path() + "sfdb"; + sys::path sfdb_file_path(user_config_directory ()); + + sfdb_file_path /= sfdb_file_name; + + src = Glib::filename_to_uri (sfdb_file_path.to_string ()); // workaround for possible bug in raptor that crashes when saving to a // non-existant file. - touch_file(get_user_ardour_path() + "sfdb"); + + touch_file(sfdb_file_path.to_string()); lrdf_read_file(src.c_str()); } @@ -58,35 +72,16 @@ AudioLibrary::save_changes () } } -string -AudioLibrary::path2uri (string path) -{ - xmlURI temp; - memset(&temp, 0, sizeof(temp)); - - xmlChar *cal = xmlCanonicPath((xmlChar*) path.c_str()); - temp.path = (char *) cal; - xmlChar *ret = xmlSaveUri(&temp); - xmlFree(cal); - - stringstream uri; - uri << "file:" << (const char*) ret; - - xmlFree (ret); - - return uri.str(); -} - void AudioLibrary::set_tags (string member, vector tags) { sort (tags.begin(), tags.end()); tags.erase (unique(tags.begin(), tags.end()), tags.end()); - - string file_uri(path2uri(member)); - + + const string file_uri(Glib::filename_to_uri (member)); + lrdf_remove_uri_matches (file_uri.c_str()); - + for (vector::iterator i = tags.begin(); i != tags.end(); ++i) { lrdf_add_triple (src.c_str(), file_uri.c_str(), TAG, (*i).c_str(), lrdf_literal); } @@ -96,32 +91,32 @@ vector AudioLibrary::get_tags (string member) { vector tags; - + lrdf_statement pattern; - pattern.subject = strdup(path2uri(member).c_str()); - pattern.predicate = TAG; + pattern.subject = strdup(Glib::filename_to_uri(member).c_str()); + pattern.predicate = (char*)TAG; pattern.object = 0; pattern.object_type = lrdf_literal; - + lrdf_statement* matches = lrdf_matches (&pattern); free (pattern.subject); - + lrdf_statement* current = matches; while (current != 0) { tags.push_back (current->object); - + current = current->next; } - + lrdf_free_statements (matches); - + sort (tags.begin(), tags.end()); - + return tags; } void -AudioLibrary::search_members_and (vector& members, const vector tags) +AudioLibrary::search_members_and (vector& members, const vector& tags) { lrdf_statement **head; lrdf_statement* pattern = 0; @@ -131,8 +126,8 @@ AudioLibrary::search_members_and (vector& members, const vector vector::const_iterator i; for (i = tags.begin(); i != tags.end(); ++i){ pattern = new lrdf_statement; - pattern->subject = "?"; - pattern->predicate = TAG; + pattern->subject = (char*)"?"; + pattern->predicate = (char*)TAG; pattern->object = strdup((*i).c_str()); pattern->next = old; @@ -142,8 +137,7 @@ AudioLibrary::search_members_and (vector& members, const vector 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]); + members.push_back(Glib::filename_from_uri(ulist->items[j])); } lrdf_free_uris(ulist); @@ -154,33 +148,9 @@ AudioLibrary::search_members_and (vector& members, const vector // 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); -}