diff --git a/Sankore_3.1.pro b/Sankore_3.1.pro index 446840e1..66c50fac 100644 --- a/Sankore_3.1.pro +++ b/Sankore_3.1.pro @@ -346,3 +346,9 @@ INSTALLS = UB_ETC \ UB_THIRDPARTY_INTERACTIVE OTHER_FILES += + +HEADERS += \ + src/transition/UniboardSankoreTransition.h + +SOURCES += \ + src/transition/UniboardSankoreTransition.cpp diff --git a/src/board/UBLibraryController.cpp b/src/board/UBLibraryController.cpp index 745187d2..5cd94b91 100644 --- a/src/board/UBLibraryController.cpp +++ b/src/board/UBLibraryController.cpp @@ -83,6 +83,11 @@ UBLibraryController::UBLibraryController(QWidget *pParentWidget, UBBoardControll } +bool UBLibraryController::canItemsOnElementBeDeleted(UBLibElement *pElement) +{ + return !pElement->path().toLocalFile().startsWith(UBSettings::settings()->uniboardShapeLibraryDirectory()); +} + void UBLibraryController::createInternalWidgetItems() { QStringList toolUris = UBToolsManager::manager()->allToolIDs(); @@ -369,6 +374,7 @@ QList UBLibraryController::listElementsInPath(const QString& pPat QList UBLibraryController::listElementsInVirtualForlder(UBLibElement* pElement) { + Q_UNUSED(pElement); return mFavoriteList; } diff --git a/src/board/UBLibraryController.h b/src/board/UBLibraryController.h index 2a84361d..2596d87c 100644 --- a/src/board/UBLibraryController.h +++ b/src/board/UBLibraryController.h @@ -109,6 +109,7 @@ class UBLibraryController : public QObject QString favoritePath(); void createNewFolder(QString name, UBLibElement* parentElem); + bool canItemsOnElementBeDeleted(UBLibElement *pElement); signals: void dialogClosed(int state); diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp index 623ed36b..efd5a46f 100644 --- a/src/core/UBApplication.cpp +++ b/src/core/UBApplication.cpp @@ -45,6 +45,8 @@ #include "ui_mainWindow.h" +#include "transition/UniboardSankoreTransition.h" + QPointer UBApplication::undoStack; UBApplicationController* UBApplication::applicationController = 0; @@ -297,6 +299,9 @@ int UBApplication::exec(const QString& pFileToImport) UBLibraryController::preloadFirstOnlineLibrary(); + UniboardSankoreTransition* transition = new UniboardSankoreTransition(); + transition->backupUniboardDirectory(); + return QApplication::exec(); } diff --git a/src/core/UBSettings.cpp b/src/core/UBSettings.cpp index 6c117f7e..da6aeee1 100644 --- a/src/core/UBSettings.cpp +++ b/src/core/UBSettings.cpp @@ -731,8 +731,9 @@ QString UBSettings::uniboardDataDirectory() // ", defaulting to " + UBDesktopServices::storageLocation(QDesktopServices::DataLocation); } } - - return UBDesktopServices::storageLocation(QDesktopServices::DataLocation); + QString qtDataPath = UBFileSystemUtils::normalizeFilePath(UBDesktopServices::storageLocation(QDesktopServices::DataLocation)); + qtDataPath.replace("/Sankore 3.1", ""); + return qtDataPath; } diff --git a/src/frameworks/UBDesktopServices_mac.cpp b/src/frameworks/UBDesktopServices_mac.cpp index c2a54bdd..472973a7 100644 --- a/src/frameworks/UBDesktopServices_mac.cpp +++ b/src/frameworks/UBDesktopServices_mac.cpp @@ -70,8 +70,7 @@ QString UBDesktopServices::storageLocation(StandardLocation type) short domain = kOnAppropriateDisk; - if (QDesktopServices::DataLocation == type - || QDesktopServices::CacheLocation == type) + if (QDesktopServices::DataLocation == type || QDesktopServices::CacheLocation == type) domain = kUserDomain; // http://developer.apple.com/documentation/Carbon/Reference/Folder_Manager/Reference/reference.html @@ -82,9 +81,8 @@ QString UBDesktopServices::storageLocation(StandardLocation type) QString path = getFullPath(ref); - if (QDesktopServices::DataLocation == type - || QDesktopServices::CacheLocation == type) - path += "/" + QCoreApplication::applicationName(); + if (QDesktopServices::DataLocation == type || QDesktopServices::CacheLocation == type) + path += "/Sankore"; return path; } diff --git a/src/frameworks/UBFileSystemUtils.cpp b/src/frameworks/UBFileSystemUtils.cpp index d811d2bb..b50935c5 100644 --- a/src/frameworks/UBFileSystemUtils.cpp +++ b/src/frameworks/UBFileSystemUtils.cpp @@ -154,8 +154,7 @@ QStringList UBFileSystemUtils::allFiles(const QString& pDirPath) QFileInfoList UBFileSystemUtils::allElementsInDirectory(const QString& pDirPath) { QDir dir = QDir(pDirPath); - dir.setFilter(QDir::Files | QDir::Dirs | - QDir::NoDotAndDotDot | QDir::NoSymLinks); + dir.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); dir.setSorting(QDir::DirsFirst); return QFileInfoList(dir.entryInfoList()); @@ -164,8 +163,6 @@ QFileInfoList UBFileSystemUtils::allElementsInDirectory(const QString& pDirPath) bool UBFileSystemUtils::deleteDir(const QString& pDirPath) { - //qDebug() << "UBFileSystemUtils::deleteDir.start" << pDirPath; - if (pDirPath == "" || pDirPath == "." || pDirPath == "..") return false; diff --git a/src/gui/UBLibActionBar.cpp b/src/gui/UBLibActionBar.cpp index 2ebd73ea..7359cb64 100644 --- a/src/gui/UBLibActionBar.cpp +++ b/src/gui/UBLibActionBar.cpp @@ -337,7 +337,7 @@ void UBLibActionBar::onSelectionChanged(QList itemList, bool isI mpFavoriteAction->setEnabled(bEnable); mpSocialAction->setEnabled(bEnable); - mpDeleteAction->setEnabled(bEnable); + mpDeleteAction->setEnabled(bEnable && libraryController()->canItemsOnElementBeDeleted(itemList.at(0))); } /** @@ -397,7 +397,10 @@ void UBLibActionBar::dropEvent(QDropEvent *event) } else if(mpDeleteBtn == pTargetW) { - onActionTrash(); + if(mpDeleteBtn->isEnabled()) + { + onActionTrash(); + } } else if(mpSocialBtn == pTargetW) { diff --git a/src/transition/UniboardSankoreTransition.cpp b/src/transition/UniboardSankoreTransition.cpp new file mode 100644 index 00000000..18f952b4 --- /dev/null +++ b/src/transition/UniboardSankoreTransition.cpp @@ -0,0 +1,66 @@ +#include "UniboardSankoreTransition.h" +#include "core/UBSettings.h" +#include "frameworks/UBDesktopServices.h" +#include "frameworks/UBFileSystemUtils.h" + +UniboardSankoreTransition::UniboardSankoreTransition(QObject *parent) : + QObject(parent) +{ + mUniboardSourceDirectory = UBDesktopServices::storageLocation(QDesktopServices::DataLocation); + mUniboardSourceDirectory.replace("Sankore", "Mnemis/Uniboard"); +} + +bool UniboardSankoreTransition::backupUniboardDirectory() +{ + 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; +} + + +void UniboardSankoreTransition::rollbackDocumentsTransition(QFileInfoList& fileInfoList) +{ + QFileInfoList::iterator fileInfo; + for (fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end(); fileInfo += 1) { + if (fileInfo->isDir() && fileInfo->fileName().startsWith("Uniboard Document ")){ + QString sankoreDocumentName = fileInfo->fileName(); + sankoreDocumentName.replace("Uniboard","Sankore"); + QString sankoreDocumentDirectoryPath = UBSettings::uniboardDocumentDirectory() + "/" + sankoreDocumentName; + if (QFileInfo(sankoreDocumentDirectoryPath).exists()){ + UBFileSystemUtils::deleteDir(sankoreDocumentDirectoryPath); + } + } + } +} + +void UniboardSankoreTransition::documentTransition() +{ + QString uniboardDocumentDirectory = mUniboardSourceDirectory + "/document"; + QString sankoreDocumentDirectory = UBSettings::uniboardDocumentDirectory(); + + QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(uniboardDocumentDirectory); + + QFileInfoList::iterator fileInfo; + bool result = true; + for (fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end() && result; fileInfo += 1) { + if (fileInfo->isDir() && fileInfo->fileName().startsWith("Uniboard Document ")){ + QString sankoreDocumentName = fileInfo->fileName(); + sankoreDocumentName.replace("Uniboard","Sankore"); + result = UBFileSystemUtils::copyDir(fileInfo->filePath(),sankoreDocumentDirectory + "/" + sankoreDocumentName); + } + } + + if (!result){ + qWarning() << "The transaction has failed during the copy of the " + fileInfo->filePath() + " document."; + rollbackDocumentsTransition(fileInfoList); + } + else { + UBFileSystemUtils::deleteDir(mUniboardSourceDirectory); + } +} \ No newline at end of file diff --git a/src/transition/UniboardSankoreTransition.h b/src/transition/UniboardSankoreTransition.h new file mode 100644 index 00000000..2ff7eed8 --- /dev/null +++ b/src/transition/UniboardSankoreTransition.h @@ -0,0 +1,27 @@ +#ifndef UNIBOARDSANKORETRANSITION_H +#define UNIBOARDSANKORETRANSITION_H + +#include +#include + +class UniboardSankoreTransition : public QObject +{ + Q_OBJECT +public: + explicit UniboardSankoreTransition(QObject *parent = 0); + bool backupUniboardDirectory(); + void documentTransition(); + +private: + void rollbackDocumentsTransition(QFileInfoList& fileInfoList); + +protected: + QString mUniboardSourceDirectory; + +signals: + +public slots: + +}; + +#endif // UNIBOARDSANKORETRANSITION_H diff --git a/thirdparty/xpdf/xpdf-3.02/xpdf/Makefile b/thirdparty/xpdf/xpdf-3.02/xpdf/Makefile index 054b0178..8fc95fb4 100644 --- a/thirdparty/xpdf/xpdf-3.02/xpdf/Makefile +++ b/thirdparty/xpdf/xpdf-3.02/xpdf/Makefile @@ -26,7 +26,7 @@ LDFLAGS = T1LIBS = FTLIBS = -XLIBS = -lX11 +XLIBS = -lXt -lXext -lSM -lICE -lX11 SPLASHLIBS = -L$(SPLASHLIBDIR) -lsplash