From 588f4551a60acf4a0a65496e11494eb6f3ee26e0 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Thu, 13 Sep 2012 09:01:23 +0200 Subject: [PATCH 1/6] changed teacher action color on presentation mode --- src/gui/UBTeacherGuideWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/UBTeacherGuideWidget.cpp b/src/gui/UBTeacherGuideWidget.cpp index afb982b5..a56fe901 100644 --- a/src/gui/UBTeacherGuideWidget.cpp +++ b/src/gui/UBTeacherGuideWidget.cpp @@ -554,7 +554,7 @@ void UBTeacherGuidePresentationWidget::showData( QVector data QTreeWidgetItem* newWidgetItem = new QTreeWidgetItem( mpRootWidgetItem); newWidgetItem->setText(0, element->attributes.value("task")); newWidgetItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable); - QString colorString = element->attributes.value("owner").toInt() == 0 ? "red" : "green"; + QString colorString = element->attributes.value("owner").toInt() == 0 ? "blue" : "green"; UBTGAdaptableText* textWidget = new UBTGAdaptableText(newWidgetItem, 0); textWidget->bottomMargin(14); textWidget->setStyleSheet( "QWidget {background: #EEEEEE; border:none; color:" + colorString + ";}"); From e7eefbf5b6971a3abd01df4538be4fffd9052961 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Thu, 13 Sep 2012 09:17:08 +0200 Subject: [PATCH 2/6] reorganized the export list --- src/core/UBDocumentManager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/UBDocumentManager.cpp b/src/core/UBDocumentManager.cpp index 6119a8b1..2ccb487b 100644 --- a/src/core/UBDocumentManager.cpp +++ b/src/core/UBDocumentManager.cpp @@ -66,15 +66,15 @@ UBDocumentManager::UBDocumentManager(QObject *parent) QString dummyWidgets = tr("widgets"); UBExportCFF* cffExporter = new UBExportCFF(this); - mExportAdaptors.append(cffExporter); UBExportFullPDF* exportFullPdf = new UBExportFullPDF(this); - mExportAdaptors.append(exportFullPdf); UBExportDocument* exportDocument = new UBExportDocument(this); + UBWebPublisher* webPublished = new UBWebPublisher(this); mExportAdaptors.append(exportDocument); + mExportAdaptors.append(webPublished); + mExportAdaptors.append(exportFullPdf); + mExportAdaptors.append(cffExporter); // UBExportWeb* exportWeb = new UBExportWeb(this); // mExportAdaptors.append(exportWeb); - UBWebPublisher* webPublished = new UBWebPublisher(this); - mExportAdaptors.append(webPublished); UBImportDocument* documentImport = new UBImportDocument(this); mImportAdaptors.append(documentImport); From af82e62a0b27cd51fe7a5b9db956cad6f9cf49d6 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Thu, 13 Sep 2012 11:15:25 +0200 Subject: [PATCH 3/6] improved gui for teacherguide --- src/gui/UBTeacherGuideWidgetsTools.cpp | 50 +++++++++++++++++--------- src/gui/UBTeacherGuideWidgetsTools.h | 2 ++ 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/gui/UBTeacherGuideWidgetsTools.cpp b/src/gui/UBTeacherGuideWidgetsTools.cpp index c67b09a8..0a6a0121 100644 --- a/src/gui/UBTeacherGuideWidgetsTools.cpp +++ b/src/gui/UBTeacherGuideWidgetsTools.cpp @@ -86,7 +86,6 @@ UBTGActionWidget::UBTGActionWidget(QTreeWidgetItem* widget, QWidget* parent, con mpTask = new UBTGAdaptableText(widget,this); mpTask->setPlaceHolderText(tr("Type task here ...")); mpTask->setAcceptRichText(true); - mpTask->setTextColor(QColor().green()); mpTask->setObjectName("ActionWidgetTaskTextEdit"); mpLayout->addWidget(mpOwner); mpLayout->addWidget(mpTask); @@ -147,7 +146,6 @@ void UBTGAdaptableText::setPlaceHolderText(QString text) // the space addition is to make this string unique and check against it to know // if we are talking about a typed string or the placeholder string mPlaceHolderText = text + " "; - setTextColor(QColor(Qt::lightGray)); setPlainText(mPlaceHolderText); } @@ -230,9 +228,12 @@ void UBTGAdaptableText::bottomMargin(int newValue) onTextChanged(); } -void UBTGAdaptableText::focusInEvent(QFocusEvent* e){ +void UBTGAdaptableText::focusInEvent(QFocusEvent* e) +{ + qDebug() << "pippa"; if(isReadOnly()){ e->ignore(); + qDebug() << "ignored"; } managePlaceholder(true); QTextEdit::focusInEvent(e); @@ -246,11 +247,13 @@ void UBTGAdaptableText::focusOutEvent(QFocusEvent* e){ void UBTGAdaptableText::managePlaceholder(bool focus){ if(focus){ if(toPlainText() == mPlaceHolderText){ + qDebug() << "Place holder found"; setTextColor(QColor(Qt::black)); setPlainText(""); } setCursorToTheEnd(); - }else{ + } + else{ if(toPlainText().isEmpty()){ setTextColor(QColor(Qt::lightGray)); setPlainText(mPlaceHolderText); @@ -323,6 +326,7 @@ UBTGMediaWidget::UBTGMediaWidget(QTreeWidgetItem* widget, QWidget* parent,const , mpDropMeWidget(NULL) , mpWorkWidget(NULL) , mpLayout(NULL) + , mpMediaLayout(NULL) , mpTitle(NULL) , mpMediaLabelWidget(NULL) , mpMediaWidget(NULL) @@ -330,6 +334,7 @@ UBTGMediaWidget::UBTGMediaWidget(QTreeWidgetItem* widget, QWidget* parent,const , mMediaPath(QString("")) , mIsPresentationMode(false) , mIsInitializationMode(false) + , mMediaWidgetHeight(150) { setObjectName(name); mpDropMeWidget = new QLabel(); @@ -347,6 +352,7 @@ UBTGMediaWidget::UBTGMediaWidget(QString mediaPath, QTreeWidgetItem* widget, QWi , mpDropMeWidget(NULL) , mpWorkWidget(NULL) , mpLayout(NULL) + , mpMediaLayout(NULL) , mpTitle(NULL) , mpMediaLabelWidget(NULL) , mpMediaWidget(NULL) @@ -354,6 +360,7 @@ UBTGMediaWidget::UBTGMediaWidget(QString mediaPath, QTreeWidgetItem* widget, QWi , mIsPresentationMode(true) , mMediaType("") , mIsInitializationMode(false) + , mMediaWidgetHeight(150) { setObjectName(name); mMediaPath = UBApplication::boardController->selectedDocument()->persistencePath()+ "/" + mediaPath; @@ -368,6 +375,7 @@ UBTGMediaWidget::~UBTGMediaWidget() DELETEPTR(mpMediaLabelWidget); DELETEPTR(mpMediaWidget); DELETEPTR(mpWebView); + DELETEPTR(mpMediaLayout); DELETEPTR(mpLayout); removeWidget(mpDropMeWidget); @@ -456,9 +464,8 @@ void UBTGMediaWidget::createWorkWidget(bool forceFlashMediaType) mpMediaLabelWidget = new QLabel(); QPixmap pixmap = QPixmap(mMediaPath); - pixmap = pixmap.scaledToWidth(mpTreeWidgetItem->treeWidget()->size().width()); + pixmap = pixmap.scaledToHeight(mMediaWidgetHeight); mpMediaLabelWidget->setPixmap(pixmap); - mpMediaLabelWidget->setScaledContents(true); } else if(mimeType.contains("widget") && !forceFlashMediaType){ mMediaType = "w3c"; @@ -508,31 +515,43 @@ void UBTGMediaWidget::createWorkWidget(bool forceFlashMediaType) if(setMedia){ setAcceptDrops(false); mpWorkWidget = new QWidget(this); - mpLayout = new QVBoxLayout(mpWorkWidget); if(!mIsPresentationMode){ + mpLayout = new QVBoxLayout(mpWorkWidget); mpTitle = new UBTGAdaptableText(mpTreeWidgetItem,mpWorkWidget); mpTitle->setPlaceHolderText(tr("Type title here...")); mpLayout->addWidget(mpTitle); + mpMediaLayout = new QHBoxLayout; + mpLayout->addLayout(mpMediaLayout); + mpWorkWidget->setLayout(mpLayout); + } + else{ + mpMediaLayout = new QHBoxLayout(mpWorkWidget); + mpWorkWidget->setLayout(mpMediaLayout); } + + mpMediaLayout->addStretch(1); + if(mpMediaLabelWidget){ - mpMediaLabelWidget->setMaximumHeight(width()); + mpMediaLabelWidget->setFixedHeight(mMediaWidgetHeight); mpMediaLabelWidget->setParent(mpWorkWidget); - mpLayout->addWidget(mpMediaLabelWidget); + mpMediaLayout->addWidget(mpMediaLabelWidget); } else if (mpMediaWidget){ - mpMediaWidget->setMaximumHeight(width()); + mpMediaWidget->setFixedHeight(mMediaWidgetHeight); mpMediaWidget->setParent(mpWorkWidget); - mpLayout->addWidget(mpMediaWidget); + mpMediaLayout->addWidget(mpMediaWidget); } else if (mpWebView){ - mpWebView->setMaximumHeight(width()); + mpWebView->setFixedHeight(mMediaWidgetHeight); mpWebView->setParent(mpWorkWidget); - mpLayout->addWidget(mpWebView); + mpMediaLayout->addWidget(mpWebView); mpWebView->show(); } - mpWorkWidget->setLayout(mpLayout); + mpMediaLayout->addStretch(1); addWidget(mpWorkWidget); setCurrentWidget(mpWorkWidget); + mpWorkWidget->show(); + } } @@ -565,8 +584,7 @@ void UBTGMediaWidget::mousePressEvent(QMouseEvent *event) { if (!mIsPresentationMode) event->ignore(); - else{ - + else{ QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData(); QList urlList; diff --git a/src/gui/UBTeacherGuideWidgetsTools.h b/src/gui/UBTeacherGuideWidgetsTools.h index cd37fe2d..2247fbf7 100644 --- a/src/gui/UBTeacherGuideWidgetsTools.h +++ b/src/gui/UBTeacherGuideWidgetsTools.h @@ -166,6 +166,7 @@ private: QLabel* mpDropMeWidget; QWidget* mpWorkWidget; QVBoxLayout* mpLayout; + QHBoxLayout* mpMediaLayout; UBTGAdaptableText* mpTitle; QLabel* mpMediaLabelWidget; UBMediaWidget* mpMediaWidget; @@ -174,6 +175,7 @@ private: bool mIsPresentationMode; QString mMediaType; bool mIsInitializationMode; + int mMediaWidgetHeight; }; From 472905d0479bf4036bb82a6d837c9c44db797ac7 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Thu, 13 Sep 2012 12:52:44 +0200 Subject: [PATCH 4/6] fixed (workaround) issue on deleting working page --- src/board/UBBoardController.cpp | 6 ++++-- src/board/UBBoardController.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/board/UBBoardController.cpp b/src/board/UBBoardController.cpp index d5032fc0..ac5e7047 100644 --- a/src/board/UBBoardController.cpp +++ b/src/board/UBBoardController.cpp @@ -94,6 +94,7 @@ UBBoardController::UBBoardController(UBMainWindow* mainWindow) , mSystemScaleFactor(1.0) , mCleanupDone(false) , mCacheWidgetIsEnabled(false) + , mDeletingSceneIndex(-1) { mZoomFactor = UBSettings::settings()->boardZoomFactor->get().toDouble(); @@ -670,6 +671,7 @@ void UBBoardController::deleteScene(int nIndex) { if (selectedDocument()->pageCount()>=2) { + mDeletingSceneIndex = nIndex; QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); persistCurrentScene(); showMessage(tr("Delete page %1 from document").arg(nIndex), true); @@ -679,12 +681,12 @@ void UBBoardController::deleteScene(int nIndex) deletePages(scIndexes); selectedDocument()->setMetaData(UBSettings::documentUpdatedAt, UBStringUtils::toUtcIsoDateTime(QDateTime::currentDateTime())); - if (nIndex >= pageCount()) nIndex = pageCount()-1; setActiveDocumentScene(nIndex); showMessage(tr("Page %1 deleted").arg(nIndex)); QApplication::restoreOverrideCursor(); + mDeletingSceneIndex = -1; } } @@ -1781,7 +1783,7 @@ void UBBoardController::show() void UBBoardController::persistCurrentScene() { if(UBPersistenceManager::persistenceManager() - && selectedDocument() && mActiveScene + && selectedDocument() && mActiveScene && mActiveSceneIndex != mDeletingSceneIndex && (mActiveSceneIndex >= 0) && (mActiveScene->isModified() || (UBApplication::boardController->paletteManager()->teacherGuideDockWidget() && UBApplication::boardController->paletteManager()->teacherGuideDockWidget()->teacherGuideWidget()->isModified()))) { diff --git a/src/board/UBBoardController.h b/src/board/UBBoardController.h index 042ba24a..50f554de 100644 --- a/src/board/UBBoardController.h +++ b/src/board/UBBoardController.h @@ -280,6 +280,7 @@ class UBBoardController : public UBDocumentContainer QMap > mActionTexts; bool mCacheWidgetIsEnabled; QGraphicsItem* mLastCreatedItem; + int mDeletingSceneIndex; private slots: void stylusToolDoubleClicked(int tool); From 58b994ed07f314fe9f216a3bf3450ce845b48ba0 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Fri, 14 Sep 2012 15:22:28 +0200 Subject: [PATCH 5/6] fixed issue with erase background when the is no background --- src/domain/UBGraphicsScene.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index ec2489d4..746ad4db 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1095,8 +1095,10 @@ void UBGraphicsScene::clearContent(clearCase pCase) switch (pCase) { case clearBackground : - removeItem(mBackgroundObject); - removedItems << mBackgroundObject; + if(mBackgroundObject){ + removeItem(mBackgroundObject); + removedItems << mBackgroundObject; + } break; case clearItemsAndAnnotations : From 1130a8aa7e4ed3d97ba15461bd1cb707dc3e37dc Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Fri, 14 Sep 2012 17:31:33 +0300 Subject: [PATCH 6/6] SANKORE-1074 Document navigator: "Add pages from file" isn't work with old UBZ --- src/adaptors/UBImportDocument.cpp | 86 ++++++++++++---------------- src/adaptors/UBImportDocument.h | 2 +- src/core/UBDocumentManager.cpp | 2 +- src/core/UBPersistenceManager.cpp | 43 +++++++++----- src/core/UBPersistenceManager.h | 7 ++- src/frameworks/UBFileSystemUtils.cpp | 3 +- 6 files changed, 74 insertions(+), 69 deletions(-) diff --git a/src/adaptors/UBImportDocument.cpp b/src/adaptors/UBImportDocument.cpp index a306285d..0bf32c82 100644 --- a/src/adaptors/UBImportDocument.cpp +++ b/src/adaptors/UBImportDocument.cpp @@ -56,7 +56,7 @@ QString UBImportDocument::importFileFilter() } -QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString& pDir) +bool UBImportDocument::extractFileToDir(const QFile& pZipFile, const QString& pDir, QString& documentRoot) { QDir rootDir(pDir); @@ -65,63 +65,45 @@ QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString& if(!zip.open(QuaZip::mdUnzip)) { qWarning() << "Import failed. Cause zip.open(): " << zip.getZipError(); - return ""; + return false; } zip.setFileNameCodec("UTF-8"); QuaZipFileInfo info; QuaZipFile file(&zip); - // TODO UB 4.x implement a mechanism that can replace an existing - // document based on the UID of the document. - bool createNewDocument = true; - QString documentRootFolder; - - // first we search the metadata.rdf to check the document properties - for(bool more = zip.goToFirstFile(); more; more = zip.goToNextFile()) - { - if(!zip.getCurrentFileInfo(&info)) - { - qWarning() << "Import failed. Cause: getCurrentFileInfo(): " << zip.getZipError(); - return ""; - } - - QFileInfo currentFileInfo(pDir + "/" + file.getActualFileName()); - } - - if (createNewDocument) - documentRootFolder = UBPersistenceManager::persistenceManager()->generateUniqueDocumentPath(); - - QFile out; char c; + documentRoot = UBPersistenceManager::persistenceManager()->generateUniqueDocumentPath(pDir); for(bool more=zip.goToFirstFile(); more; more=zip.goToNextFile()) { if(!zip.getCurrentFileInfo(&info)) { //TOD UB 4.3 O display error to user or use crash reporter qWarning() << "Import failed. Cause: getCurrentFileInfo(): " << zip.getZipError(); - return ""; + return false; } if(!file.open(QIODevice::ReadOnly)) { qWarning() << "Import failed. Cause: file.open(): " << zip.getZipError(); - return ""; + return false; } if(file.getZipError()!= UNZ_OK) { qWarning() << "Import failed. Cause: file.getFileName(): " << zip.getZipError(); - return ""; + return false; } - QString newFileName = documentRootFolder + "/" + file.getActualFileName(); + QString newFileName = documentRoot + "/" + file.getActualFileName(); QFileInfo newFileInfo(newFileName); - rootDir.mkpath(newFileInfo.absolutePath()); + if (!rootDir.mkpath(newFileInfo.absolutePath())) + return false; out.setFileName(newFileName); - out.open(QIODevice::WriteOnly); + if (!out.open(QIODevice::WriteOnly)) + return false; // Slow like hell (on GNU/Linux at least), but it is not my fault. // Not ZIP/UNZIP package's fault either. @@ -131,7 +113,7 @@ QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString& { qWarning() << "Import failed. Cause: Unable to write file"; out.close(); - return ""; + return false; } while(file.getChar(&c)) @@ -142,13 +124,13 @@ QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString& if(file.getZipError()!=UNZ_OK) { qWarning() << "Import failed. Cause: " << zip.getZipError(); - return ""; + return false; } if(!file.atEnd()) { qWarning() << "Import failed. Cause: read all but not EOF"; - return ""; + return false; } file.close(); @@ -156,7 +138,7 @@ QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString& if(file.getZipError()!=UNZ_OK) { qWarning() << "Import failed. Cause: file.close(): " << file.getZipError(); - return ""; + return false; } } @@ -166,11 +148,10 @@ QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString& if(zip.getZipError()!=UNZ_OK) { qWarning() << "Import failed. Cause: zip.close(): " << zip.getZipError(); - return ""; + return false; } - - return documentRootFolder; + return true; } UBDocumentProxy* UBImportDocument::importFile(const QFile& pFile, const QString& pGroup) @@ -183,17 +164,17 @@ UBDocumentProxy* UBImportDocument::importFile(const QFile& pFile, const QString& // first unzip the file to the correct place QString path = UBSettings::userDocumentDirectory(); - QString documentRootFolder = expandFileToDir(pFile, path); - - if(!documentRootFolder.length()){ + QString documentRootFolder; + + if(!extractFileToDir(pFile, path, documentRootFolder)){ UBApplication::showMessage(tr("Import of file %1 failed.").arg(fi.baseName())); - return 0; - } - else{ - UBDocumentProxy* newDocument = UBPersistenceManager::persistenceManager()->createDocumentFromDir(documentRootFolder, pGroup); - UBApplication::showMessage(tr("Import successful.")); - return newDocument; + return NULL; } + + + UBDocumentProxy* newDocument = UBPersistenceManager::persistenceManager()->createDocumentFromDir(documentRootFolder, pGroup); + UBApplication::showMessage(tr("Import successful.")); + return newDocument; } bool UBImportDocument::addFileToDocument(UBDocumentProxy* pDocument, const QFile& pFile) @@ -203,9 +184,18 @@ bool UBImportDocument::addFileToDocument(UBDocumentProxy* pDocument, const QFile QString path = UBFileSystemUtils::createTempDir(); - QString documentRootFolder = expandFileToDir(pFile, path); - - UBPersistenceManager::persistenceManager()->addDirectoryContentToDocument(documentRootFolder, pDocument); + QString documentRootFolder; + if (!extractFileToDir(pFile, path, documentRootFolder)) + { + UBApplication::showMessage(tr("Import of file %1 failed.").arg(fi.baseName())); + return false; + } + + if (!UBPersistenceManager::persistenceManager()->addDirectoryContentToDocument(documentRootFolder, pDocument)) + { + UBApplication::showMessage(tr("Import of file %1 failed.").arg(fi.baseName())); + return false; + } UBFileSystemUtils::deleteDir(path); diff --git a/src/adaptors/UBImportDocument.h b/src/adaptors/UBImportDocument.h index a7530200..18abaea1 100644 --- a/src/adaptors/UBImportDocument.h +++ b/src/adaptors/UBImportDocument.h @@ -37,7 +37,7 @@ class UBImportDocument : public UBDocumentBasedImportAdaptor virtual bool addFileToDocument(UBDocumentProxy* pDocument, const QFile& pFile); private: - QString expandFileToDir(const QFile& pZipFile, const QString& pDir); + bool extractFileToDir(const QFile& pZipFile, const QString& pDir, QString& documentRoot); }; #endif /* UBIMPORTDOCUMENT_H_ */ diff --git a/src/core/UBDocumentManager.cpp b/src/core/UBDocumentManager.cpp index 6119a8b1..58430dbe 100644 --- a/src/core/UBDocumentManager.cpp +++ b/src/core/UBDocumentManager.cpp @@ -194,7 +194,7 @@ int UBDocumentManager::addFilesToDocument(UBDocumentProxy* document, QStringList int nImportedDocuments = 0; foreach(const QString& fileName, fileNames) { - UBApplication::showMessage(tr("Importing file").arg(fileName)); + UBApplication::showMessage(tr("Importing file %1").arg(fileName)); QFile file(fileName); QFileInfo fileInfo(file); diff --git a/src/core/UBPersistenceManager.cpp b/src/core/UBPersistenceManager.cpp index e7a609d8..21733038 100644 --- a/src/core/UBPersistenceManager.cpp +++ b/src/core/UBPersistenceManager.cpp @@ -667,11 +667,8 @@ void UBPersistenceManager::copyPage(UBDocumentProxy* pDocumentProxy, const int s int UBPersistenceManager::sceneCount(const UBDocumentProxy* proxy) { - return sceneCountInDir(proxy->persistencePath()); -} + const QString pPath = proxy->persistencePath(); -int UBPersistenceManager::sceneCountInDir(const QString& pPath) -{ int pageIndex = 0; bool moreToProcess = true; bool addedMissingZeroPage = false; @@ -709,15 +706,23 @@ int UBPersistenceManager::sceneCountInDir(const QString& pPath) return pageIndex; } - -QString UBPersistenceManager::generateUniqueDocumentPath() +QStringList UBPersistenceManager::getSceneFileNames(const QString& folder) { - QString ubPath = UBSettings::userDocumentDirectory(); + QDir dir(folder, "page???.svg", QDir::Name, QDir::Files); + return dir.entryList(); +} +QString UBPersistenceManager::generateUniqueDocumentPath(const QString& baseFolder) +{ QDateTime now = QDateTime::currentDateTime(); QString dirName = now.toString("yyyy-MM-dd hh-mm-ss.zzz"); - return ubPath + QString("/Sankore Document %1").arg(dirName); + return baseFolder + QString("/Sankore Document %1").arg(dirName); +} + +QString UBPersistenceManager::generateUniqueDocumentPath() +{ + return generateUniqueDocumentPath(UBSettings::userDocumentDirectory()); } @@ -730,34 +735,42 @@ void UBPersistenceManager::generatePathIfNeeded(UBDocumentProxy* pDocumentProxy) } -void UBPersistenceManager::addDirectoryContentToDocument(const QString& documentRootFolder, UBDocumentProxy* pDocument) +bool UBPersistenceManager::addDirectoryContentToDocument(const QString& documentRootFolder, UBDocumentProxy* pDocument) { - int sourcePageCount = sceneCountInDir(documentRootFolder); + QStringList sourceScenes = getSceneFileNames(documentRootFolder); + if (sourceScenes.empty()) + return false; int targetPageCount = pDocument->pageCount(); - for(int sourceIndex = 0 ; sourceIndex < sourcePageCount; sourceIndex++) + for(int sourceIndex = 0 ; sourceIndex < sourceScenes.size(); sourceIndex++) { int targetIndex = targetPageCount + sourceIndex; - QFile svg(documentRootFolder + UBFileSystemUtils::digitFileFormat("/page%1.svg", sourceIndex)); - svg.copy(pDocument->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.svg", targetIndex)); + QFile svg(documentRootFolder + "/" + sourceScenes[sourceIndex]); + if (!svg.copy(pDocument->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.svg", targetIndex))) + return false; UBSvgSubsetAdaptor::setSceneUuid(pDocument, targetIndex, QUuid::createUuid()); QFile thumb(documentRootFolder + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", sourceIndex)); + // We can ignore error in this case, thumbnail will be genarated thumb.copy(pDocument->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.thumbnail.jpg", targetIndex)); } foreach(QString dir, mDocumentSubDirectories) { qDebug() << "copying " << documentRootFolder << "/" << dir << " to " << pDocument->persistencePath() << "/" + dir; - - UBFileSystemUtils::copyDir(documentRootFolder + "/" + dir, pDocument->persistencePath() + "/" + dir); + + QDir srcDir(documentRootFolder + "/" + dir); + if (srcDir.exists()) + if (!UBFileSystemUtils::copyDir(documentRootFolder + "/" + dir, pDocument->persistencePath() + "/" + dir)) + return false; } pDocument->setPageCount(sceneCount(pDocument)); + return false; } diff --git a/src/core/UBPersistenceManager.h b/src/core/UBPersistenceManager.h index ddd0c5db..c38e9895 100644 --- a/src/core/UBPersistenceManager.h +++ b/src/core/UBPersistenceManager.h @@ -79,13 +79,14 @@ class UBPersistenceManager : public QObject virtual QStringList allVideos(const QDir& dir); virtual QStringList allWidgets(const QDir& dir); - virtual QString generateUniqueDocumentPath(); + QString generateUniqueDocumentPath(); + QString generateUniqueDocumentPath(const QString& baseFolder); QString teacherGuideAbsoluteObjectPath(UBDocumentProxy* pDocumentProxy); QString addObjectToTeacherGuideDirectory(UBDocumentProxy* proxy, QString pPath); QString addWidgetToTeacherGuideDirectory(UBDocumentProxy* pDocumentProxy, QString pPath); - virtual void addDirectoryContentToDocument(const QString& documentRootFolder, UBDocumentProxy* pDocument); + bool addDirectoryContentToDocument(const QString& documentRootFolder, UBDocumentProxy* pDocument); virtual void upgradeDocumentIfNeeded(UBDocumentProxy* pDocumentProxy); @@ -128,7 +129,7 @@ class UBPersistenceManager : public QObject int sceneCount(const UBDocumentProxy* pDocumentProxy); - int sceneCountInDir(const QString& pPath); + static QStringList getSceneFileNames(const QString& folder); QList > allDocumentProxies(); diff --git a/src/frameworks/UBFileSystemUtils.cpp b/src/frameworks/UBFileSystemUtils.cpp index 1cd529cd..36a61945 100644 --- a/src/frameworks/UBFileSystemUtils.cpp +++ b/src/frameworks/UBFileSystemUtils.cpp @@ -273,7 +273,8 @@ bool UBFileSystemUtils::copyDir(const QString& pSourceDirPath, const QString& pT QDir dirSource(pSourceDirPath); QDir dirTarget(pTargetDirPath); - dirTarget.mkpath(pTargetDirPath); + if (!dirTarget.mkpath(pTargetDirPath)) + return false; bool successSoFar = true;