comparison rdf/RDFImporter.cpp @ 522:76f6971c8433

* Use FileFinder to find audio source referred to in an RDF document, if it isn't where the document indicates
author Chris Cannam
date Fri, 12 Dec 2008 14:38:10 +0000
parents e340b2fb9471
children 3ccf48fb81d6
comparison
equal deleted inserted replaced
521:5ebcf099dab0 522:76f6971c8433
35 #include "data/model/WaveFileModel.h" 35 #include "data/model/WaveFileModel.h"
36 36
37 #include "data/fileio/FileSource.h" 37 #include "data/fileio/FileSource.h"
38 #include "data/fileio/CachedFile.h" 38 #include "data/fileio/CachedFile.h"
39 39
40 #ifndef NO_SV_GUI
41 #include "widgets/FileFinder.h"
42 #endif
43
40 using std::cerr; 44 using std::cerr;
41 using std::endl; 45 using std::endl;
42 46
43 class RDFImporterImpl 47 class RDFImporterImpl
44 { 48 {
154 return models; 158 return models;
155 } 159 }
156 160
157 QString error; 161 QString error;
158 162
159 if (!isOK()) error = m_errorString; 163 if (m_errorString != "") {
164 error = m_errorString;
165 }
160 m_errorString = ""; 166 m_errorString = "";
161 167
162 getDataModelsDense(models, reporter); 168 getDataModelsDense(models, reporter);
163 169
164 if (!isOK()) error = m_errorString; 170 if (m_errorString != "") {
171 error = m_errorString;
172 }
165 m_errorString = ""; 173 m_errorString = "";
166 174
167 getDataModelsSparse(models, reporter); 175 getDataModelsSparse(models, reporter);
168 176
169 if (isOK()) m_errorString = error; 177 if (m_errorString == "" && error != "") {
178 m_errorString = error;
179 }
170 180
171 return models; 181 return models;
172 } 182 }
173 183
174 void 184 void
190 for (int i = 0; i < results.size(); ++i) { 200 for (int i = 0; i < results.size(); ++i) {
191 201
192 QString signal = results[i]["signal"].value; 202 QString signal = results[i]["signal"].value;
193 QString source = results[i]["source"].value; 203 QString source = results[i]["source"].value;
194 204
195 FileSource fs(source, reporter); 205 FileSource *fs = new FileSource(source, reporter);
196 if (fs.isAvailable()) { 206 #ifdef NO_SV_GUI
197 if (reporter) { 207 if (!fs->isAvailable()) {
198 reporter->setMessage(RDFImporter::tr("Importing audio referenced in RDF...")); 208 m_errorString = QString("Signal source \"%1\" is not available").arg(source);
199 } 209 delete fs;
200 fs.waitForData(); 210 continue;
201 WaveFileModel *newModel = new WaveFileModel(fs, m_sampleRate); 211 }
202 if (newModel->isOK()) { 212 #else
203 std::cerr << "Successfully created wave file model from source at \"" << source.toStdString() << "\"" << std::endl; 213 if (!fs->isAvailable()) {
204 models.push_back(newModel); 214 FileFinder *ff = FileFinder::getInstance();
205 m_audioModelMap[signal] = newModel; 215 QString path = ff->find(FileFinder::AudioFile,
206 if (m_sampleRate == 0) { 216 fs->getLocation(),
207 m_sampleRate = newModel->getSampleRate(); 217 m_uristring);
218 if (path != "") {
219 delete fs;
220 fs = new FileSource(path, reporter);
221 if (!fs->isAvailable()) {
222 delete fs;
223 m_errorString = QString("Signal source \"%1\" is not available").arg(source);
224 continue;
208 } 225 }
209 } else { 226 }
210 m_errorString = QString("Failed to create wave file model from source at \"%1\"").arg(source); 227 }
211 delete newModel; 228 #endif
229
230 if (reporter) {
231 reporter->setMessage(RDFImporter::tr("Importing audio referenced in RDF..."));
232 }
233 fs->waitForData();
234 WaveFileModel *newModel = new WaveFileModel(*fs, m_sampleRate);
235 if (newModel->isOK()) {
236 std::cerr << "Successfully created wave file model from source at \"" << source.toStdString() << "\"" << std::endl;
237 models.push_back(newModel);
238 m_audioModelMap[signal] = newModel;
239 if (m_sampleRate == 0) {
240 m_sampleRate = newModel->getSampleRate();
212 } 241 }
213 } else { 242 } else {
214 m_errorString = QString("Signal source \"%1\" is not available").arg(source); 243 m_errorString = QString("Failed to create wave file model from source at \"%1\"").arg(source);
215 } 244 delete newModel;
245 }
246 delete fs;
216 } 247 }
217 } 248 }
218 249
219 void 250 void
220 RDFImporterImpl::getDataModelsDense(std::vector<Model *> &models, 251 RDFImporterImpl::getDataModelsDense(std::vector<Model *> &models,