comparison rdf/PluginRDFIndexer.cpp @ 457:ef14acd6d102

* Add beginnings of capability to search plugins that are not yet installed -- lots more work to do here, though
author Chris Cannam
date Tue, 14 Oct 2008 16:36:35 +0000
parents 64e64e304a12
children 93fb1ebff76b
comparison
equal deleted inserted replaced
456:64e64e304a12 457:ef14acd6d102
18 #include "SimpleSPARQLQuery.h" 18 #include "SimpleSPARQLQuery.h"
19 19
20 #include "data/fileio/FileSource.h" 20 #include "data/fileio/FileSource.h"
21 #include "plugin/PluginIdentifier.h" 21 #include "plugin/PluginIdentifier.h"
22 22
23 #include "base/Profiler.h"
24
23 #include <vamp-sdk/PluginHostAdapter.h> 25 #include <vamp-sdk/PluginHostAdapter.h>
24 26
25 #include <QFileInfo> 27 #include <QFileInfo>
26 #include <QDir> 28 #include <QDir>
27 #include <QUrl> 29 #include <QUrl>
91 } 93 }
92 } 94 }
93 95
94 PluginRDFIndexer::~PluginRDFIndexer() 96 PluginRDFIndexer::~PluginRDFIndexer()
95 { 97 {
96 while (!m_cache.empty()) { 98 while (!m_sources.empty()) {
97 delete *m_cache.begin(); 99 delete *m_sources.begin();
98 m_cache.erase(m_cache.begin()); 100 m_sources.erase(m_sources.begin());
99 } 101 }
100 } 102 }
101 103
102 QString 104 QString
103 PluginRDFIndexer::getURIForPluginId(QString pluginId) 105 PluginRDFIndexer::getURIForPluginId(QString pluginId)
120 122
121 cerr << "PluginRDFIndexer::getIdForPluginURI: NOTE: Failed to find a local RDF document describing plugin <" << uri.toStdString() << ">: attempting to retrieve one remotely by guesswork" << endl; 123 cerr << "PluginRDFIndexer::getIdForPluginURI: NOTE: Failed to find a local RDF document describing plugin <" << uri.toStdString() << ">: attempting to retrieve one remotely by guesswork" << endl;
122 124
123 QString baseUrl = QUrl(uri).toString(QUrl::RemoveFragment); 125 QString baseUrl = QUrl(uri).toString(QUrl::RemoveFragment);
124 126
125 FileSource source(baseUrl); 127 indexURL(baseUrl);
126 if (source.isAvailable()) {
127 source.waitForData();
128 if (indexFile(source.getLocalFilename())) {
129 m_cache.insert(new FileSource(source));
130 }
131 }
132 128
133 if (m_uriToIdMap.find(uri) == m_uriToIdMap.end()) { 129 if (m_uriToIdMap.find(uri) == m_uriToIdMap.end()) {
134 m_uriToIdMap[uri] = ""; 130 m_uriToIdMap[uri] = "";
135 } 131 }
136 } 132 }
173 } 169 }
174 170
175 bool 171 bool
176 PluginRDFIndexer::indexURL(QString urlString) 172 PluginRDFIndexer::indexURL(QString urlString)
177 { 173 {
174 Profiler profiler("PluginRDFIndexer::indexURL");
175
176 QString localString = urlString;
177
178 if (FileSource::isRemote(urlString) &&
179 FileSource::canHandleScheme(urlString)) {
180
181 FileSource *source = new FileSource(urlString);
182 if (!source->isAvailable()) {
183 delete source;
184 return false;
185 }
186 source->waitForData();
187 localString = QUrl::fromLocalFile(source->getLocalFilename()).toString();
188 m_sources.insert(source);
189 }
190
178 // cerr << "PluginRDFIndexer::indexURL: url = <" << urlString.toStdString() << ">" << endl; 191 // cerr << "PluginRDFIndexer::indexURL: url = <" << urlString.toStdString() << ">" << endl;
179 192
180 SimpleSPARQLQuery query 193 SimpleSPARQLQuery query
181 (QString 194 (QString
182 ( 195 (
204 " vamp:available_plugin ?plugin ; " 217 " vamp:available_plugin ?plugin ; "
205 " vamp:identifier ?library_id " 218 " vamp:identifier ?library_id "
206 " } " 219 " } "
207 " } " 220 " } "
208 ) 221 )
209 .arg(urlString)); 222 .arg(localString));
210 223
211 SimpleSPARQLQuery::ResultList results = query.execute(); 224 SimpleSPARQLQuery::ResultList results = query.execute();
212 225
213 if (!query.isOK()) { 226 if (!query.isOK()) {
214 cerr << "ERROR: PluginRDFIndexer::indexURL: ERROR: Failed to index document at <" 227 cerr << "ERROR: PluginRDFIndexer::indexURL: ERROR: Failed to index document at <"