parent
554ee8775b
commit
1d354dd1e0
@ -1,300 +0,0 @@ |
|||||||
/*
|
|
||||||
* Copyright (C) 2012 Webdoc SA |
|
||||||
* |
|
||||||
* This file is part of Open-Sankoré. |
|
||||||
* |
|
||||||
* Open-Sankoré is free software: you can redistribute it and/or modify |
|
||||||
* it under the terms of the GNU General Public License as published by |
|
||||||
* the Free Software Foundation, version 3 of the License, |
|
||||||
* with a specific linking exception for the OpenSSL project's |
|
||||||
* "OpenSSL" library (or with modified versions of it that use the |
|
||||||
* same license as the "OpenSSL" library). |
|
||||||
* |
|
||||||
* Open-Sankoré is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
* GNU General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU General Public License |
|
||||||
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "UniboardSankoreTransition.h" |
|
||||||
#include "core/UBSettings.h" |
|
||||||
#include "frameworks/UBFileSystemUtils.h" |
|
||||||
#include "core/UBApplication.h" |
|
||||||
#include "core/UBPersistenceManager.h" |
|
||||||
#include "gui/UBMainWindow.h" |
|
||||||
|
|
||||||
#include "core/memcheck.h" |
|
||||||
|
|
||||||
UniboardSankoreTransition::UniboardSankoreTransition(QObject *parent) : |
|
||||||
QObject(parent) |
|
||||||
, mTransitionDlg(NULL) |
|
||||||
, mThread(NULL) |
|
||||||
{ |
|
||||||
mOldSankoreDirectory = UBFileSystemUtils::normalizeFilePath(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); |
|
||||||
|
|
||||||
mUniboardSourceDirectory = UBFileSystemUtils::normalizeFilePath(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); |
|
||||||
#if defined(Q_WS_MACX) |
|
||||||
mOldSankoreDirectory.replace("Sankore/Sankore 3.1", "Sankore"); |
|
||||||
mUniboardSourceDirectory.replace("Sankore/Sankore 3.1", "Uniboard"); |
|
||||||
#else |
|
||||||
mUniboardSourceDirectory.replace("Sankore/Sankore 3.1", "Mnemis/Uniboard"); |
|
||||||
#endif |
|
||||||
connect(this, SIGNAL(docAdded(UBDocumentProxy*)), UBPersistenceManager::persistenceManager(), SIGNAL(documentCreated(UBDocumentProxy*))); |
|
||||||
} |
|
||||||
|
|
||||||
UniboardSankoreTransition::~UniboardSankoreTransition() |
|
||||||
{ |
|
||||||
if(NULL != mTransitionDlg) |
|
||||||
{ |
|
||||||
delete mTransitionDlg; |
|
||||||
mTransitionDlg = NULL; |
|
||||||
} |
|
||||||
|
|
||||||
if(mThread){ |
|
||||||
delete mThread; |
|
||||||
mThread = NULL; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
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::userDocumentDirectory() + "/" + sankoreDocumentName; |
|
||||||
if (QFileInfo(sankoreDocumentDirectoryPath).exists()){ |
|
||||||
UBFileSystemUtils::deleteDir(sankoreDocumentDirectoryPath); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
bool UniboardSankoreTransition::checkDocumentDirectory(QString& documentDirectoryPath) |
|
||||||
{ |
|
||||||
bool result = true; |
|
||||||
result = updateSankoreHRef(documentDirectoryPath); |
|
||||||
QString sankoreWidgetPath = documentDirectoryPath + "/widgets"; |
|
||||||
result &= updateIndexWidget(sankoreWidgetPath); |
|
||||||
return result; |
|
||||||
} |
|
||||||
|
|
||||||
void UniboardSankoreTransition::documentTransition() |
|
||||||
{ |
|
||||||
if (QFileInfo(mUniboardSourceDirectory).exists() || QFileInfo(mOldSankoreDirectory).exists()){ |
|
||||||
QString uniboardDocumentDirectory = mUniboardSourceDirectory + "/document"; |
|
||||||
|
|
||||||
QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(uniboardDocumentDirectory); |
|
||||||
fileInfoList << UBFileSystemUtils::allElementsInDirectory(mOldSankoreDirectory + "/document"); |
|
||||||
|
|
||||||
QString backupDirectoryPath = UBFileSystemUtils::normalizeFilePath(QDesktopServices::storageLocation(QDesktopServices::DesktopLocation)); |
|
||||||
|
|
||||||
if (fileInfoList.count() != 0){ |
|
||||||
mTransitionDlg = new UBUpdateDlg(NULL, fileInfoList.count(), backupDirectoryPath); |
|
||||||
connect(mTransitionDlg, SIGNAL(updateFiles()), this, SLOT(startDocumentTransition())); |
|
||||||
connect(this, SIGNAL(transitionFinished(bool)), mTransitionDlg, SLOT(onFilesUpdated(bool))); |
|
||||||
mTransitionDlg->show(); |
|
||||||
} |
|
||||||
} |
|
||||||
else{ |
|
||||||
UBApplication::mainWindow->information(tr("Import old Uniboard/Sankore documents"), tr("There are no documents that should be imported")); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
void UniboardSankoreTransition::startDocumentTransition() |
|
||||||
{ |
|
||||||
mThread = new UniboardSankoreThread(this); |
|
||||||
mThread->start(); |
|
||||||
connect(this,SIGNAL(transitioningFile(QString)),mTransitionDlg,SLOT(transitioningFile(QString))); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
bool UniboardSankoreTransition::checkPage(QString& sankorePagePath) |
|
||||||
{ |
|
||||||
QFile file(sankorePagePath); |
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) |
|
||||||
return false; |
|
||||||
|
|
||||||
QByteArray documentByteArray = file.readAll(); |
|
||||||
file.close(); |
|
||||||
|
|
||||||
QString sankoreDirectory = sankorePagePath.left(sankorePagePath.indexOf("/page")); |
|
||||||
|
|
||||||
sankoreDirectory = QUrl::fromLocalFile(sankoreDirectory).toString(); |
|
||||||
QString documentString(documentByteArray); |
|
||||||
|
|
||||||
QRegExp videoRegExp("<video(.*)xlink:href=\"(.*)videos/(.*)/>"); |
|
||||||
videoRegExp.setMinimal(true); |
|
||||||
|
|
||||||
documentString.replace(videoRegExp,"<video\\1xlink:href=\"videos/\\3/>"); |
|
||||||
|
|
||||||
|
|
||||||
QRegExp audioRegExp("<audio(.*)xlink:href=\"(.*)audios/(.*)/>"); |
|
||||||
audioRegExp.setMinimal(true); |
|
||||||
|
|
||||||
documentString.replace(audioRegExp,"<audio\\1xlink:href=\"audios/\\3/>"); |
|
||||||
|
|
||||||
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) |
|
||||||
return false; |
|
||||||
|
|
||||||
file.write(documentString.toAscii()); |
|
||||||
file.close(); |
|
||||||
|
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
bool UniboardSankoreTransition::checkWidget(QString& sankoreWidgetIndexPath) |
|
||||||
{ |
|
||||||
QFile file(sankoreWidgetIndexPath); |
|
||||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) |
|
||||||
return false; |
|
||||||
|
|
||||||
QByteArray documentByteArray = file.readAll(); |
|
||||||
file.close(); |
|
||||||
|
|
||||||
QString documentString(documentByteArray); |
|
||||||
|
|
||||||
QRegExp swfOriginFilePathRegExp("<param name=\"movie\" value=\"(.*)\">"); |
|
||||||
swfOriginFilePathRegExp.setMinimal(true); |
|
||||||
swfOriginFilePathRegExp.indexIn(documentString); |
|
||||||
QString origin = swfOriginFilePathRegExp.cap(1); |
|
||||||
if(origin.contains("http://")){ |
|
||||||
// an url is the source of the swf. The source is kept as is.
|
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
//changing the path
|
|
||||||
QRegExp swfDataPathRegExp("<object(.*)data=\"(.*)interactive content/Web/(.*)\"(.*)>"); |
|
||||||
swfDataPathRegExp.setMinimal(true); |
|
||||||
documentString.replace(swfDataPathRegExp,"<object\\1data=\"\\3\">"); |
|
||||||
|
|
||||||
QRegExp swfMoviePathRegExp("<param name=\"movie\" value=\"(.*)interactive content/Web/(.*)\">"); |
|
||||||
swfMoviePathRegExp.setMinimal(true); |
|
||||||
documentString.replace(swfMoviePathRegExp,"<param name=\"movie\" value=\"\\2\">"); |
|
||||||
|
|
||||||
//copy the swf on the right place
|
|
||||||
QRegExp swfFileNameRegExp("<param name=\"movie\" value=\"(.*)\">"); |
|
||||||
swfFileNameRegExp.setMinimal(true); |
|
||||||
swfFileNameRegExp.indexIn(documentString); |
|
||||||
QString swfFileName = swfFileNameRegExp.cap(1); |
|
||||||
int lastDirectoryLevel = sankoreWidgetIndexPath.lastIndexOf("/"); |
|
||||||
if (lastDirectoryLevel == -1) |
|
||||||
lastDirectoryLevel = sankoreWidgetIndexPath.lastIndexOf("\\"); |
|
||||||
|
|
||||||
|
|
||||||
QString destination(sankoreWidgetIndexPath.left(lastDirectoryLevel) + "/" + swfFileName); |
|
||||||
QFile(origin).copy(destination); |
|
||||||
|
|
||||||
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) |
|
||||||
return false; |
|
||||||
|
|
||||||
file.write(documentString.toAscii()); |
|
||||||
file.close(); |
|
||||||
|
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
bool UniboardSankoreTransition::updateIndexWidget(QString& sankoreWidgetPath) |
|
||||||
{ |
|
||||||
bool result = true; |
|
||||||
QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(sankoreWidgetPath); |
|
||||||
|
|
||||||
QFileInfoList::iterator fileInfo; |
|
||||||
for (fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end() && result; fileInfo += 1) { |
|
||||||
if (fileInfo->fileName().endsWith("wgt")){ |
|
||||||
QString path = fileInfo->absolutePath() + "/" + fileInfo->fileName() + "/index.html"; |
|
||||||
if (QFile(path).exists()) |
|
||||||
result = checkWidget(path); |
|
||||||
|
|
||||||
path = fileInfo->absolutePath() + "/" + fileInfo->fileName() + "/index.htm"; |
|
||||||
if (QFile(path).exists()) |
|
||||||
result &= checkWidget(path); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return result; |
|
||||||
} |
|
||||||
|
|
||||||
bool UniboardSankoreTransition::updateSankoreHRef(QString& sankoreDocumentPath) |
|
||||||
{ |
|
||||||
bool result = true; |
|
||||||
QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(sankoreDocumentPath); |
|
||||||
|
|
||||||
QFileInfoList::iterator fileInfo; |
|
||||||
|
|
||||||
for (fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end() && result; fileInfo += 1) { |
|
||||||
if (fileInfo->fileName().endsWith("svg")){ |
|
||||||
QString path = fileInfo->absolutePath() + "/" + fileInfo->fileName(); |
|
||||||
result = checkPage(path); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return result; |
|
||||||
} |
|
||||||
|
|
||||||
void UniboardSankoreTransition::executeTransition() |
|
||||||
{ |
|
||||||
bool result = false; |
|
||||||
QString backupDestinationPath = mTransitionDlg->backupPath() + "/OldSankoreAndUniboardVersionsBackup"; |
|
||||||
result = UBFileSystemUtils::copyDir(mUniboardSourceDirectory + "/document", backupDestinationPath); |
|
||||||
result &= UBFileSystemUtils::copyDir(mOldSankoreDirectory + "/document", backupDestinationPath); |
|
||||||
|
|
||||||
QString uniboardDocumentDirectory = mUniboardSourceDirectory + "/document"; |
|
||||||
QFileInfoList fileInfoList = UBFileSystemUtils::allElementsInDirectory(uniboardDocumentDirectory); |
|
||||||
fileInfoList.append(UBFileSystemUtils::allElementsInDirectory(mOldSankoreDirectory + "/document")); |
|
||||||
|
|
||||||
QFileInfoList::iterator fileInfo; |
|
||||||
QString sankoreDocumentDirectory = UBSettings::userDocumentDirectory(); |
|
||||||
|
|
||||||
for (fileInfo = fileInfoList.begin(); fileInfo != fileInfoList.end() && result; fileInfo += 1) { |
|
||||||
if (fileInfo->isDir() && (fileInfo->fileName().startsWith("Uniboard Document ") || fileInfo->fileName().startsWith("Sankore Document "))){ |
|
||||||
QString sankoreDocumentName = fileInfo->fileName(); |
|
||||||
emit transitioningFile(sankoreDocumentName); |
|
||||||
sankoreDocumentName.replace("Uniboard","Sankore"); |
|
||||||
QString sankoreDocumentPath = sankoreDocumentDirectory + "/" + sankoreDocumentName; |
|
||||||
result = UBFileSystemUtils::copyDir(fileInfo->filePath(),sankoreDocumentPath); |
|
||||||
result &= updateSankoreHRef(sankoreDocumentPath); |
|
||||||
QString sankoreWidgetPath = sankoreDocumentDirectory + "/" + sankoreDocumentName + "/widgets"; |
|
||||||
result &= updateIndexWidget(sankoreWidgetPath); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
if (!result){ |
|
||||||
qWarning() << "The transition has failed"; |
|
||||||
rollbackDocumentsTransition(fileInfoList); |
|
||||||
UBFileSystemUtils::deleteDir(backupDestinationPath); |
|
||||||
} |
|
||||||
else{ |
|
||||||
UBFileSystemUtils::deleteDir(mOldSankoreDirectory); |
|
||||||
UBFileSystemUtils::deleteDir(mUniboardSourceDirectory); |
|
||||||
} |
|
||||||
|
|
||||||
emit transitionFinished(result); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
UniboardSankoreThread::UniboardSankoreThread(QObject* parent):QThread(parent) |
|
||||||
{ |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
UniboardSankoreThread::~UniboardSankoreThread() |
|
||||||
{ |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
void UniboardSankoreThread::run() |
|
||||||
{ |
|
||||||
UniboardSankoreTransition* pTransition = dynamic_cast<UniboardSankoreTransition*>(parent()); |
|
||||||
|
|
||||||
pTransition->executeTransition(); |
|
||||||
} |
|
||||||
|
|
@ -1,80 +0,0 @@ |
|||||||
/*
|
|
||||||
* Copyright (C) 2012 Webdoc SA |
|
||||||
* |
|
||||||
* This file is part of Open-Sankoré. |
|
||||||
* |
|
||||||
* Open-Sankoré is free software: you can redistribute it and/or modify |
|
||||||
* it under the terms of the GNU General Public License as published by |
|
||||||
* the Free Software Foundation, version 3 of the License, |
|
||||||
* with a specific linking exception for the OpenSSL project's |
|
||||||
* "OpenSSL" library (or with modified versions of it that use the |
|
||||||
* same license as the "OpenSSL" library). |
|
||||||
* |
|
||||||
* Open-Sankoré is distributed in the hope that it will be useful, |
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
* GNU General Public License for more details. |
|
||||||
* |
|
||||||
* You should have received a copy of the GNU General Public License |
|
||||||
* along with Open-Sankoré. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/ |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef UNIBOARDSANKORETRANSITION_H |
|
||||||
#define UNIBOARDSANKORETRANSITION_H |
|
||||||
|
|
||||||
#include <QObject> |
|
||||||
#include <QFileInfo> |
|
||||||
#include <QThread> |
|
||||||
#include "gui/UBUpdateDlg.h" |
|
||||||
#include "document/UBDocumentProxy.h" |
|
||||||
|
|
||||||
class UniboardSankoreThread : public QThread |
|
||||||
{ |
|
||||||
Q_OBJECT |
|
||||||
public: |
|
||||||
UniboardSankoreThread(QObject* parent = 0); |
|
||||||
~UniboardSankoreThread(); |
|
||||||
|
|
||||||
void run(); |
|
||||||
|
|
||||||
}; |
|
||||||
|
|
||||||
class UniboardSankoreTransition : public QObject |
|
||||||
{ |
|
||||||
Q_OBJECT |
|
||||||
public: |
|
||||||
explicit UniboardSankoreTransition(QObject *parent = 0); |
|
||||||
~UniboardSankoreTransition(); |
|
||||||
|
|
||||||
bool checkDocumentDirectory(QString& documentDirectoryPath); |
|
||||||
|
|
||||||
void documentTransition(); |
|
||||||
bool checkPage(QString& sankorePagePath); |
|
||||||
bool updateSankoreHRef(QString &sankoreDocumentPath); |
|
||||||
bool checkWidget(QString& sankoreWidgetPath); |
|
||||||
bool updateIndexWidget(QString& sankoreWidgetPath); |
|
||||||
void executeTransition(); |
|
||||||
|
|
||||||
|
|
||||||
private: |
|
||||||
void rollbackDocumentsTransition(QFileInfoList& fileInfoList); |
|
||||||
UBUpdateDlg* mTransitionDlg; |
|
||||||
|
|
||||||
protected: |
|
||||||
QString mUniboardSourceDirectory; |
|
||||||
QString mOldSankoreDirectory; |
|
||||||
UniboardSankoreThread* mThread; |
|
||||||
|
|
||||||
signals: |
|
||||||
void transitionFinished(bool result); |
|
||||||
void docAdded(UBDocumentProxy* doc); |
|
||||||
void transitioningFile(QString documentName); |
|
||||||
|
|
||||||
private slots: |
|
||||||
void startDocumentTransition(); |
|
||||||
|
|
||||||
}; |
|
||||||
|
|
||||||
#endif // UNIBOARDSANKORETRANSITION_H
|
|
@ -1,5 +0,0 @@ |
|||||||
|
|
||||||
HEADERS += src/transition/UniboardSankoreTransition.h |
|
||||||
|
|
||||||
|
|
||||||
SOURCES += src/transition/UniboardSankoreTransition.cpp |
|
Loading…
Reference in new issue