annotate sv/main/EasaierSessionManager.cpp @ 249:56b913f1fd05

Fix bugs in post data: - boundary - file upload
author lbarthelemy
date Tue, 10 Jun 2008 07:59:55 +0000
parents 37b7f4ec5a17
children c12986afc03c
rev   line source
lbarthelemy@247 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbarthelemy@247 2
lbarthelemy@247 3 /* Sound Access
lbarthelemy@247 4 EASAIER client application.
lbarthelemy@247 5 Silogic 2007. Laure Bajard.
lbarthelemy@247 6
lbarthelemy@247 7 This program is free software; you can redistribute it and/or
lbarthelemy@247 8 modify it under the terms of the GNU General Public License as
lbarthelemy@247 9 published by the Free Software Foundation; either version 2 of the
lbarthelemy@247 10 License, or (at your option) any later version. See the file
lbarthelemy@247 11 COPYING included with this distribution for more information.
lbarthelemy@247 12 */
lbarthelemy@247 13
lbarthelemy@247 14 #include "EasaierSessionManager.h"
lbarthelemy@247 15
lbarthelemy@247 16 #include <QUrl>
lbarthelemy@247 17 #include <QMessageBox>
lbarthelemy@247 18 #include <QTextStream>
lbarthelemy@247 19 #include <iostream>
lbarthelemy@247 20 #include <QStatusBar>
lbarthelemy@247 21 #include <vector>
lbarthelemy@247 22
lbarthelemy@247 23 #include <QApplication>
lbarthelemy@247 24 #include <Qt>
lbarthelemy@247 25 #include <QUrl>
lbarthelemy@247 26
lbarthelemy@247 27 #include "layer/Layer.h"
lbarthelemy@247 28 #include "base/TempDirectory.h"
lbarthelemy@247 29 #include "data/fileio/AudioSourceInfoReader.h"
lbarthelemy@247 30 #include "data/fileio/ModelReader.h"
lbarthelemy@247 31 #include "data/fileio/QueryConfigReader.h"
lbarthelemy@247 32 #include "data/fileio/SparqlResultsReader.h"
lbarthelemy@247 33 #include "data/fileio/SparqlRelatedMediaReader.h"
lbarthelemy@247 34 #include "data/fileio/VideoFileReaderFactory.h"
lbarthelemy@247 35 #include "data/model/WaveFileModel.h"
lbarthelemy@247 36 #include "main/MainWindow.h"
lbarthelemy@247 37 #include "widgets/QueryResultsWidget.h"
lbarthelemy@247 38 #include "widgets/RelatedMediaWidget.h"
lbarthelemy@247 39 #include "base/PropertyContainer.h"
lbarthelemy@247 40 #include "data/fileio/AudioFileReaderFactory.h"
lbarthelemy@247 41
lbarthelemy@247 42 EasaierSessionManager::EasaierSessionManager(HttpClient* httpClient) : QObject(),
lbarthelemy@247 43 m_fileName(""),
lbarthelemy@247 44 m_httpClient(httpClient),
lbarthelemy@247 45 m_document(0),
lbarthelemy@247 46 m_audioSourceInfoModel(0),
lbarthelemy@247 47 m_queryModel(0),
lbarthelemy@247 48 m_currentPane(0)
lbarthelemy@247 49 {
lbarthelemy@247 50 connect(m_httpClient, SIGNAL(requestFinished(int, bool)), this, SLOT(fileLoaded(int, bool)));
lbarthelemy@247 51 }
lbarthelemy@247 52
lbarthelemy@247 53 EasaierSessionManager::~EasaierSessionManager()
lbarthelemy@247 54 {
lbarthelemy@247 55 closeSession();
lbarthelemy@247 56 m_httpClient = 0;
lbarthelemy@247 57 }
lbarthelemy@247 58
lbarthelemy@247 59 bool EasaierSessionManager::newSession()
lbarthelemy@247 60 {
lbarthelemy@247 61 closeSession();
lbarthelemy@247 62
lbarthelemy@247 63 m_queryModel = new QueryModel();
lbarthelemy@247 64 QString filename = "/data/query/queryfield.xml";
lbarthelemy@247 65 QString query = m_httpClient->getServletName() + "?theme=getFile&fileName=data/query/queryfield.xml";
lbarthelemy@247 66 loadFile(query, filename, LoadedFile::QUERY_CONFIG);
lbarthelemy@247 67
lbarthelemy@247 68 return true;
lbarthelemy@247 69 }
lbarthelemy@247 70
lbarthelemy@247 71 bool EasaierSessionManager::openSession(Document *document)
lbarthelemy@247 72 {
lbarthelemy@247 73 newSession();
lbarthelemy@247 74
lbarthelemy@247 75 m_fileName = document->getAudioSourceInfoFileName();
lbarthelemy@247 76 m_document = document;
lbarthelemy@247 77
lbarthelemy@247 78 QString params = "&identification=" + m_fileName;
lbarthelemy@247 79
lbarthelemy@247 80 QString query = m_httpClient->getServletName() + "?theme=infoFile"+params;
lbarthelemy@247 81 QString filename = "/easaier/servlet/infoFile";
lbarthelemy@247 82 loadFile(query, filename, LoadedFile::AUDIO_SOURCE_INFO);
lbarthelemy@247 83
lbarthelemy@247 84 //get related media
lbarthelemy@247 85 query = m_httpClient->getServletName() + "?theme=relatedMedia" + params;
lbarthelemy@247 86 filename = "/easaier/servlet/relatedMedia";
lbarthelemy@247 87 loadFile(query, filename, LoadedFile::RELATED_MEDIA_LIST);
lbarthelemy@247 88
lbarthelemy@247 89 return true;
lbarthelemy@247 90 }
lbarthelemy@247 91
lbarthelemy@247 92 bool EasaierSessionManager::openAudioInfoFile(Document *document)
lbarthelemy@247 93 {
lbarthelemy@247 94 closeFile();
lbarthelemy@247 95
lbarthelemy@247 96 m_fileName = document->getAudioSourceInfoFileName();
lbarthelemy@247 97 m_document = document;
lbarthelemy@247 98
lbarthelemy@247 99 QString params = "&identification=" + m_fileName;
lbarthelemy@247 100
lbarthelemy@247 101 //get infofile
lbarthelemy@247 102 QString query = m_httpClient->getServletName() + "?theme=infoFile" + params;
lbarthelemy@247 103
lbarthelemy@247 104 QString filename = "/easaier/servlet/infoFile";
lbarthelemy@247 105
lbarthelemy@247 106 loadFile(query, filename, LoadedFile::AUDIO_SOURCE_INFO);
lbarthelemy@247 107
lbarthelemy@247 108 //get related media
lbarthelemy@247 109
lbarthelemy@247 110 query = m_httpClient->getServletName() + "?theme=relatedMedia" + params;
lbarthelemy@247 111 filename = "/easaier/servlet/relatedMedia";
lbarthelemy@247 112 loadFile(query, filename, LoadedFile::RELATED_MEDIA_LIST);
lbarthelemy@247 113
lbarthelemy@247 114 return true;
lbarthelemy@247 115 }
lbarthelemy@247 116
lbarthelemy@247 117 void EasaierSessionManager::closeFile()
lbarthelemy@247 118 {
lbarthelemy@247 119 m_audioSourceInfoModel = 0;
lbarthelemy@247 120
lbarthelemy@247 121 while (!m_loadFile.empty())
lbarthelemy@247 122 {
lbarthelemy@247 123 m_loadFile.begin()->second->close();
lbarthelemy@247 124 delete m_loadFile.begin()->second;
lbarthelemy@247 125 m_loadFile.erase(m_loadFile.begin());
lbarthelemy@247 126 }
lbarthelemy@247 127
lbarthelemy@247 128 m_modelLoaded.clear();
lbarthelemy@247 129 }
lbarthelemy@247 130
lbarthelemy@247 131 void EasaierSessionManager::closeSession()
lbarthelemy@247 132 {
lbarthelemy@247 133 closeFile();
lbarthelemy@247 134
lbarthelemy@247 135 m_fileName = "";
lbarthelemy@247 136 m_document = 0;
lbarthelemy@247 137
lbarthelemy@247 138 if (m_queryModel)
lbarthelemy@247 139 {
lbarthelemy@247 140 delete m_queryModel;
lbarthelemy@247 141 m_queryModel = 0;
lbarthelemy@247 142 }
lbarthelemy@247 143 }
lbarthelemy@247 144
lbarthelemy@247 145 void EasaierSessionManager::loadFile(const QString& queryAux, const QString& filename, LoadedFile::FileType type, const QString& postPath)
lbarthelemy@247 146 {
lbarthelemy@247 147 QFile * postFile = 0;
lbarthelemy@247 148
lbarthelemy@247 149 if ((queryAux == 0) || (filename == 0))
lbarthelemy@247 150 return;
lbarthelemy@247 151
lbarthelemy@247 152 if (m_httpClient->getHost() == "")
lbarthelemy@247 153 return;
lbarthelemy@247 154
lbarthelemy@247 155 QUrl url(queryAux);
lbarthelemy@247 156 QString query = QString(url.toEncoded());
lbarthelemy@247 157
lbarthelemy@247 158 QString directory = filename.left(filename.lastIndexOf("/"));
lbarthelemy@247 159 QString file = filename.right(filename.length() - filename.lastIndexOf("/"));
lbarthelemy@247 160
lbarthelemy@247 161 if (directory.left(1) == "/")
lbarthelemy@247 162 {
lbarthelemy@247 163 directory.remove(0, 1);
lbarthelemy@247 164 }
lbarthelemy@247 165
lbarthelemy@247 166 //create the subdirectory in local
lbarthelemy@247 167 QString localPath = TempDirectory::getInstance()->getSubDirectoryPath(directory);
lbarthelemy@247 168 localPath.append(file);
lbarthelemy@247 169
lbarthelemy@247 170 LoadedFile* newFile = new LoadedFile(localPath);
lbarthelemy@247 171 newFile->setFileType(type);
lbarthelemy@247 172 newFile->setUri(filename);
lbarthelemy@247 173
lbarthelemy@247 174 if (postPath != "")
lbarthelemy@247 175 {
lbarthelemy@247 176 postFile = new QFile(postPath);
lbarthelemy@247 177 }
lbarthelemy@247 178 int index;
lbarthelemy@247 179 index = m_httpClient->get(query,newFile );
lbarthelemy@247 180
lbarthelemy@247 181 std::cerr << "Ask for file : GET " << query.toStdString() << " - index : " << index << std::endl;
lbarthelemy@247 182
lbarthelemy@247 183 m_loadFile[index] = newFile;
lbarthelemy@247 184
lbarthelemy@247 185 if (type == LoadedFile::QUERY_RESULTS)
lbarthelemy@247 186 MainWindow::instance()->statusBar()->showMessage(tr("Querying database..."));
lbarthelemy@247 187 else if (type == LoadedFile::QUERY_CONFIG)
lbarthelemy@247 188 MainWindow::instance()->statusBar()->showMessage(tr("Asking for query config..."));
lbarthelemy@247 189 else
lbarthelemy@247 190 MainWindow::instance()->statusBar()->showMessage(tr("Loading File : %1").arg(filename));
lbarthelemy@247 191 }
lbarthelemy@247 192
lbarthelemy@247 193 void EasaierSessionManager::loadFile(const QByteArray& payload , const QString& filename, LoadedFile::FileType type, const QString& postPath)
lbarthelemy@247 194 {
lbarthelemy@247 195 QFile * postFile = 0;
lbarthelemy@247 196
lbarthelemy@247 197 if (m_httpClient->getHost() == "")
lbarthelemy@247 198 return;
lbarthelemy@247 199
lbarthelemy@247 200
lbarthelemy@247 201 QString directory = filename.left(filename.lastIndexOf("/"));
lbarthelemy@247 202 QString file = filename.right(filename.length() - filename.lastIndexOf("/"));
lbarthelemy@247 203
lbarthelemy@247 204 if (directory.left(1) == "/")
lbarthelemy@247 205 {
lbarthelemy@247 206 directory.remove(0, 1);
lbarthelemy@247 207 }
lbarthelemy@247 208
lbarthelemy@247 209 //create the subdirectory in local
lbarthelemy@247 210 QString localPath = TempDirectory::getInstance()->getSubDirectoryPath(directory);
lbarthelemy@247 211 localPath.append(file);
lbarthelemy@247 212
lbarthelemy@247 213 LoadedFile* newFile = new LoadedFile(localPath);
lbarthelemy@247 214 newFile->setFileType(type);
lbarthelemy@247 215 newFile->setUri(filename);
lbarthelemy@247 216
lbarthelemy@247 217 int index;
lbarthelemy@247 218
lbarthelemy@247 219 // build the header
lbajardsilogic@248 220 /*QHttpRequestHeader header("POST", "/easaier/RetrieverService");
lbarthelemy@247 221 header.setValue("Host", "192.168.0.115"); //"easaier.silogic.fr");
lbajardsilogic@248 222 header.setValue("Port", "8080"); //"9875");*/
lbajardsilogic@248 223 QHttpRequestHeader header("POST", m_httpClient->getServletName());
lbajardsilogic@248 224 header.setValue("Host", m_httpClient->getHost());
lbajardsilogic@248 225 header.setValue("Port", QString::number(m_httpClient->getHostPort()));
lbarthelemy@249 226 header.setContentType("multipart/form-data; boundary=7d44e178b0434");
lbarthelemy@247 227 header.setValue("Cache-Control", "no-cache");
lbarthelemy@247 228 header.setValue("Accept","*/*");
lbarthelemy@247 229 header.setContentLength(payload.length());
lbarthelemy@247 230 //
lbarthelemy@247 231
lbarthelemy@247 232 index = m_httpClient->request(header, payload, newFile);
lbarthelemy@247 233
lbarthelemy@247 234 std::cerr << "Ask for file : POST " << " - index : " << index << std::endl;
lbarthelemy@247 235
lbarthelemy@247 236 m_loadFile[index] = newFile;
lbarthelemy@247 237
lbarthelemy@247 238 if (type == LoadedFile::QUERY_RESULTS)
lbarthelemy@247 239 MainWindow::instance()->statusBar()->showMessage(tr("Querying database..."));
lbarthelemy@247 240 else if (type == LoadedFile::QUERY_CONFIG)
lbarthelemy@247 241 MainWindow::instance()->statusBar()->showMessage(tr("Asking for query config..."));
lbarthelemy@247 242 else
lbarthelemy@247 243 MainWindow::instance()->statusBar()->showMessage(tr("Loading File : %1").arg(filename));
lbarthelemy@247 244 }
lbarthelemy@247 245
lbarthelemy@247 246 void EasaierSessionManager::fileLoaded(int index, bool error)
lbarthelemy@247 247 {
lbarthelemy@247 248 QString errorString = m_httpClient->errorString();
lbarthelemy@247 249 std::map<int , LoadedFile*>::iterator iter = m_loadFile.find(index);
lbarthelemy@247 250 if (iter == m_loadFile.end())
lbarthelemy@247 251 {
lbarthelemy@247 252 std::cerr << "fileLoaded() : file " << index << " not found. " << std::endl;
lbarthelemy@247 253 return;
lbarthelemy@247 254 }
lbarthelemy@247 255 if (error)
lbarthelemy@247 256 {
lbarthelemy@247 257 QApplication::restoreOverrideCursor();
lbarthelemy@247 258 QMessageBox::critical(MainWindow::instance(), tr("Download Failed"), m_httpClient->errorString());
lbarthelemy@247 259 return;
lbarthelemy@247 260 }
lbarthelemy@247 261 bool read = false;
lbarthelemy@247 262
lbarthelemy@247 263 //retreive loaded file
lbarthelemy@247 264 LoadedFile* loadedFile = iter->second;
lbarthelemy@247 265 loadedFile->close();
lbarthelemy@247 266
lbarthelemy@247 267 //save type and filename for reading
lbarthelemy@247 268 LoadedFile::FileType type = loadedFile->getFileType();
lbarthelemy@247 269 QString filename = loadedFile->fileName();
lbarthelemy@247 270 QString uri = loadedFile->getUri();
lbarthelemy@247 271
lbarthelemy@247 272 //delete de file and erase from the loaded file queue
lbarthelemy@247 273 delete loadedFile;
lbarthelemy@247 274 m_loadFile.erase(iter);
lbarthelemy@247 275 loadedFile = 0;
lbarthelemy@247 276
lbarthelemy@247 277 std::cerr << "fileLoaded() : file loaded, start to read file " << index << std::endl;
lbarthelemy@247 278
lbarthelemy@247 279 if ((type == LoadedFile::QUERY_RESULTS) || (type == LoadedFile::QUERY_CONFIG))
lbarthelemy@247 280 {
lbarthelemy@247 281 MainWindow::instance()->statusBar()->clearMessage();
lbarthelemy@247 282 }
lbarthelemy@247 283 else
lbarthelemy@247 284 {
lbarthelemy@247 285 QString name = filename.right(filename.length() - filename.lastIndexOf("/"));
lbarthelemy@247 286 MainWindow::instance()->statusBar()->showMessage(tr("File Loaded : %1").arg(name), 3000);
lbarthelemy@247 287 }
lbarthelemy@247 288
lbarthelemy@247 289 //read and load (in m_document) the file according to its type
lbarthelemy@247 290 switch (type) {
lbarthelemy@247 291
lbarthelemy@247 292 case LoadedFile::AUDIO_SOURCE_INFO :
lbarthelemy@247 293 {
lbarthelemy@247 294 m_audioSourceInfoModel = new AudioSourceInfoModel();
lbarthelemy@247 295 AudioSourceInfoReader audioSourceInfoReader(m_audioSourceInfoModel);
lbarthelemy@247 296 read = audioSourceInfoReader.parse(filename);
lbarthelemy@247 297 if (read)
lbarthelemy@247 298 {
lbarthelemy@247 299 m_document->setAudioSourceInfoModel(m_audioSourceInfoModel);
lbarthelemy@247 300 loadRelatedModel();
lbarthelemy@247 301 }
lbarthelemy@247 302 break;
lbarthelemy@247 303 }
lbarthelemy@247 304 case LoadedFile::MODEL :
lbarthelemy@247 305 {
lbarthelemy@247 306 QString modelName = m_audioSourceInfoModel->getKey(uri);
lbarthelemy@247 307
lbarthelemy@247 308 read = addModelToLayers(modelName, filename);
lbarthelemy@247 309
lbarthelemy@247 310 break;
lbarthelemy@247 311 }
lbarthelemy@247 312 case LoadedFile::METADATA :
lbarthelemy@247 313 {
lbarthelemy@247 314 ModelReader modelReader(m_document,0, m_currentPane);
lbarthelemy@247 315 read = modelReader.parse(filename);
lbarthelemy@247 316
lbarthelemy@247 317 break;
lbarthelemy@247 318 }
lbarthelemy@247 319 case LoadedFile::QUERY_CONFIG :
lbarthelemy@247 320 {
lbarthelemy@247 321 QueryConfigReader reader(m_queryModel);
lbarthelemy@247 322 bool ok = reader.parse(filename);
lbarthelemy@247 323
lbarthelemy@247 324 if (ok)
lbarthelemy@247 325 emit queryModelLoaded(m_queryModel);
lbarthelemy@247 326
lbarthelemy@247 327 read = ok;
lbarthelemy@247 328 break;
lbarthelemy@247 329 }
lbarthelemy@247 330 case LoadedFile::QUERY_RESULTS :
lbarthelemy@247 331 {
lbarthelemy@247 332 QueryResultsWidget* resultsWidget = MainWindow::instance()->getQueryResultsWidget();
lbarthelemy@247 333 resultsWidget->reset();
lbarthelemy@247 334
lbarthelemy@247 335 if (resultsWidget)
lbarthelemy@247 336 {
lbarthelemy@247 337 SparqlResultsReader reader(resultsWidget);
lbarthelemy@247 338 read = reader.parse(filename);
lbarthelemy@247 339 }
lbarthelemy@247 340 break;
lbarthelemy@247 341 }
lbarthelemy@247 342 case LoadedFile::RELATED_MEDIA_LIST :
lbarthelemy@247 343 {
lbarthelemy@247 344 std::list<QString> relMediaList;
lbarthelemy@247 345 SparqlRelatedMediaReader reader(&relMediaList);
lbarthelemy@247 346 read = reader.parse(filename);
lbarthelemy@247 347 importRelatedMedia(&relMediaList);
lbarthelemy@247 348 break;
lbarthelemy@247 349 }
lbarthelemy@247 350 case LoadedFile::RELATED_MEDIA :
lbarthelemy@247 351 {
lbarthelemy@247 352 read = true;
lbarthelemy@247 353 RelatedMediaWidget* relMediaWidget = MainWindow::instance()->getRelatedMediaWidget();
lbarthelemy@247 354 relMediaWidget->addRelatedMedia(filename);
lbarthelemy@247 355 break;
lbarthelemy@247 356 }
lbarthelemy@247 357 default: break;
lbarthelemy@247 358 }
lbarthelemy@247 359
lbarthelemy@247 360 //if the file could not be read by any reader
lbarthelemy@247 361 if (!read)
lbarthelemy@247 362 {
lbarthelemy@247 363 QFile file(filename);
lbarthelemy@247 364 if (file.open(QFile::ReadOnly)) {
lbarthelemy@247 365 QApplication::restoreOverrideCursor();
lbarthelemy@247 366 QMessageBox::critical(MainWindow::instance(), tr("Download Error"), file.readAll());
lbarthelemy@247 367 }
lbarthelemy@247 368 }
lbarthelemy@247 369 else {
lbarthelemy@247 370 std::cerr << "fileLoaded() : " << index << " all successful. " << std::endl;
lbarthelemy@247 371 }
lbarthelemy@247 372 QApplication::restoreOverrideCursor();
lbarthelemy@247 373 }
lbarthelemy@247 374
lbarthelemy@247 375 void EasaierSessionManager::loadRelatedModel()
lbarthelemy@247 376 {
lbarthelemy@247 377 std::set<Layer *> layers = m_document->getLayers();
lbarthelemy@247 378 std::set<Layer *>::iterator iter;
lbarthelemy@247 379
lbarthelemy@247 380 std::set<QString> loadedModel;
lbarthelemy@247 381
lbarthelemy@247 382 for (iter=layers.begin(); iter != layers.end(); iter++)
lbarthelemy@247 383 {
lbarthelemy@247 384 Layer * layer = *iter;
lbarthelemy@247 385
lbarthelemy@247 386 QString modelName = layer->getModelName();
lbarthelemy@247 387 if (modelName != "")
lbarthelemy@247 388 {
lbarthelemy@247 389 QString modelId = QString::number(layer->getModelId());
lbarthelemy@247 390 //modelName.append(modelId);
lbarthelemy@247 391
lbarthelemy@247 392 } else if (layer->getLayerPresentationName() == "Waveform")
lbarthelemy@247 393 {
lbarthelemy@247 394 //modelName = "http://purl.org/dc/elements/1.1/source";
lbarthelemy@247 395 modelName = "available_as";
lbarthelemy@247 396 int modelId = 1;
lbarthelemy@247 397 layer->setModelName(modelName);
lbarthelemy@247 398 layer->setModelId(modelId);
lbarthelemy@247 399 //modelName.append(QString::number(modelId));
lbarthelemy@247 400 }
lbarthelemy@247 401
lbarthelemy@247 402 if (modelName != "")
lbarthelemy@247 403 {
lbarthelemy@247 404 QString uri = m_audioSourceInfoModel->getInfo(modelName)->at(0);
lbarthelemy@247 405
lbarthelemy@247 406 QString query = m_httpClient->getServletName() + "?theme=getFile&fileName="+uri;
lbarthelemy@247 407
lbarthelemy@247 408 std::set<QString>::iterator iterModel = m_modelLoaded.find(uri);
lbarthelemy@247 409
lbarthelemy@247 410 if (iterModel == m_modelLoaded.end())
lbarthelemy@247 411 {
lbarthelemy@247 412 m_modelLoaded.insert(uri);
lbarthelemy@247 413 loadFile(query, uri, LoadedFile::MODEL);
lbarthelemy@247 414 }
lbarthelemy@247 415 }
lbarthelemy@247 416 }
lbarthelemy@247 417 }
lbarthelemy@247 418
lbarthelemy@247 419 bool EasaierSessionManager::addModelToLayers(const QString& name, const QString& filename)
lbarthelemy@247 420 {
lbarthelemy@247 421 std::set<Layer *> layers = m_document->getLayers();
lbarthelemy@247 422 std::set<Layer *>::iterator iter;
lbarthelemy@247 423
lbarthelemy@247 424 std::map<QString, Model *> addedModel;
lbarthelemy@247 425
lbarthelemy@247 426 bool ok = false;
lbarthelemy@247 427
lbarthelemy@247 428 for (iter=layers.begin(); iter != layers.end(); iter++)
lbarthelemy@247 429 {
lbarthelemy@247 430 Layer * layer = *iter;
lbarthelemy@247 431
lbarthelemy@247 432 QString modelName = layer->getModelName();
lbarthelemy@247 433 QString modelId = QString::number(layer->getModelId());
lbarthelemy@247 434
lbarthelemy@247 435 //modelName.append(modelId);
lbarthelemy@247 436 modelName = modelName.toLower();
lbarthelemy@247 437
lbarthelemy@247 438 if (modelName == name)
lbarthelemy@247 439 {
lbarthelemy@247 440 std::map<QString, Model *>::iterator iterModel;
lbarthelemy@247 441 iterModel = addedModel.find(modelName);
lbarthelemy@247 442
lbarthelemy@247 443 if (iterModel == addedModel.end())
lbarthelemy@247 444 {
lbarthelemy@247 445 QString extension = filename.right(filename.length()-filename.lastIndexOf(".")-1);
lbarthelemy@247 446 if (AudioFileReaderFactory::isKnownExtensions(extension))
lbarthelemy@247 447 {
lbarthelemy@247 448 WaveFileModel *model = new WaveFileModel(filename);
lbarthelemy@247 449 m_document->setMainModel(model);
lbarthelemy@247 450 addedModel[modelName] = (Model* ) model;
lbarthelemy@247 451 ok = true;
lbarthelemy@247 452 emit audioFileLoaded();
lbarthelemy@247 453 }
lbarthelemy@247 454 #ifdef HAVE_VIDEO
lbarthelemy@247 455 else if (VideoFileReaderFactory::isKnownExtensions(extension))
lbarthelemy@247 456 {
lbarthelemy@247 457 ok = !(MainWindow::instance()->openVideoFile(filename, MainWindow::ReplaceMainModel));
lbarthelemy@247 458 emit audioFileLoaded();
lbarthelemy@247 459 }
lbarthelemy@247 460 #endif
lbarthelemy@247 461 else
lbarthelemy@247 462 {
lbarthelemy@247 463 ModelReader modelReader(m_document, layer);
lbarthelemy@247 464 ok = modelReader.parse(filename);
lbarthelemy@247 465 }
lbarthelemy@247 466 }
lbarthelemy@247 467 else
lbarthelemy@247 468 {
lbarthelemy@247 469 Model* model = iterModel->second;
lbarthelemy@247 470 m_document->addImportedModel(model);
lbarthelemy@247 471 m_document->setModel(layer, model);
lbarthelemy@247 472 }
lbarthelemy@247 473 }
lbarthelemy@247 474 }
lbarthelemy@247 475
lbarthelemy@247 476 return ok;
lbarthelemy@247 477 }
lbarthelemy@247 478
lbarthelemy@247 479 void EasaierSessionManager::importMetadata(const QString& filename, Pane* pane)
lbarthelemy@247 480 {
lbarthelemy@247 481 QString query = m_httpClient->getServletName() + "?theme=getFile&fileName="+filename;
lbarthelemy@247 482
lbarthelemy@247 483 loadFile( query, filename, LoadedFile::METADATA);
lbarthelemy@247 484
lbarthelemy@247 485 m_currentPane = pane;
lbarthelemy@247 486 }
lbarthelemy@247 487
lbarthelemy@247 488 void EasaierSessionManager::importRelatedMedia(std::list<QString> *relMediaList)
lbarthelemy@247 489 {
lbarthelemy@247 490 QString filename;
lbarthelemy@247 491 QString query;
lbarthelemy@247 492
lbarthelemy@247 493 std::list<QString>::iterator iter;
lbarthelemy@247 494 for (iter = relMediaList->begin(); iter != relMediaList->end(); iter++)
lbarthelemy@247 495 {
lbarthelemy@247 496 filename = *iter;
lbarthelemy@247 497
lbarthelemy@247 498 query = m_httpClient->getServletName() + "?theme=getFile&fileName=" + filename;
lbarthelemy@247 499
lbarthelemy@247 500 loadFile( query, filename, LoadedFile::RELATED_MEDIA);
lbarthelemy@247 501 }
lbarthelemy@247 502 }
lbarthelemy@247 503
lbarthelemy@247 504 void EasaierSessionManager::queryDatabase(const QString& themeName)
lbarthelemy@247 505 {
lbarthelemy@247 506
lbarthelemy@247 507 QueryThemeModel *themeModel = (m_queryModel->getThemes()).find(themeName)->second;
lbarthelemy@247 508 QString postFilePath = "";
lbarthelemy@247 509
lbarthelemy@247 510 //for the post
lbarthelemy@247 511 QString boundary="7d44e178b0434";
lbarthelemy@247 512 QString endline="\r\n";
lbarthelemy@247 513 QString start_delim="--"+boundary+endline;
lbarthelemy@249 514 QString cont_disp_str="Content-Disposition: form-data;";
lbarthelemy@247 515
lbarthelemy@247 516 QByteArray *payload = new QByteArray();
lbarthelemy@247 517 QDataStream data_stream(payload, QFile::WriteOnly | QFile::Unbuffered);
lbarthelemy@247 518 /////////
lbarthelemy@247 519
lbarthelemy@249 520 QString param = start_delim + cont_disp_str + "name=" + "\"theme\"" + endline+endline+themeName+endline;
lbarthelemy@247 521 data_stream.writeRawData(param.toStdString().c_str(),param.toStdString().length());
lbarthelemy@247 522
lbarthelemy@247 523 if(themeModel!=0){
lbarthelemy@247 524
lbarthelemy@247 525 PropertyContainer::PropertyList propertyList = themeModel->getProperties();
lbarthelemy@247 526 for(int i=0; i< ((int) propertyList.size());i++){
lbarthelemy@247 527 if (themeModel->getPropertyType(propertyList[i]) == PropertyContainer::FileProperty)
lbarthelemy@247 528 {
lbarthelemy@249 529 // We are here dealing with a filePath
lbarthelemy@247 530 postFilePath = themeModel->getPropertyValue(propertyList[i]);
lbarthelemy@247 531 if(postFilePath!=""){
lbarthelemy@247 532 QString only_filename = postFilePath.section( '/', -1 );
lbarthelemy@247 533 QString param = start_delim + cont_disp_str + "name=" + "\""+propertyList[i]+"\""+"; filename="+"\""+only_filename+"\""+endline+"Content-Type: application/octet-stream"+endline+endline;
lbarthelemy@247 534 data_stream.writeRawData(param.toStdString().c_str(),param.toStdString().length());
lbarthelemy@247 535
lbarthelemy@247 536 QFile file(postFilePath);
lbarthelemy@249 537 if (file.open( QFile::ReadOnly )) {
lbarthelemy@249 538 while (!file.atEnd()) {
lbarthelemy@249 539 QByteArray line = file.readLine();
lbarthelemy@249 540 data_stream.writeRawData(line.data(),line.length());
lbarthelemy@249 541 }
lbarthelemy@249 542 file.close();
lbarthelemy@247 543 }
lbarthelemy@247 544 }
lbarthelemy@247 545 }
lbarthelemy@247 546 else{
lbarthelemy@249 547 // Normal parameter
lbarthelemy@249 548 QString param = start_delim + cont_disp_str + "name=" + "\"" + propertyList[i]+ "\"" + endline+endline+themeModel->getPropertyValue(propertyList[i])+endline;
lbarthelemy@247 549 data_stream.writeRawData(param.toStdString().c_str(),param.toStdString().length());
lbarthelemy@247 550 }
lbarthelemy@247 551 }
lbarthelemy@247 552 QString stop_delim=endline+"--"+boundary+"--"+endline;
lbarthelemy@247 553 data_stream.writeRawData(stop_delim.toStdString().c_str(),stop_delim.toStdString().length());
lbarthelemy@247 554 }
lbarthelemy@247 555 QString filename = "/easaier/servlet/"+themeName;
lbarthelemy@247 556
lbarthelemy@247 557 QApplication::setOverrideCursor( Qt::WaitCursor );
lbarthelemy@247 558 loadFile(*payload, filename, LoadedFile::QUERY_RESULTS, postFilePath);
lbarthelemy@247 559 }