GH-719 Fix paste upload encoding and do not try to upload over limit
This commit is contained in:
		@@ -11,12 +11,22 @@
 | 
				
			|||||||
void GuiUtil::uploadPaste(const QString &text, QWidget *parentWidget)
 | 
					void GuiUtil::uploadPaste(const QString &text, QWidget *parentWidget)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ProgressDialog dialog(parentWidget);
 | 
						ProgressDialog dialog(parentWidget);
 | 
				
			||||||
	PasteUpload *paste = new PasteUpload(parentWidget, text);
 | 
						std::unique_ptr<PasteUpload> paste(new PasteUpload(parentWidget, text));
 | 
				
			||||||
	dialog.exec(paste);
 | 
					
 | 
				
			||||||
 | 
						if (!paste->validateText())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							CustomMessageBox::selectable(
 | 
				
			||||||
 | 
								parentWidget, QObject::tr("Upload failed"),
 | 
				
			||||||
 | 
								QObject::tr("The log file is too big. You'll have to upload it manually."),
 | 
				
			||||||
 | 
								QMessageBox::Warning)->exec();
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dialog.exec(paste.get());
 | 
				
			||||||
	if (!paste->successful())
 | 
						if (!paste->successful())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		CustomMessageBox::selectable(parentWidget, "Upload failed", paste->failReason(),
 | 
							CustomMessageBox::selectable(parentWidget, QObject::tr("Upload failed"),
 | 
				
			||||||
									 QMessageBox::Critical)->exec();
 | 
														 paste->failReason(), QMessageBox::Critical)->exec();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -25,11 +35,11 @@ void GuiUtil::uploadPaste(const QString &text, QWidget *parentWidget)
 | 
				
			|||||||
		QDesktopServices::openUrl(link);
 | 
							QDesktopServices::openUrl(link);
 | 
				
			||||||
		CustomMessageBox::selectable(
 | 
							CustomMessageBox::selectable(
 | 
				
			||||||
			parentWidget, QObject::tr("Upload finished"),
 | 
								parentWidget, QObject::tr("Upload finished"),
 | 
				
			||||||
			QObject::tr("The <a href=\"%1\">link to the uploaded log</a> has been opened in the default "
 | 
								QObject::tr("The <a href=\"%1\">link to the uploaded log</a> has been opened in "
 | 
				
			||||||
			   "browser and placed in your clipboard.").arg(link),
 | 
											"the default "
 | 
				
			||||||
 | 
											"browser and placed in your clipboard.").arg(link),
 | 
				
			||||||
			QMessageBox::Information)->exec();
 | 
								QMessageBox::Information)->exec();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	delete paste;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GuiUtil::setClipboardText(const QString &text)
 | 
					void GuiUtil::setClipboardText(const QString &text)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,8 +6,15 @@
 | 
				
			|||||||
#include "gui/dialogs/CustomMessageBox.h"
 | 
					#include "gui/dialogs/CustomMessageBox.h"
 | 
				
			||||||
#include <QDesktopServices>
 | 
					#include <QDesktopServices>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PasteUpload::PasteUpload(QWidget *window, QString text) : m_text(text), m_window(window)
 | 
					PasteUpload::PasteUpload(QWidget *window, QString text) : m_window(window)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						m_text = text.toUtf8();
 | 
				
			||||||
 | 
						m_text.replace('\n', "\r\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool PasteUpload::validateText()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return m_text.size() <= maxSize();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void PasteUpload::executeTask()
 | 
					void PasteUpload::executeTask()
 | 
				
			||||||
@@ -16,7 +23,7 @@ void PasteUpload::executeTask()
 | 
				
			|||||||
	request.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Uncached)");
 | 
						request.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Uncached)");
 | 
				
			||||||
	QByteArray content(
 | 
						QByteArray content(
 | 
				
			||||||
		"key=public&description=MultiMC5+Log+File&language=plain&format=json&expire=2592000&paste=" +
 | 
							"key=public&description=MultiMC5+Log+File&language=plain&format=json&expire=2592000&paste=" +
 | 
				
			||||||
		m_text.toUtf8());
 | 
							m_text.toPercentEncoding());
 | 
				
			||||||
	request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
 | 
						request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
 | 
				
			||||||
	request.setRawHeader("Content-Length", QByteArray::number(content.size()));
 | 
						request.setRawHeader("Content-Length", QByteArray::number(content.size()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,12 +18,18 @@ public:
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		return m_pasteID;
 | 
							return m_pasteID;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						uint32_t maxSize()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// 2MB for paste.ee
 | 
				
			||||||
 | 
							return 1024*1024*2;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						bool validateText();
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
	virtual void executeTask();
 | 
						virtual void executeTask();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
	bool parseResult(QJsonDocument doc);
 | 
						bool parseResult(QJsonDocument doc);
 | 
				
			||||||
	QString m_text;
 | 
						QByteArray m_text;
 | 
				
			||||||
	QString m_error;
 | 
						QString m_error;
 | 
				
			||||||
	QWidget *m_window;
 | 
						QWidget *m_window;
 | 
				
			||||||
	QString m_pasteID;
 | 
						QString m_pasteID;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user