You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.9 KiB
150 lines
4.9 KiB
#include "UBCapturePublisher.h"
|
|
|
|
#include "frameworks/UBStringUtils.h"
|
|
|
|
#include "core/UBApplication.h"
|
|
#include "core/UBSettings.h"
|
|
|
|
#include "gui/UBMainWindow.h"
|
|
|
|
#include "board/UBBoardController.h"
|
|
|
|
#include "network/UBServerXMLHttpRequest.h"
|
|
#include "network/UBNetworkAccessManager.h"
|
|
|
|
#include "domain/UBGraphicsScene.h"
|
|
|
|
#include "core/memcheck.h"
|
|
|
|
UBCapturePublisher::UBCapturePublisher(const QPixmap& pixmap, QObject *parent)
|
|
: UBAbstractPublisher(parent)
|
|
, mPixmap(pixmap)
|
|
{
|
|
connect(this, SIGNAL(authenticated(const QUuid&, const QString&))
|
|
, this, SLOT(postPixmap(const QUuid&, const QString&)));
|
|
}
|
|
|
|
|
|
void UBCapturePublisher::publish()
|
|
{
|
|
UBAbstractPublisher::authenticate();
|
|
}
|
|
|
|
|
|
void UBCapturePublisher::postPixmap(const QUuid& tokenUuid, const QString& encryptedBase64Token)
|
|
{
|
|
UBCapturePublishingDialog dialog(UBApplication::mainWindow);
|
|
|
|
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)
|
|
{
|
|
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
|
UBApplication::showMessage(tr("Preparing capture for upload..."), true);
|
|
|
|
QString title = dialog.title->text();
|
|
QString description = dialog.description->toPlainText();
|
|
QString email = dialog.email->text();
|
|
QString author = dialog.author->text();
|
|
|
|
QPixmap pix(mPixmap);
|
|
|
|
if (mPixmap.hasAlpha())
|
|
{
|
|
if (UBApplication::boardController->activeScene()->isDarkBackground())
|
|
pix.fill(Qt::black);
|
|
else
|
|
pix.fill(Qt::white);
|
|
|
|
QPainter p(&pix);
|
|
p.drawPixmap(0, 0, mPixmap);
|
|
}
|
|
|
|
QByteArray bytes;
|
|
QBuffer buffer(&bytes);
|
|
buffer.open(QIODevice::WriteOnly);
|
|
pix.save(&buffer, "JPG", 80);
|
|
buffer.close();
|
|
|
|
QUrl publishingEndpoint = QUrl(UBSettings::settings()->capturesPublishingUrl);
|
|
|
|
mPublishImageOnWebUploadRequest = new UBServerXMLHttpRequest(UBNetworkAccessManager::defaultAccessManager()
|
|
, "application/octet-stream");
|
|
|
|
mPublishImageOnWebUploadRequest->setVerbose(true);
|
|
|
|
connect(mPublishImageOnWebUploadRequest, SIGNAL(finished(bool, const QByteArray&)), this, SLOT(publishImageOnWebUploadResponse(bool, const QByteArray&)));
|
|
|
|
mWebUploadPublishingUuid = QUuid::createUuid();
|
|
|
|
mPublishImageOnWebUploadRequest->addHeader("Publishing-UUID", UBStringUtils::toCanonicalUuid(mWebUploadPublishingUuid));
|
|
mPublishImageOnWebUploadRequest->addHeader("Document-Title", title);
|
|
mPublishImageOnWebUploadRequest->addHeader("Document-Author", author);
|
|
mPublishImageOnWebUploadRequest->addHeader("Document-AuthorEMail", email);
|
|
mPublishImageOnWebUploadRequest->addHeader("Document-Description", description);
|
|
mPublishImageOnWebUploadRequest->addHeader("Deletion-Token", UBStringUtils::toCanonicalUuid(QUuid::createUuid()));
|
|
mPublishImageOnWebUploadRequest->addHeader("Token-UUID", UBStringUtils::toCanonicalUuid(tokenUuid));
|
|
mPublishImageOnWebUploadRequest->addHeader("Token-Encrypted", encryptedBase64Token);
|
|
|
|
mPublishImageOnWebUploadRequest->post(publishingEndpoint, bytes);
|
|
}
|
|
else
|
|
{
|
|
UBApplication::showMessage(tr("Publication canceled ..."));
|
|
QApplication::restoreOverrideCursor();
|
|
}
|
|
}
|
|
|
|
|
|
void UBCapturePublisher::publishImageOnWebUploadResponse(bool success, const QByteArray& payload)
|
|
{
|
|
QUrl url(QString::fromUtf8(payload));
|
|
|
|
if (success && url.isValid())
|
|
{
|
|
UBApplication::showMessage(tr("Capture Published to the Web."));
|
|
}
|
|
else
|
|
{
|
|
UBApplication::showMessage(tr("Error Publishing Capture to the Web: %1").arg(QString::fromUtf8(payload)));
|
|
}
|
|
|
|
if (mPublishImageOnWebUploadRequest)
|
|
{
|
|
mPublishImageOnWebUploadRequest->deleteLater();
|
|
mPublishImageOnWebUploadRequest = 0;
|
|
}
|
|
|
|
QApplication::restoreOverrideCursor();
|
|
}
|
|
|
|
|
|
UBCapturePublishingDialog::UBCapturePublishingDialog(QWidget *parent)
|
|
: QDialog(parent)
|
|
{
|
|
Ui::capturePublishingDialog::setupUi(this);
|
|
|
|
connect(dialogButtons, SIGNAL(accepted()), this, SLOT(accept()));
|
|
connect(dialogButtons, SIGNAL(rejected()), this, SLOT(reject()));
|
|
|
|
connect(title, SIGNAL(textChanged(const QString&)), this, SLOT(updateUIState(const QString&)));
|
|
connect(email, SIGNAL(textChanged(const QString&)), this, SLOT(updateUIState(const QString&)));
|
|
|
|
dialogButtons->button(QDialogButtonBox::Ok)->setEnabled(false);
|
|
dialogButtons->button(QDialogButtonBox::Ok)->setText(tr("Publish"));
|
|
}
|
|
|
|
|
|
void UBCapturePublishingDialog::updateUIState(const QString& string)
|
|
{
|
|
Q_UNUSED(string);
|
|
|
|
bool ok = title->text().length() > 0
|
|
&& email->text().length() > 0;
|
|
|
|
dialogButtons->button(QDialogButtonBox::Ok)->setEnabled(ok);
|
|
}
|
|
|