@ -21,645 +21,9 @@
# include <QFileInfo>
# include "UBDocumentPublisher.h"
# include "frameworks/UBPlatformUtils.h"
# include "frameworks/UBFileSystemUtils.h"
# include "frameworks/UBStringUtils.h"
# include "network/UBNetworkAccessManager.h"
# include "network/UBServerXMLHttpRequest.h"
# include "core/UBDocumentManager.h"
# include "core/UBApplication.h"
# include "core/UBPersistenceManager.h"
# include "core/UBApplicationController.h"
# include "board/UBBoardController.h"
# include "gui/UBMainWindow.h"
# include "document/UBDocumentProxy.h"
# include "document/UBDocumentContainer.h"
# include "domain/UBGraphicsWidgetItem.h"
# include "globals/UBGlobals.h"
THIRD_PARTY_WARNINGS_DISABLE
# include "quazip.h"
# include "quazipfile.h"
THIRD_PARTY_WARNINGS_ENABLE
# include "adaptors/UBExportFullPDF.h"
# include "adaptors/UBExportDocument.h"
# include "adaptors/UBSvgSubsetAdaptor.h"
# include "UBSvgSubsetRasterizer.h"
# include "../../core/UBApplication.h"
# include "core/memcheck.h"
UBDocumentPublisher : : UBDocumentPublisher ( UBDocumentProxy * pDocument , QObject * parent )
: QObject ( parent )
, mSourceDocument ( pDocument )
, mUsername ( " " )
, mPassword ( " " )
, bLoginCookieSet ( false )
{
init ( ) ;
}
UBDocumentPublisher : : ~ UBDocumentPublisher ( )
{
}
void UBDocumentPublisher : : publish ( )
{
//check that the username and password are stored on preferences
UBSettings * settings = UBSettings : : settings ( ) ;
if ( settings - > communityUsername ( ) . isEmpty ( ) | | settings - > communityPassword ( ) . isEmpty ( ) ) {
UBApplication : : showMessage ( tr ( " Credentials has to not been filled out yet. " ) ) ;
qDebug ( ) < < " trying to connect to community without the required credentials " ;
return ;
}
mUsername = settings - > communityUsername ( ) ;
mPassword = settings - > communityPassword ( ) ;
UBPublicationDlg dlg ;
if ( QDialog : : Accepted = = dlg . exec ( ) )
{
mDocInfos . title = dlg . title ( ) ;
mDocInfos . description = dlg . description ( ) ;
buildUbwFile ( ) ;
UBApplication : : showMessage ( tr ( " Uploading Sankore File on Web. " ) ) ;
sendUbw ( mUsername , mPassword ) ;
}
}
void UBDocumentPublisher : : buildUbwFile ( )
{
QDir d ;
d . mkpath ( UBFileSystemUtils : : defaultTempDirPath ( ) ) ;
QString tmpDir = UBFileSystemUtils : : createTempDir ( ) ;
if ( UBFileSystemUtils : : copyDir ( mSourceDocument - > persistencePath ( ) , tmpDir ) )
{
QString documentName = mSourceDocument - > name ( ) ;
mPublishingPath = tmpDir ;
mPublishingSize = mSourceDocument - > pageCount ( ) ;
rasterizeScenes ( ) ;
upgradeDocumentForPublishing ( ) ;
UBExportFullPDF pdfExporter ;
pdfExporter . setVerbode ( false ) ;
pdfExporter . persistsDocument ( mSourceDocument , mPublishingPath + " / " + documentName + " .pdf " ) ;
UBExportDocument ubzExporter ;
ubzExporter . setVerbode ( false ) ;
ubzExporter . persistsDocument ( mSourceDocument , mPublishingPath + " / " + documentName + " .ubz " ) ;
// remove all useless files
for ( int pageIndex = 0 ; pageIndex < mPublishingSize ; pageIndex + + ) {
QString filename = mPublishingPath + UBFileSystemUtils : : digitFileFormat ( " /page%1.svg " , pageIndex ) ;
QFile : : remove ( filename ) ;
}
UBFileSystemUtils : : deleteDir ( mPublishingPath + " / " + UBPersistenceManager : : imageDirectory ) ;
UBFileSystemUtils : : deleteDir ( mPublishingPath + " / " + UBPersistenceManager : : objectDirectory ) ;
UBFileSystemUtils : : deleteDir ( mPublishingPath + " / " + UBPersistenceManager : : videoDirectory ) ;
UBFileSystemUtils : : deleteDir ( mPublishingPath + " / " + UBPersistenceManager : : audioDirectory ) ;
mTmpZipFile = UBFileSystemUtils : : defaultTempDirPath ( ) + " / " + UBStringUtils : : toCanonicalUuid ( QUuid : : createUuid ( ) ) + " .ubw~ " ;
QuaZip zip ( mTmpZipFile ) ;
zip . setFileNameCodec ( " UTF-8 " ) ;
if ( ! zip . open ( QuaZip : : mdCreate ) )
{
qWarning ( ) < < " Export failed. Cause: zip.open(): " < < zip . getZipError ( ) < < " , " < < mTmpZipFile ;
QApplication : : restoreOverrideCursor ( ) ;
return ;
}
QuaZipFile outFile ( & zip ) ;
if ( ! UBFileSystemUtils : : compressDirInZip ( mPublishingPath , " " , & outFile , true ) )
{
qWarning ( " Export failed. compressDirInZip failed ... " ) ;
zip . close ( ) ;
UBApplication : : showMessage ( tr ( " Export failed. " ) ) ;
QApplication : : restoreOverrideCursor ( ) ;
return ;
}
if ( zip . getZipError ( ) ! = 0 )
{
qWarning ( " Export failed. Cause: zip.close(): %d " , zip . getZipError ( ) ) ;
zip . close ( ) ;
UBApplication : : showMessage ( tr ( " Export failed. " ) ) ;
QApplication : : restoreOverrideCursor ( ) ;
return ;
}
zip . close ( ) ;
}
else
{
UBApplication : : showMessage ( tr ( " Export canceled ... " ) ) ;
QApplication : : restoreOverrideCursor ( ) ;
}
}
void UBDocumentPublisher : : rasterizeScenes ( )
{
for ( int pageIndex = 0 ; pageIndex < mPublishingSize ; pageIndex + + )
{
UBApplication : : showMessage ( tr ( " Converting page %1/%2 ... " ) . arg ( UBDocumentContainer : : pageFromSceneIndex ( pageIndex ) ) . arg ( mPublishingSize ) , true ) ;
UBDocumentProxy publishingDocument ( mPublishingPath ) ;
UBSvgSubsetRasterizer rasterizer ( & publishingDocument , pageIndex ) ;
QString filename = mPublishingPath + UBFileSystemUtils : : digitFileFormat ( " /page%1.jpg " , pageIndex ) ;
rasterizer . rasterizeToFile ( filename ) ;
}
}
void UBDocumentPublisher : : updateGoogleMapApiKey ( )
{
QDir widgestDir ( mPublishingPath + " / " + UBPersistenceManager : : widgetDirectory ) ;
QString uniboardWebGoogleMapApiKey = UBSettings : : settings ( ) - > uniboardWebGoogleMapApiKey - > get ( ) . toString ( ) ;
foreach ( QFileInfo dirInfo , widgestDir . entryInfoList ( QDir : : Dirs | QDir : : NoDotAndDotDot ) )
{
QString config = UBFileSystemUtils : : readTextFile ( dirInfo . absoluteFilePath ( ) + " /config.xml " ) . toLower ( ) ;
if ( config . contains ( " google " ) & & config . contains ( " map " ) )
{
QDir widgetDir ( dirInfo . absoluteFilePath ( ) ) ;
foreach ( QFileInfo fileInfo , widgetDir . entryInfoList ( QDir : : Files | QDir : : NoDotAndDotDot ) )
{
QFile file ( fileInfo . absoluteFilePath ( ) ) ;
if ( file . open ( QIODevice : : ReadWrite ) )
{
QTextStream stream ( & file ) ;
QString content = stream . readAll ( ) ;
if ( content . contains ( " ABQIAAAA6vtVqAUu8kZ_eTz7c8kwSBT9UCAhw_xm0LNFHsWmQxTJAdp5lxSY_5r-lZriY_7sACaMnl80JcX6Og " ) )
{
content . replace ( " ABQIAAAA6vtVqAUu8kZ_eTz7c8kwSBT9UCAhw_xm0LNFHsWmQxTJAdp5lxSY_5r-lZriY_7sACaMnl80JcX6Og " ,
uniboardWebGoogleMapApiKey ) ;
file . resize ( 0 ) ;
file . write ( content . toUtf8 ( ) ) ;
}
file . close ( ) ;
}
}
}
}
}
void UBDocumentPublisher : : upgradeDocumentForPublishing ( )
{
for ( int pageIndex = 0 ; pageIndex < mPublishingSize ; pageIndex + + )
{
UBDocumentProxy publishingDocument ( mPublishingPath ) ;
UBGraphicsScene * scene = UBSvgSubsetAdaptor : : loadScene ( & publishingDocument , pageIndex ) ;
QList < UBGraphicsW3CWidgetItem * > widgets ;
foreach ( QGraphicsItem * item , scene - > items ( ) ) {
UBGraphicsW3CWidgetItem * widgetItem = dynamic_cast < UBGraphicsW3CWidgetItem * > ( item ) ;
if ( widgetItem ) {
generateWidgetPropertyScript ( widgetItem , UBDocumentContainer : : pageFromSceneIndex ( pageIndex ) ) ;
widgets < < widgetItem ;
}
}
QString filename = mPublishingPath + UBFileSystemUtils : : digitFileFormat ( " /page%1.json " , pageIndex ) ;
QFile jsonFile ( filename ) ;
if ( jsonFile . open ( QIODevice : : WriteOnly | QIODevice : : Truncate ) )
{
jsonFile . write ( " { \n " ) ;
jsonFile . write ( QString ( " \" scene \" : { \n " ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" x \" : %1, \n " ) . arg ( scene - > normalizedSceneRect ( ) . x ( ) ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" y \" : %1, \n " ) . arg ( scene - > normalizedSceneRect ( ) . y ( ) ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" width \" : %1, \n " ) . arg ( scene - > normalizedSceneRect ( ) . width ( ) ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" height \" : %1 \n " ) . arg ( scene - > normalizedSceneRect ( ) . height ( ) ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " }, \n " ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" widgets \" : [ \n " ) . toUtf8 ( ) ) ;
bool first = true ;
foreach ( UBGraphicsW3CWidgetItem * widget , widgets )
{
if ( ! first )
jsonFile . write ( QString ( " , \n " ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " { \n " ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" uuid \" : \" %1 \" , \n " ) . arg ( UBStringUtils : : toCanonicalUuid ( widget - > uuid ( ) ) ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" id \" : \" %1 \" , \n " ) . arg ( widget - > metadatas ( ) . id ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" name \" : \" %1 \" , \n " ) . arg ( widget - > metadatas ( ) . name ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" description \" : \" %1 \" , \n " ) . arg ( widget - > metadatas ( ) . description ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" author \" : \" %1 \" , \n " ) . arg ( widget - > metadatas ( ) . author ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" authorEmail \" : \" %1 \" , \n " ) . arg ( widget - > metadatas ( ) . authorEmail ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" authorHref \" : \" %1 \" , \n " ) . arg ( widget - > metadatas ( ) . authorHref ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" version \" : \" %1 \" , \n " ) . arg ( widget - > metadatas ( ) . authorHref ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" x \" : %1, \n " ) . arg ( widget - > sceneBoundingRect ( ) . x ( ) ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" y \" : %1, \n " ) . arg ( widget - > sceneBoundingRect ( ) . y ( ) ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" width \" : %1, \n " ) . arg ( widget - > sceneBoundingRect ( ) . width ( ) ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" height \" : %1, \n " ) . arg ( widget - > sceneBoundingRect ( ) . height ( ) ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" nominalWidth \" : %1, \n " ) . arg ( widget - > boundingRect ( ) . width ( ) ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" nominalHeight \" : %1, \n " ) . arg ( widget - > boundingRect ( ) . height ( ) ) . toUtf8 ( ) ) ;
QString url = UBPersistenceManager : : widgetDirectory + " / " + widget - > uuid ( ) . toString ( ) + " .wgt " ;
jsonFile . write ( QString ( " \" src \" : \" %1 \" , \n " ) . arg ( url ) . toUtf8 ( ) ) ;
QString startFile = widget - > mainHtmlFileName ( ) ;
jsonFile . write ( QString ( " \" startFile \" : \" %1 \" , \n " ) . arg ( startFile ) . toUtf8 ( ) ) ;
QMap < QString , QString > preferences = widget - > UBGraphicsWidgetItem : : preferences ( ) ;
jsonFile . write ( QString ( " \" preferences \" : { \n " ) . toUtf8 ( ) ) ;
foreach ( QString key , preferences . keys ( ) )
{
QString sep = " , " ;
if ( key = = preferences . keys ( ) . last ( ) )
sep = " " ;
jsonFile . write ( QString ( " \" %1 \" : \" %2 \" %3 \n " )
. arg ( key )
. arg ( preferences . value ( key ) )
. arg ( sep )
. toUtf8 ( ) ) ;
}
jsonFile . write ( QString ( " }, \n " ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " \" datastore \" : { \n " ) . toUtf8 ( ) ) ;
QMap < QString , QString > datastoreEntries = widget - > datastoreEntries ( ) ;
foreach ( QString entry , datastoreEntries . keys ( ) )
{
QString sep = " , " ;
if ( entry = = datastoreEntries . keys ( ) . last ( ) )
sep = " " ;
jsonFile . write ( QString ( " \" %1 \" : \" %2 \" %3 \n " )
. arg ( entry )
. arg ( datastoreEntries . value ( entry ) )
. arg ( sep )
. toUtf8 ( ) ) ;
}
jsonFile . write ( QString ( " } \n " ) . toUtf8 ( ) ) ;
jsonFile . write ( QString ( " } \n " ) . toUtf8 ( ) ) ;
first = false ;
}
jsonFile . write ( " ] \n " ) ;
jsonFile . write ( " } \n " ) ;
}
else
{
qWarning ( ) < < " Cannot open file " < < filename < < " for saving page state " ;
}
delete scene ;
}
updateGoogleMapApiKey ( ) ;
}
void UBDocumentPublisher : : generateWidgetPropertyScript ( UBGraphicsW3CWidgetItem * widgetItem , int pageNumber )
{
QMap < QString , QString > preferences = widgetItem - > UBGraphicsWidgetItem : : preferences ( ) ;
QMap < QString , QString > datastoreEntries = widgetItem - > datastoreEntries ( ) ;
QString startFileName = widgetItem - > mainHtmlFileName ( ) ;
if ( ! startFileName . startsWith ( " http:// " ) )
{
QString startFilePath = mPublishingPath + " / " + UBPersistenceManager : : widgetDirectory + " / " + widgetItem - > uuid ( ) . toString ( ) + " .wgt/ " + startFileName ;
QFile startFile ( startFilePath ) ;
if ( startFile . exists ( ) )
{
if ( startFile . open ( QIODevice : : ReadWrite ) )
{
QTextStream stream ( & startFile ) ;
QStringList lines ;
bool addedJs = false ;
QString line ;
do
{
line = stream . readLine ( ) ;
if ( ! line . isNull ( ) )
{
lines < < line ;
if ( ! addedJs & & line . contains ( " <head " ) & & line . contains ( " > " ) ) // TODO UB 4.6, this is naive ... the HEAD tag may be on several lines
{
lines < < " " ;
lines < < " <script type= \" text/javascript \" > " ;
lines < < " var widget = {}; " ;
lines < < " widget.id = ' " + widgetItem - > metadatas ( ) . id + " '; " ;
lines < < " widget.name = ' " + widgetItem - > metadatas ( ) . name + " '; " ;
lines < < " widget.description = ' " + widgetItem - > metadatas ( ) . description + " '; " ;
lines < < " widget.author = ' " + widgetItem - > metadatas ( ) . author + " '; " ;
lines < < " widget.authorEmail = ' " + widgetItem - > metadatas ( ) . authorEmail + " '; " ;
lines < < " widget.authorHref = ' " + widgetItem - > metadatas ( ) . authorHref + " '; " ;
lines < < " widget.version = ' " + widgetItem - > metadatas ( ) . version + " '; " ;
lines < < " widget.uuid = ' " + UBStringUtils : : toCanonicalUuid ( widgetItem - > uuid ( ) ) + " '; " ;
lines < < " widget.width = " + QString ( " %1 " ) . arg ( widgetItem - > nominalSize ( ) . width ( ) ) + " ; " ;
lines < < " widget.height = " + QString ( " %1 " ) . arg ( widgetItem - > nominalSize ( ) . height ( ) ) + " ; " ;
lines < < " widget.openUrl = function(url) { window.open(url); } " ;
lines < < " widget.preferences = new Array() " ;
foreach ( QString pref , preferences . keys ( ) )
{
lines < < " widget.preferences[' " + pref + " '] = ' " + preferences . value ( pref ) + " '; " ;
}
lines < < " widget.preferences.key = function(index) { " ;
lines < < " var currentIndex = 0; " ;
lines < < " for(key in widget.preferences){ " ;
lines < < " if (currentIndex == index){ return key;} " ;
lines < < " currentIndex++; " ;
lines < < " } " ;
lines < < " return ''; " ;
lines < < " } " ;
lines < < " widget.preferences.getItem = function(key) { " ;
lines < < " return widget.preferences[key]; " ;
lines < < " } " ;
lines < < " widget.preferences.setItem = function(key, value) {} " ;
lines < < " widget.preferences.removeItem = function(key) {} " ;
lines < < " widget.preferences.clear = function() {} " ;
lines < < " var uniboard = {}; " ;
lines < < " uniboard.pageCount = " + QString ( " %1 " ) . arg ( mPublishingSize ) + " ; " ;
lines < < " uniboard.currentPageNumber = " + QString ( " %1 " ) . arg ( pageNumber ) + " ; " ;
lines < < " uniboard.uuid = ' " + UBStringUtils : : toCanonicalUuid ( widgetItem - > uuid ( ) ) + " ' " ;
lines < < " uniboard.lang = navigator.language; " ;
lines < < " uniboard.locale = function() {return navigator.language} " ;
lines < < " uniboard.messages = {} " ;
lines < < " uniboard.messages.subscribeToTopic = function(topicName){} " ;
lines < < " uniboard.messages.unsubscribeFromTopic = function(topicName){} " ;
lines < < " uniboard.messages.sendMessage = function(topicName, message){} " ;
lines < < " uniboard.datastore = {}; " ;
lines < < " uniboard.datastore.document = new Array(); " ;
foreach ( QString entry , datastoreEntries . keys ( ) )
{
lines < < " uniboard.datastore.document[' " + entry + " '] = ' " + datastoreEntries . value ( entry ) + " '; " ;
}
lines < < " uniboard.datastore.document.key = function(index) { " ;
lines < < " var currentIndex = 0; " ;
lines < < " for(key in uniboard.datastore.document){ " ;
lines < < " if (currentIndex == index){ return key;} " ;
lines < < " currentIndex++; " ;
lines < < " } " ;
lines < < " return ''; " ;
lines < < " } " ;
lines < < " uniboard.datastore.document.getItem = function(key) { " ;
lines < < " return uniboard.datastore.document[key]; " ;
lines < < " } " ;
lines < < " uniboard.datastore.document.setItem = function(key, value) {} " ;
lines < < " uniboard.datastore.document.removeItem = function(key) {} " ;
lines < < " uniboard.datastore.document.clear = function() {} " ;
lines < < " uniboard.setTool = function(tool){} " ;
lines < < " uniboard.setPenColor = function(color){} " ;
lines < < " uniboard.setMarkerColor = function(color){} " ;
lines < < " uniboard.pageThumbnail = function(pageNumber){ " ;
lines < < " var nb; " ;
lines < < " if (pageNumber < 10) return 'page00' + pageNumber + '.thumbnail.jpg'; " ;
lines < < " if (pageNumber < 100) return 'page0' + pageNumber + '.thumbnail.jpg'; " ;
lines < < " return 'page' + pageNumber + '.thumbnail.jpg;' " ;
lines < < " } " ;
lines < < " uniboard.zoom = function(factor, x, y){} " ;
lines < < " uniboard.move = function(x, y){} " ;
lines < < " uniboard.move = function(x, y){} " ;
lines < < " uniboard.moveTo = function(x, y){} " ;
lines < < " uniboard.drawLineTo = function(x, y, width){} " ;
lines < < " uniboard.eraseLineTo = function(x, y, width){} " ;
lines < < " uniboard.clear = function(){} " ;
lines < < " uniboard.setBackground = function(dark, crossed){} " ;
lines < < " uniboard.addObject = function(url, width, height, x, y, background){} " ;
lines < < " uniboard.resize = function(width, height){window.resizeTo(width, height);} " ;
lines < < " uniboard.showMessage = function(message){alert(message);} " ;
lines < < " uniboard.centerOn = function(x, y){} " ;
lines < < " uniboard.addText = function(text, x, y){} " ;
lines < < " uniboard.setPreference = function(key, value){} " ;
lines < < " uniboard.preference = function(key, defValue){ " ;
lines < < " var pref = widget.preferences[key]; " ;
lines < < " if (pref == undefined) " ;
lines < < " return defValue; " ;
lines < < " else " ;
lines < < " return pref; " ;
lines < < " } " ;
lines < < " uniboard.preferenceKeys = function(){ " ;
lines < < " var keys = new Array(); " ;
lines < < " for(key in widget.preferences){ " ;
lines < < " keys.push(key); " ;
lines < < " } " ;
lines < < " return keys; " ;
lines < < " } " ;
lines < < " uniboard.datastore.document.key = function(index) { " ;
lines < < " var currentIndex = 0; " ;
lines < < " for(key in uniboard.datastore.document){ " ;
lines < < " if (currentIndex == index){ return key;} " ;
lines < < " currentIndex++; " ;
lines < < " } " ;
lines < < " return ''; " ;
lines < < " } " ;
lines < < " uniboard.datastore.document.getItem = function(key) { " ;
lines < < " return uniboard.datastore.document[key]; " ;
lines < < " } " ;
lines < < " uniboard.datastore.document.setItem = function(key, value) {} " ;
lines < < " uniboard.datastore.document.removeItem = function(key) {} " ;
lines < < " uniboard.datastore.document.clear = function() {} " ;
lines < < " </script> " ;
lines < < " " ;
addedJs = true ;
}
}
}
while ( ! line . isNull ( ) ) ;
startFile . resize ( 0 ) ;
startFile . write ( lines . join ( " \n " ) . toUtf8 ( ) ) ; // TODO UB 4.x detect real html encoding
startFile . close ( ) ;
}
}
}
else {
qWarning ( ) < < " Remote Widget start file, cannot inject widget preferences and datastore entries " ;
}
}
void UBDocumentPublisher : : init ( )
{
mCrlf = 0x0d ;
mCrlf + = 0x0a ;
mDocInfos . title = " " ;
mDocInfos . description = " " ;
mpCookieJar = new QNetworkCookieJar ( ) ;
mpNetworkMgr = new QNetworkAccessManager ( this ) ;
connect ( mpNetworkMgr , SIGNAL ( finished ( QNetworkReply * ) ) , this , SLOT ( onFinished ( QNetworkReply * ) ) ) ;
}
void UBDocumentPublisher : : onFinished ( QNetworkReply * reply )
{
QVariant cookieHeader = reply - > rawHeader ( " Set-Cookie " ) ;
// First we concatenate all the Set-Cookie values (the packet can contains many of them)
QStringList qslCookie = cookieHeader . toString ( ) . split ( " \n " ) ;
QString qsCookieValue = qslCookie . at ( 0 ) ;
for ( int i = 1 ; i < qslCookie . size ( ) ; i + + ) {
qsCookieValue + = " ; " + qslCookie . at ( i ) ;
}
// Now we isolate every cookie value
QStringList qslCookieVals = qsCookieValue . split ( " ; " ) ;
bool bTransferOk = false ;
for ( int j = 0 ; j < qslCookieVals . size ( ) ; j + + )
{
qDebug ( ) < < j ;
if ( qslCookieVals . at ( j ) . startsWith ( " assetStatus " ) )
{
QStringList qslAsset = qslCookieVals . at ( j ) . split ( " = " ) ;
if ( qslAsset . at ( 1 ) = = " UPLOADED " )
{
bTransferOk = true ;
break ;
}
}
}
if ( bTransferOk )
{
UBApplication : : showMessage ( tr ( " Document uploaded correctly on the web. " ) ) ;
}
else
{
UBApplication : : showMessage ( tr ( " Failed to upload document on the web. " ) ) ;
}
reply - > deleteLater ( ) ;
}
void UBDocumentPublisher : : sendUbw ( QString username , QString password )
{
if ( QFile : : exists ( mTmpZipFile ) )
{
QFile f ( mTmpZipFile ) ;
if ( f . open ( QIODevice : : ReadOnly ) )
{
QFileInfo fi ( f ) ;
QByteArray ba = f . readAll ( ) ;
QString boundary , data , multipartHeader ;
QByteArray datatoSend ;
boundary = " ---WebKitFormBoundaryDKBTgA53MiyWrzLY " ;
multipartHeader = " multipart/form-data; boundary= " + boundary ;
data = " -- " + boundary + mCrlf ;
data + = " Content-Disposition: form-data; name= \" title \" " + mCrlf + mCrlf + mDocInfos . title + mCrlf ;
data + = " -- " + boundary + mCrlf ;
data + = " Content-Disposition: form-data; name= \" description \" " + mCrlf + mCrlf + mDocInfos . description . remove ( " \n " ) + mCrlf ;
data + = " -- " + boundary + mCrlf ;
data + = " Content-Disposition: form-data; name= \" file \" ; filename= \" " + fi . fileName ( ) + " \" " + mCrlf ;
data + = " Content-Type: application/octet-stream " + mCrlf + mCrlf ;
datatoSend = data . toAscii ( ) ; // convert data string to byte array for request
datatoSend + = ba ;
datatoSend + = mCrlf ;
datatoSend + = QString ( " --%0--%1 " ) . arg ( boundary ) . arg ( mCrlf ) ;
QNetworkRequest request ( QUrl ( QString ( DOCPUBLICATION_URL ) . toAscii ( ) . constData ( ) ) ) ;
request . setHeader ( QNetworkRequest : : ContentTypeHeader , multipartHeader ) ;
request . setHeader ( QNetworkRequest : : ContentLengthHeader , datatoSend . size ( ) ) ;
QString b64Auth = getBase64Of ( QString ( " %0:%1 " ) . arg ( username ) . arg ( password ) ) ;
request . setRawHeader ( " Authorization " , QString ( " Basic %0 " ) . arg ( b64Auth ) . toAscii ( ) . constData ( ) ) ;
request . setRawHeader ( " Host " , " planete.sankore.org " ) ;
request . setRawHeader ( " Accept " , " */* " ) ;
request . setRawHeader ( " Accept-Language " , " en-US,* " ) ;
mpCookieJar - > setCookiesFromUrl ( mCookies , QUrl ( DOCPUBLICATION_URL ) ) ;
mpNetworkMgr - > setCookieJar ( mpCookieJar ) ;
// Send the file
mpNetworkMgr - > post ( request , datatoSend ) ;
}
}
}
QString UBDocumentPublisher : : getBase64Of ( QString stringToEncode )
{
return stringToEncode . toAscii ( ) . toBase64 ( ) ;
}
// ---------------------------------------------------------
UBProxyLoginDlg : : UBProxyLoginDlg ( QWidget * parent , const char * name ) : QDialog ( parent )
, mpLayout ( NULL )
, mpUserLayout ( NULL )