From d7bd098f680ccdb600b60d092b406766d3a5bd7d Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Tue, 20 Mar 2012 17:27:40 +0100 Subject: [PATCH] added routeDataItem to write on disk on only once the file. Pay attention that QDir("tmp") on windows doesn't works because we don't have the right for writing there. --- src/board/UBLibraryController.cpp | 30 +++++++++++++++++++++++++----- src/board/UBLibraryController.h | 3 +++ src/gui/UBLibraryWidget.cpp | 27 ++++++++++++++------------- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/board/UBLibraryController.cpp b/src/board/UBLibraryController.cpp index 72e5dd1c..419c0966 100644 --- a/src/board/UBLibraryController.cpp +++ b/src/board/UBLibraryController.cpp @@ -105,11 +105,11 @@ void UBLibraryController::createDirectory(QUrl& pDirPath) QDir().mkpath(pDirPath.toLocalFile()); } -void UBLibraryController::routeItem(QString& pItem, QString pMiddleDirectory) + +QString UBLibraryController::getBaseDestinationForItem(QString& pItem) { - QFileInfo itemToRoute(pItem); - QString mimetype = UBFileSystemUtils::mimeTypeFromFileName(itemToRoute.fileName()); QString destination(""); + QString mimetype = UBFileSystemUtils::mimeTypeFromFileName(pItem); if(mimetype.contains("audio")) destination = mAudioStandardDirectoryPath.toLocalFile(); @@ -123,9 +123,29 @@ void UBLibraryController::routeItem(QString& pItem, QString pMiddleDirectory) else destination = mInteractiveUserDirectoryPath.toLocalFile(); } - else{ - return; + return destination; +} + +void UBLibraryController::routeDataItem(QString& pItem, QByteArray pData) +{ + QString fileName = QFileInfo(pItem).fileName(); + QString destination = getBaseDestinationForItem(pItem); + if(!destination.isEmpty()){ + QString destinationPath = UBFileSystemUtils::normalizeFilePath(QString("%0/%1").arg(destination).arg(fileName)); + QFile file(destinationPath); + if(file.open(QIODevice::WriteOnly)) { + file.write(pData); + file.close(); + } } + else + qWarning() << "no destination found for pItem " << pItem; +} + +void UBLibraryController::routeItem(QString& pItem, QString pMiddleDirectory) +{ + QFileInfo itemToRoute(pItem); + QString destination = getBaseDestinationForItem(pItem); if(!destination.isEmpty()){ if(!pMiddleDirectory.isEmpty()){ diff --git a/src/board/UBLibraryController.h b/src/board/UBLibraryController.h index 41c19568..d375a2e4 100644 --- a/src/board/UBLibraryController.h +++ b/src/board/UBLibraryController.h @@ -123,7 +123,9 @@ class UBLibraryController : public QObject void createNewFolder(QString name, UBLibElement* parentElem); bool canItemsOnElementBeDeleted(UBLibElement *pElement); + void routeItem(QString& pItem, QString pMiddleDirectory = QString()); + void routeDataItem(QString& pItem, QByteArray pData); signals: void dialogClosed(int state); @@ -175,6 +177,7 @@ class UBLibraryController : public QObject UBBoardController *mBoardController; int mLastItemOffsetIndex; + QString getBaseDestinationForItem(QString& pItem); }; diff --git a/src/gui/UBLibraryWidget.cpp b/src/gui/UBLibraryWidget.cpp index 247aa6f9..11141958 100644 --- a/src/gui/UBLibraryWidget.cpp +++ b/src/gui/UBLibraryWidget.cpp @@ -698,19 +698,20 @@ void UBLibraryWidget::onAddDownloadedFileToLibrary(bool pSuccess, QUrl sourceUrl Q_UNUSED(pContentHeader); if(pSuccess) { - QDir dir; - dir.mkdir("tmp"); - QString qsFileName = QFileInfo(sourceUrl.toString()).fileName(); - QString qsFilePath = UBFileSystemUtils::normalizeFilePath(QString("tmp/%0").arg(qsFileName)); - QFile f(qsFilePath); - if(f.open(QIODevice::WriteOnly)) - { - f.write(pData); - f.close(); - } - mLibraryController->routeItem(qsFilePath); - dir.remove(qsFileName); - dir.rmdir("tmp"); // Due to Qt, the directoy will be removed only if it's empty :) +// QDir dir; +// dir.mkdir("tmp"); +// QString qsFileName = QFileInfo(sourceUrl.toString()).fileName(); +// QString qsFilePath = UBFileSystemUtils::normalizeFilePath(QString("tmp/%0").arg(qsFileName)); +// QFile f(qsFilePath); +// if(f.open(QIODevice::WriteOnly)) +// { +// f.write(pData); +// f.close(); +// } + QString urlString = sourceUrl.toString(); + mLibraryController->routeDataItem(urlString, pData); +// dir.remove(qsFileName); +// dir.rmdir("tmp"); // Due to Qt, the directoy will be removed only if it's empty :) } }