From d61aa6d933fd0191781ba2a6c878da751616f261 Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Thu, 21 Jul 2011 13:59:18 +0200 Subject: [PATCH] Updated the web publication --- .../publishing/UBDocumentPublisher.cpp | 187 +++++++++++++++--- src/adaptors/publishing/UBDocumentPublisher.h | 30 +++ 2 files changed, 186 insertions(+), 31 deletions(-) diff --git a/src/adaptors/publishing/UBDocumentPublisher.cpp b/src/adaptors/publishing/UBDocumentPublisher.cpp index fcc64354..4f241cb1 100644 --- a/src/adaptors/publishing/UBDocumentPublisher.cpp +++ b/src/adaptors/publishing/UBDocumentPublisher.cpp @@ -63,17 +63,23 @@ UBDocumentPublisher::~UBDocumentPublisher() void UBDocumentPublisher::publish() { - //check that the username and password are stored on preferences - UBSettings* settings = UBSettings::settings(); + UBPublicationDlg dlg; + if(QDialog::Accepted == dlg.exec()) + { + mDocInfos.title = dlg.title(); + mDocInfos.description = dlg.description(); - mUsername = settings->communityUsername(); - mPassword = settings->communityPassword(); - buildUbwFile(); - UBApplication::showMessage(tr("Uploading Sankore File on Web.")); + //check that the username and password are stored on preferences + UBSettings* settings = UBSettings::settings(); - login(mUsername, mPassword); - //sendUbw(); + mUsername = settings->communityUsername(); + mPassword = settings->communityPassword(); + buildUbwFile(); + UBApplication::showMessage(tr("Uploading Sankore File on Web.")); + login(mUsername, mPassword); + //sendUbw(); + } } void UBDocumentPublisher::onLoginDone() @@ -573,6 +579,8 @@ void UBDocumentPublisher::init() { mCrlf=0x0d; mCrlf+=0x0a; + mDocInfos.title = ""; + mDocInfos.description = ""; mpNetworkMgr = new QNetworkAccessManager(this); mpCookieJar = new QNetworkCookieJar(); @@ -592,19 +600,19 @@ void UBDocumentPublisher::onFinished(QNetworkReply *reply) { QByteArray response = reply->readAll(); - if (!bLoginCookieSet) - { - 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); - } + 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("; "); + // Now we isolate every cookie value + QStringList qslCookieVals = qsCookieValue.split("; "); + if (!bLoginCookieSet) + { // Finally we create the cookies for (int i = 0; i < qslCookieVals.size(); i++) { @@ -643,19 +651,30 @@ void UBDocumentPublisher::onFinished(QNetworkReply *reply) } else { - if (!response.isEmpty()){ - // Display the iframe - mpWebView->setHtml(response, reply->url()); - UBApplication::applicationController->showSankoreWebDocument(); - } - else + if (response.isEmpty()) { - // Redirect - QVariant locationHeader = reply->rawHeader("Location"); - - QNetworkRequest req(QUrl(locationHeader.toString())); - mpNetworkMgr->get(req); -// qDebug() << mpWebView->url().toString(); + // Verify that the UBW file has been sent correctly + bool bTransferOk = false; + for(int j = 0; j <= qslCookieVals.size(); 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(); @@ -691,6 +710,15 @@ void UBDocumentPublisher::sendUbw() request.setRawHeader("Accept-Language", "en-US,*"); request.setRawHeader("Referer", DOCPUBLICATION_URL); + QNetworkCookie titleCookie("title", mDocInfos.title.toAscii().constData()); + QNetworkCookie descCookie("description", mDocInfos.description.remove("\n").toAscii().constData()); + + mCookies << titleCookie; + mCookies << descCookie; + + mpCookieJar->setCookiesFromUrl(mCookies, QUrl(DOCPUBLICATION_URL)); + mpNetworkMgr->setCookieJar(mpCookieJar); + // Send the file mpNetworkMgr->post(request,datatoSend); } @@ -806,3 +834,100 @@ UBProxyLoginDlg::~UBProxyLoginDlg() mpPassword = NULL; } } + +// --------------------------------------------------------- +UBPublicationDlg::UBPublicationDlg(QWidget *parent, const char *name):QDialog(parent) + , mpLayout(NULL) + , mpTitleLayout(NULL) + , mpTitleLabel(NULL) + , mpTitle(NULL) + , mpDescLabel(NULL) + , mpDescription(NULL) + , mpButtons(NULL) +{ + setObjectName(name); + setWindowTitle(tr("Publish document on the web")); + + resize(500, 300); + + mpLayout = new QVBoxLayout(); + setLayout(mpLayout); + + mpTitleLabel = new QLabel(tr("Title:"), this); + mpTitle = new QLineEdit(this); + mpTitleLayout = new QHBoxLayout(); + mpTitleLayout->addWidget(mpTitleLabel, 0); + mpTitleLayout->addWidget(mpTitle, 1); + mpLayout->addLayout(mpTitleLayout, 0); + + mpDescLabel = new QLabel(tr("Description:"), this); + mpLayout->addWidget(mpDescLabel, 0); + + mpDescription = new QTextEdit(this); + mpLayout->addWidget(mpDescription, 1); + + mpButtons = new QDialogButtonBox(QDialogButtonBox::Cancel | QDialogButtonBox::Ok, Qt::Horizontal, this); + mpButtons->button(QDialogButtonBox::Ok)->setText(tr("Publish")); + mpLayout->addWidget(mpButtons); + + mpButtons->button(QDialogButtonBox::Ok)->setEnabled(false); + + connect(mpButtons, SIGNAL(accepted()), this, SLOT(accept())); + connect(mpButtons, SIGNAL(rejected()), this, SLOT(reject())); + connect(mpTitle, SIGNAL(textChanged(QString)), this, SLOT(onTextChanged())); + connect(mpDescription, SIGNAL(textChanged()), this, SLOT(onTextChanged())); +} + +UBPublicationDlg::~UBPublicationDlg() +{ + if(NULL != mpTitleLabel) + { + delete mpTitleLabel; + mpTitleLabel = NULL; + } + if(NULL != mpTitle) + { + delete mpTitle; + mpTitle = NULL; + } + if(NULL != mpDescLabel) + { + delete mpDescLabel; + mpDescLabel = NULL; + } + if(NULL != mpDescription) + { + delete mpDescription; + mpDescription = NULL; + } + if(NULL != mpButtons) + { + delete mpButtons; + mpButtons = NULL; + } + if(NULL != mpTitleLayout) + { + delete mpTitleLayout; + mpTitleLayout = NULL; + } + if(NULL != mpLayout) + { + delete mpLayout; + mpLayout = NULL; + } +} + +void UBPublicationDlg::onTextChanged() +{ + bool bPublishButtonState = false; + if(mpTitle->text() != "" && mpDescription->document()->toPlainText() != "") + { + bPublishButtonState = true; + } + else + { + bPublishButtonState = false; + } + + mpButtons->button(QDialogButtonBox::Ok)->setEnabled(bPublishButtonState); +} diff --git a/src/adaptors/publishing/UBDocumentPublisher.h b/src/adaptors/publishing/UBDocumentPublisher.h index 1f8e1743..264c39b4 100644 --- a/src/adaptors/publishing/UBDocumentPublisher.h +++ b/src/adaptors/publishing/UBDocumentPublisher.h @@ -10,6 +10,12 @@ #define DOCPUBLICATION_URL "http://sankore.devxwiki.com/xwiki/bin/view/CreateResources/UniboardUpload" #define XWIKI_ORIGIN_HEADER "http://sankore.devxwiki.com" +typedef struct +{ + QString title; + QString description; +} sDocumentInfos; + class UBDocumentProxy; class UBServerXMLHttpRequest; class UBGraphicsW3CWidgetItem; @@ -36,6 +42,29 @@ private: QLineEdit* mpPassword; }; +class UBPublicationDlg : public QDialog +{ + Q_OBJECT +public: + UBPublicationDlg(QWidget* parent=0, const char* name="UBPublicationDlg"); + ~UBPublicationDlg(); + + QString title(){return mpTitle->text();} + QString description(){return mpDescription->document()->toPlainText();} + +private slots: + void onTextChanged(); + +private: + QVBoxLayout* mpLayout; + QHBoxLayout* mpTitleLayout; + QLabel* mpTitleLabel; + QLineEdit* mpTitle; + QLabel* mpDescLabel; + QTextEdit* mpDescription; + QDialogButtonBox* mpButtons; +}; + class UBDocumentPublisher : public UBAbstractPublisher { @@ -88,6 +117,7 @@ private: void login(QString username, QString password); QString mTmpZipFile; QList mCookies; + sDocumentInfos mDocInfos; }; #endif // UBDOCUMENTPUBLISHER_H