X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudio_library.cc;h=42ec5378307f08fc92d5c5a492649072080d067a;hb=022818b4a796f52c0a91eea42e65aec0bc7bed43;hp=a15e08d5f9f3f228d0271c0e9d5f6c4b36da6776;hpb=18e65da42b7cd1973313d132c4b89df598863021;p=ardour.git diff --git a/libs/ardour/audio_library.cc b/libs/ardour/audio_library.cc index a15e08d5f9..42ec537830 100644 --- a/libs/ardour/audio_library.cc +++ b/libs/ardour/audio_library.cc @@ -22,6 +22,7 @@ #include #include +#include #include @@ -40,7 +41,7 @@ namespace { const char* const sfdb_file_name = "sfdb"; } // anonymous namespace -static char* TAG = "http://ardour.org/ontology/Tag"; +static const char* TAG = "http://ardour.org/ontology/Tag"; AudioLibrary::AudioLibrary () { @@ -52,6 +53,7 @@ AudioLibrary::AudioLibrary () // workaround for possible bug in raptor that crashes when saving to a // non-existant file. + touch_file(sfdb_file_path.to_string()); lrdf_read_file(src.c_str()); @@ -69,39 +71,13 @@ 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(); -} - -string -AudioLibrary::uri2path (string uri) -{ - string path = xmlURIUnescapeString(uri.c_str(), 0, 0); - return path.substr(5); -} - 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()); @@ -116,8 +92,8 @@ 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; @@ -149,8 +125,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; @@ -160,8 +136,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) { -// cerr << "AND: " << uri2path(ulist->items[j]) << endl; - members.push_back(uri2path(ulist->items[j])); + members.push_back(Glib::filename_from_uri(ulist->items[j])); } lrdf_free_uris(ulist);