From acac1357006d5b0270bef70e708eca852668eb07 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Thu, 5 May 2011 17:56:31 +0200 Subject: [PATCH] Added uniboard sankore document directory transition --- src/core/UBApplication.cpp | 6 +-- src/core/UBApplication.h | 3 ++ src/frameworks/UBDesktopServices_mac.cpp | 2 +- src/transition/UniboardSankoreTransition.cpp | 51 +++++++++++++------- src/transition/UniboardSankoreTransition.h | 9 +++- 5 files changed, 47 insertions(+), 24 deletions(-) diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp index efd5a46f..93b81710 100644 --- a/src/core/UBApplication.cpp +++ b/src/core/UBApplication.cpp @@ -45,7 +45,6 @@ #include "ui_mainWindow.h" -#include "transition/UniboardSankoreTransition.h" QPointer UBApplication::undoStack; @@ -54,6 +53,7 @@ UBBoardController* UBApplication::boardController = 0; UBWebController* UBApplication::webController = 0; UBDocumentController* UBApplication::documentController = 0; UBSoftwareUpdateController* UBApplication::softwareUpdateController = 0; +UniboardSankoreTransition* UBApplication::mUniboardSankoreTransition = 0; UBMainWindow* UBApplication::mainWindow = 0; @@ -299,8 +299,8 @@ int UBApplication::exec(const QString& pFileToImport) UBLibraryController::preloadFirstOnlineLibrary(); - UniboardSankoreTransition* transition = new UniboardSankoreTransition(); - transition->backupUniboardDirectory(); + mUniboardSankoreTransition = new UniboardSankoreTransition(); + mUniboardSankoreTransition->documentTransition(); return QApplication::exec(); } diff --git a/src/core/UBApplication.h b/src/core/UBApplication.h index 11c80374..1a516828 100644 --- a/src/core/UBApplication.h +++ b/src/core/UBApplication.h @@ -12,12 +12,14 @@ #include "qtsingleapplication.h" +#include "transition/UniboardSankoreTransition.h" namespace Ui { class MainWindow; } + class UBBoardController; class UBWebController; class UBControlView; @@ -49,6 +51,7 @@ class UBApplication : public QtSingleApplication static UBWebController* webController; static UBDocumentController* documentController; static UBSoftwareUpdateController* softwareUpdateController; + static UniboardSankoreTransition* mUniboardSankoreTransition; static UBMainWindow* mainWindow; diff --git a/src/frameworks/UBDesktopServices_mac.cpp b/src/frameworks/UBDesktopServices_mac.cpp index 472973a7..25b2279c 100644 --- a/src/frameworks/UBDesktopServices_mac.cpp +++ b/src/frameworks/UBDesktopServices_mac.cpp @@ -82,7 +82,7 @@ QString UBDesktopServices::storageLocation(StandardLocation type) QString path = getFullPath(ref); if (QDesktopServices::DataLocation == type || QDesktopServices::CacheLocation == type) - path += "/Sankore"; + path += "/Sankore/Sankore 3.1"; return path; } diff --git a/src/transition/UniboardSankoreTransition.cpp b/src/transition/UniboardSankoreTransition.cpp index 18f952b4..0018d10b 100644 --- a/src/transition/UniboardSankoreTransition.cpp +++ b/src/transition/UniboardSankoreTransition.cpp @@ -2,28 +2,19 @@ #include "core/UBSettings.h" #include "frameworks/UBDesktopServices.h" #include "frameworks/UBFileSystemUtils.h" +#include "core/UBApplication.h" UniboardSankoreTransition::UniboardSankoreTransition(QObject *parent) : QObject(parent) { - mUniboardSourceDirectory = UBDesktopServices::storageLocation(QDesktopServices::DataLocation); - mUniboardSourceDirectory.replace("Sankore", "Mnemis/Uniboard"); + mUniboardSourceDirectory = UBFileSystemUtils::normalizeFilePath(UBDesktopServices::storageLocation(QDesktopServices::DataLocation)); + mUniboardSourceDirectory.replace("Sankore/Sankore 3.1", "Mnemis/Uniboard"); } - -bool UniboardSankoreTransition::backupUniboardDirectory() +UniboardSankoreTransition::~UniboardSankoreTransition() { - bool result = false; - QString destinationDirectory = UBDesktopServices::storageLocation(QDesktopServices::DesktopLocation); - if(QFileInfo(destinationDirectory).exists() && QFileInfo(mUniboardSourceDirectory).exists()){ - if(!destinationDirectory.endsWith("/")) destinationDirectory += "/"; - result = UBFileSystemUtils::copyDir(mUniboardSourceDirectory, destinationDirectory + QFileInfo(mUniboardSourceDirectory).fileName() + "BackupData/"); - if(result) documentTransition(); - } - - return result; + delete mTransitionDlg; } - void UniboardSankoreTransition::rollbackDocumentsTransition(QFileInfoList& fileInfoList) { QFileInfoList::iterator fileInfo; @@ -41,13 +32,32 @@ void UniboardSankoreTransition::rollbackDocumentsTransition(QFileInfoList& fileI void UniboardSankoreTransition::documentTransition() { - QString uniboardDocumentDirectory = mUniboardSourceDirectory + "/document"; - QString sankoreDocumentDirectory = UBSettings::uniboardDocumentDirectory(); + if (QFileInfo(mUniboardSourceDirectory).exists()){ + QString uniboardDocumentDirectory = mUniboardSourceDirectory + "/document"; + + QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(uniboardDocumentDirectory); + + QString backupDirectoryPath = UBFileSystemUtils::normalizeFilePath(UBDesktopServices::storageLocation(QDesktopServices::DesktopLocation)); + + mTransitionDlg = new UBUpdateDlg(0, fileInfoList.count(), backupDirectoryPath); + connect(mTransitionDlg, SIGNAL(updateFiles()), this, SLOT(startDocumentTransition())); + connect(this, SIGNAL(transitionFinished(bool)), mTransitionDlg, SLOT(onFilesUpdated(bool))); + mTransitionDlg->show(); + } +} + +void UniboardSankoreTransition::startDocumentTransition() +{ + bool result = false; + QString backupDestinationPath = mTransitionDlg->backupPath() + "/UniboardBackup"; + result = UBFileSystemUtils::copyDir(mUniboardSourceDirectory, backupDestinationPath); + QString uniboardDocumentDirectory = mUniboardSourceDirectory + "/document"; QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(uniboardDocumentDirectory); QFileInfoList::iterator fileInfo; - bool result = true; + QString sankoreDocumentDirectory = UBSettings::uniboardDocumentDirectory(); + for (fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end() && result; fileInfo += 1) { if (fileInfo->isDir() && fileInfo->fileName().startsWith("Uniboard Document ")){ QString sankoreDocumentName = fileInfo->fileName(); @@ -57,10 +67,15 @@ void UniboardSankoreTransition::documentTransition() } if (!result){ - qWarning() << "The transaction has failed during the copy of the " + fileInfo->filePath() + " document."; + qWarning() << "The transaction has failed"; rollbackDocumentsTransition(fileInfoList); + UBFileSystemUtils::deleteDir(backupDestinationPath); } else { UBFileSystemUtils::deleteDir(mUniboardSourceDirectory); } + + emit transitionFinished(result); + + mTransitionDlg->hide(); } \ No newline at end of file diff --git a/src/transition/UniboardSankoreTransition.h b/src/transition/UniboardSankoreTransition.h index 2ff7eed8..6b2ba37d 100644 --- a/src/transition/UniboardSankoreTransition.h +++ b/src/transition/UniboardSankoreTransition.h @@ -3,24 +3,29 @@ #include #include +#include "gui/UBUpdateDlg.h" class UniboardSankoreTransition : public QObject { Q_OBJECT public: explicit UniboardSankoreTransition(QObject *parent = 0); - bool backupUniboardDirectory(); + ~UniboardSankoreTransition(); void documentTransition(); + private: void rollbackDocumentsTransition(QFileInfoList& fileInfoList); + UBUpdateDlg* mTransitionDlg; protected: QString mUniboardSourceDirectory; signals: + void transitionFinished(bool result); -public slots: +private slots: + void startDocumentTransition(); };