From 30b87f02e78bb83a3cea2489ce20783b26b1d45a Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Thu, 30 Jun 2011 08:43:25 +0200 Subject: [PATCH] added web pubblication interface --- .../publishing/UBDocumentPublisher.cpp | 522 +++++++----------- src/adaptors/publishing/UBDocumentPublisher.h | 82 ++- src/board/UBBoardPaletteManager.cpp | 4 +- src/core/UBApplication.cpp | 20 +- src/core/UBApplication.h | 1 + src/core/UBApplicationController.cpp | 28 +- src/core/UBApplicationController.h | 4 +- src/core/UBDocumentManager.cpp | 6 +- src/document/UBDocumentController.h | 6 +- src/gui/UBMainWindow.cpp | 14 + src/gui/UBMainWindow.h | 5 + 11 files changed, 301 insertions(+), 391 deletions(-) diff --git a/src/adaptors/publishing/UBDocumentPublisher.cpp b/src/adaptors/publishing/UBDocumentPublisher.cpp index bd09c1a5..88c527e6 100644 --- a/src/adaptors/publishing/UBDocumentPublisher.cpp +++ b/src/adaptors/publishing/UBDocumentPublisher.cpp @@ -1,4 +1,4 @@ -#include "UBDocumentPublisher.h" + #include "UBDocumentPublisher.h" #include "frameworks/UBPlatformUtils.h" #include "frameworks/UBFileSystemUtils.h" @@ -10,6 +10,7 @@ #include "core/UBDocumentManager.h" #include "core/UBApplication.h" #include "core/UBPersistenceManager.h" +#include "core/UBApplicationController.h" #include "gui/UBMainWindow.h" @@ -27,163 +28,120 @@ #include "UBSvgSubsetRasterizer.h" #include "core/memcheck.h" +#include <../Trolltech/Qt-4.7.0/include/QtWebKit/qwebview.h> UBDocumentPublisher::UBDocumentPublisher(UBDocumentProxy* pDocument, QObject *parent) - : UBAbstractPublisher(parent) - , mSourceDocument(pDocument) - , mPublishingDocument(0) + : UBAbstractPublisher(parent) + , mSourceDocument(pDocument) + , mPublishingDocument(0) + , mUsername(0) + , mPassword(0) { - connect(this, SIGNAL(authenticated(const QUuid&, const QString&)) - , this, SLOT(postDocument(const QUuid&, const QString&))); + mpWebView = new QWebView(0); + UBApplication::mainWindow->addSankoreWebDocumentWidget(mpWebView); + mpWebView->setWindowTitle(tr("Sankore Uploading Page")); + mpWebView->setAcceptDrops(false); + + connect(mpWebView, SIGNAL(loadFinished(bool)), this, SLOT(onLoadFinished(bool))); + connect(mpWebView, SIGNAL(linkClicked(QUrl)), this, SLOT(onLinkClicked(QUrl))); + + + init(); } UBDocumentPublisher::~UBDocumentPublisher() { + delete mpWebView; delete mPublishingDocument; } void UBDocumentPublisher::publish() { - UBAbstractPublisher::authenticate(); + //check that the username and password are stored on preferences + mUsername = "Admin"; + mPassword = "admin"; + buildUbwFile(); + UBApplication::showMessage(tr("Uploading Sankore File on Web.")); + sendUbw(); + } -void UBDocumentPublisher::postDocument(const QUuid& tokenUuid, const QString& encryptedBase64Token) +void UBDocumentPublisher::buildUbwFile() { - mAuthenticationUuid = tokenUuid; - mAuthenticationBase64Token = encryptedBase64Token; - - UBDocumentPublishingDialog dialog(UBApplication::mainWindow); + QDir d; + d.mkpath(UBFileSystemUtils::defaultTempDirPath()); - dialog.videoWarning->setVisible(UBPersistenceManager::persistenceManager()->mayHaveVideo(mSourceDocument)); + QString tmpDir = UBFileSystemUtils::createTempDir(); - dialog.title->setText(mSourceDocument->name()); - - QString defaultEMail = UBSettings::settings()->uniboardWebEMail->get().toString(); - dialog.email->setText(defaultEMail); - - QString defaultAuthor = UBSettings::settings()->uniboardWebAuthor->get().toString(); - dialog.author->setText(defaultAuthor); - - if (dialog.exec() == QDialog::Accepted) + if (UBFileSystemUtils::copyDir(mSourceDocument->persistencePath(), tmpDir)) { - QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - UBApplication::showMessage(tr("Preparing document for upload..."), true); - - mTitle = dialog.title->text(); - mDescription = dialog.description->toPlainText(); - mEMail = dialog.email->text(); - mAuthor = dialog.author->text(); + QUuid publishingUuid = QUuid::createUuid(); - bool attachPDF = dialog.attachPDF->isChecked(); - bool attachUBZ = dialog.attachUBZ->isChecked(); + mPublishingDocument = new UBDocumentProxy(tmpDir); + mPublishingDocument->setPageCount(mSourceDocument->pageCount()); - mPublishingServiceUrl = UBSettings::settings()->documentsPublishingUrl; + rasterizeScenes(); - UBSettings::settings()->uniboardWebEMail->set(mEMail); - UBSettings::settings()->uniboardWebAuthor->set(mAuthor); + upgradeDocumentForPublishing(); - QDir d; - d.mkpath(UBFileSystemUtils::defaultTempDirPath()); + UBExportFullPDF pdfExporter; + pdfExporter.setVerbode(false); + pdfExporter.persistsDocument(mSourceDocument, mPublishingDocument->persistencePath() + "/" + UBStringUtils::toCanonicalUuid(publishingUuid) + ".pdf"); - QString tmpDir = UBFileSystemUtils::createTempDir(); + UBExportDocument ubzExporter; + ubzExporter.setVerbode(false); + ubzExporter.persistsDocument(mSourceDocument, mPublishingDocument->persistencePath() + "/" + UBStringUtils::toCanonicalUuid(publishingUuid) + ".ubz"); - if (UBFileSystemUtils::copyDir(mSourceDocument->persistencePath(), tmpDir)) - { - QUuid publishingUuid = QUuid::createUuid(); - - mPublishingDocument = new UBDocumentProxy(tmpDir); - mPublishingDocument->setPageCount(mSourceDocument->pageCount()); - - rasterizeScenes(); - //rasterizePDF(); // not needed as we do not publish svg file anymore + // remove all useless files - //rasterizeSVGImages(); // not needed as we do not publish svg file anymore + for (int pageIndex = 0; pageIndex < mPublishingDocument->pageCount(); pageIndex++) { + QString filename = mPublishingDocument->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.svg", pageIndex + 1); - upgradeDocumentForPublishing(); - - if (attachPDF) - { - UBExportFullPDF pdfExporter; - pdfExporter.setVerbode(false); - pdfExporter.persistsDocument(mSourceDocument, - mPublishingDocument->persistencePath() + "/" + UBStringUtils::toCanonicalUuid(publishingUuid) + ".pdf"); - } - - if (attachUBZ) - { - UBExportDocument ubzExporter; - ubzExporter.setVerbode(false); - ubzExporter.persistsDocument(mSourceDocument, - mPublishingDocument->persistencePath() + "/" + UBStringUtils::toCanonicalUuid(publishingUuid) + ".ubz"); - } - - // remove all useless files - - for (int pageIndex = 0; pageIndex < mPublishingDocument->pageCount(); pageIndex++) - { - QString filename = mPublishingDocument->persistencePath() + - UBFileSystemUtils::digitFileFormat("/page%1.svg", pageIndex + 1); - - QFile::remove(filename); - } - - UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::imageDirectory); - UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::objectDirectory); - UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::videoDirectory); - UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::audioDirectory); + QFile::remove(filename); + } - QString tempZipFile = UBFileSystemUtils::defaultTempDirPath() - + "/" + UBStringUtils::toCanonicalUuid(QUuid::createUuid()) + ".zip"; + UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::imageDirectory); + UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::objectDirectory); + UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::videoDirectory); + UBFileSystemUtils::deleteDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::audioDirectory); - //qDebug() << "compressing" << mPublishingDocument->persistencePath() << "in" << tempZipFile; + mTmpZipFile = UBFileSystemUtils::defaultTempDirPath() + "/" + UBStringUtils::toCanonicalUuid(QUuid::createUuid()) + ".zip"; - QuaZip zip(tempZipFile); - zip.setFileNameCodec("UTF-8"); - if (!zip.open(QuaZip::mdCreate)) - { - qWarning() << "Export failed. Cause: zip.open(): " << zip.getZipError() << "," << tempZipFile; - QApplication::restoreOverrideCursor(); - return; - } - - QuaZipFile outFile(&zip); + QuaZip zip(mTmpZipFile); + zip.setFileNameCodec("UTF-8"); + if (!zip.open(QuaZip::mdCreate)) + { + qWarning() << "Export failed. Cause: zip.open(): " << zip.getZipError() << "," << mTmpZipFile; + QApplication::restoreOverrideCursor(); + return; + } - if (!UBFileSystemUtils::compressDirInZip(mPublishingDocument->persistencePath(), "", &outFile, true)) - { - qWarning("Export failed. compressDirInZip failed ..."); - zip.close(); - //zip.remove(); - UBApplication::showMessage(tr("Export failed.")); - QApplication::restoreOverrideCursor(); - return; - } - - if (zip.getZipError() != 0) - { - qWarning("Export failed. Cause: zip.close(): %d", zip.getZipError()); - zip.close(); - //zip.remove(); - UBApplication::showMessage(tr("Export failed.")); - QApplication::restoreOverrideCursor(); - return; - } + QuaZipFile outFile(&zip); + if (!UBFileSystemUtils::compressDirInZip(mPublishingDocument->persistencePath(), "", &outFile, true)) + { + qWarning("Export failed. compressDirInZip failed ..."); zip.close(); - - mPublishingUrl = QUrl(mPublishingServiceUrl + "/documents/publish/" - + UBStringUtils::toCanonicalUuid(mSourceDocument->uuid())); - - sendZipToUniboardWeb(tempZipFile, publishingUuid); + UBApplication::showMessage(tr("Export failed.")); + QApplication::restoreOverrideCursor(); + return; } - else + + if (zip.getZipError() != 0) { - UBApplication::showMessage(tr("Export failed ...")); + qWarning("Export failed. Cause: zip.close(): %d", zip.getZipError()); + zip.close(); + UBApplication::showMessage(tr("Export failed.")); QApplication::restoreOverrideCursor(); + return; } + + zip.close(); + } else { @@ -192,64 +150,16 @@ void UBDocumentPublisher::postDocument(const QUuid& tokenUuid, const QString& en } } - -/* - * // not needed as we do not publish svg file anymore - * - -void UBDocumentPublisher::rasterizePDF() -{ - if (UBPersistenceManager::persistenceManager()->mayHavePDF(mPublishingDocument)) - { - UBSvgSubsetAdaptor::convertPDFObjectsToImages(mPublishingDocument); - - QDir objectDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::objectDirectory); - - QStringList filters; - filters << "*.pdf"; - - foreach(QFileInfo fi, objectDir.entryInfoList(filters)) - { - QFile::remove(fi.absoluteFilePath()); - } - } -} -*/ - -/* - * // not needed as we do not publish svg file anymore - - -void UBDocumentPublisher::rasterizeSVGImages() -{ - if (UBPersistenceManager::persistenceManager()->mayHaveSVGImages(mPublishingDocument)) - { - UBSvgSubsetAdaptor::convertSvgImagesToImages(mPublishingDocument); - - QDir objectDir(mPublishingDocument->persistencePath() + "/" + UBPersistenceManager::imageDirectory); - - QStringList filters; - filters << "*.svg"; - - foreach(QFileInfo fi, objectDir.entryInfoList(filters)) - { - QFile::remove(fi.absoluteFilePath()); - } - } -} -*/ - void UBDocumentPublisher::rasterizeScenes() { - for(int pageIndex = 0; pageIndex < mPublishingDocument->pageCount(); pageIndex++) + for (int pageIndex = 0; pageIndex < mPublishingDocument->pageCount(); pageIndex++) { UBApplication::showMessage(tr("Converting page %1/%2 ...").arg(pageIndex + 1).arg(mPublishingDocument->pageCount()), true); UBSvgSubsetRasterizer rasterizer(mPublishingDocument, pageIndex); - QString filename = mPublishingDocument->persistencePath() + - UBFileSystemUtils::digitFileFormat("/page%1.jpg", pageIndex + 1); + QString filename = mPublishingDocument->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.jpg", pageIndex + 1); rasterizer.rasterizeToFile(filename); @@ -275,7 +185,7 @@ void UBDocumentPublisher::updateGoogleMapApiKey() { QFile file(fileInfo.absoluteFilePath()); - if(file.open(QIODevice::ReadWrite)) + if (file.open(QIODevice::ReadWrite)) { QTextStream stream(&file); QString content = stream.readAll(); @@ -298,7 +208,7 @@ void UBDocumentPublisher::updateGoogleMapApiKey() void UBDocumentPublisher::upgradeDocumentForPublishing() { - for(int pageIndex = 0; pageIndex < mPublishingDocument->pageCount(); pageIndex++) + for (int pageIndex = 0; pageIndex < mPublishingDocument->pageCount(); pageIndex++) { UBGraphicsScene *scene = UBSvgSubsetAdaptor::loadScene(mPublishingDocument, pageIndex); @@ -306,25 +216,17 @@ void UBDocumentPublisher::upgradeDocumentForPublishing() QList widgets; - foreach(QGraphicsItem* item, scene->items()) - { + foreach(QGraphicsItem* item, scene->items()){ UBGraphicsW3CWidgetItem *widgetItem = dynamic_cast(item); - if (widgetItem) - { + if(widgetItem){ generateWidgetPropertyScript(widgetItem, pageIndex + 1); sceneHasWidget = true; widgets << widgetItem; } } - //if (sceneHasWidget) - //{ - // updateSVGForWidget(pageIndex); // not needed as we do not publish svg file anymore - //} - - QString filename = mPublishingDocument->persistencePath() + - UBFileSystemUtils::digitFileFormat("/page%1.json", pageIndex + 1); + QString filename = mPublishingDocument->persistencePath() + UBFileSystemUtils::digitFileFormat("/page%1.json", pageIndex + 1); QFile jsonFile(filename); if (jsonFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) @@ -381,10 +283,10 @@ void UBDocumentPublisher::upgradeDocumentForPublishing() sep = ""; jsonFile.write(QString(" \"%1\": \"%2\"%3\n") - .arg(key) - .arg(preferences.value(key)) - .arg(sep) - .toUtf8()); + .arg(key) + .arg(preferences.value(key)) + .arg(sep) + .toUtf8()); } jsonFile.write(QString(" },\n").toUtf8()); @@ -399,10 +301,10 @@ void UBDocumentPublisher::upgradeDocumentForPublishing() sep = ""; jsonFile.write(QString(" \"%1\": \"%2\"%3\n") - .arg(entry) - .arg(datastoreEntries.value(entry)) - .arg(sep) - .toUtf8()); + .arg(entry) + .arg(datastoreEntries.value(entry)) + .arg(sep) + .toUtf8()); } jsonFile.write(QString(" }\n").toUtf8()); @@ -426,57 +328,6 @@ void UBDocumentPublisher::upgradeDocumentForPublishing() } -/** // not needed as we do not publish svg file anymore -void UBDocumentPublisher::updateSVGForWidget(int pageIndex) -{ - QString fileName = mPublishingDocument->persistencePath() + - UBFileSystemUtils::digitFileFormat("/page%1.svg", pageIndex + 1); - - QFile svgFile(fileName); - - if (svgFile.exists()) - { - if (!svgFile.open(QIODevice::ReadWrite)) - { - qWarning() << "Cannot open file " << fileName << " for widget upgrade ..."; - return; - } - - QTextStream stream(&svgFile); - QStringList lines; - - QString line; - do - { - line = stream.readLine(); - if (!line.isNull()) - { - if (line.contains("")) // TODO UB 4.6, this is naive ... the SVG tag may be on several lines - { - lines << "documentPlayerCssUrl + "\" ?>"; - lines << line; - lines << ""; - lines << "