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)
 | 
			
		||||
{
 | 
			
		||||
	ProgressDialog dialog(parentWidget);
 | 
			
		||||
	PasteUpload *paste = new PasteUpload(parentWidget, text);
 | 
			
		||||
	dialog.exec(paste);
 | 
			
		||||
	std::unique_ptr<PasteUpload> paste(new PasteUpload(parentWidget, text));
 | 
			
		||||
 | 
			
		||||
	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())
 | 
			
		||||
	{
 | 
			
		||||
		CustomMessageBox::selectable(parentWidget, "Upload failed", paste->failReason(),
 | 
			
		||||
									 QMessageBox::Critical)->exec();
 | 
			
		||||
		CustomMessageBox::selectable(parentWidget, QObject::tr("Upload failed"),
 | 
			
		||||
									 paste->failReason(), QMessageBox::Critical)->exec();
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
	{
 | 
			
		||||
@@ -25,11 +35,11 @@ void GuiUtil::uploadPaste(const QString &text, QWidget *parentWidget)
 | 
			
		||||
		QDesktopServices::openUrl(link);
 | 
			
		||||
		CustomMessageBox::selectable(
 | 
			
		||||
			parentWidget, QObject::tr("Upload finished"),
 | 
			
		||||
			QObject::tr("The <a href=\"%1\">link to the uploaded log</a> has been opened in the default "
 | 
			
		||||
			   "browser and placed in your clipboard.").arg(link),
 | 
			
		||||
			QObject::tr("The <a href=\"%1\">link to the uploaded log</a> has been opened in "
 | 
			
		||||
						"the default "
 | 
			
		||||
						"browser and placed in your clipboard.").arg(link),
 | 
			
		||||
			QMessageBox::Information)->exec();
 | 
			
		||||
	}
 | 
			
		||||
	delete paste;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GuiUtil::setClipboardText(const QString &text)
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,15 @@
 | 
			
		||||
#include "gui/dialogs/CustomMessageBox.h"
 | 
			
		||||
#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()
 | 
			
		||||
@@ -16,7 +23,7 @@ void PasteUpload::executeTask()
 | 
			
		||||
	request.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Uncached)");
 | 
			
		||||
	QByteArray content(
 | 
			
		||||
		"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-Length", QByteArray::number(content.size()));
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,12 +18,18 @@ public:
 | 
			
		||||
	{
 | 
			
		||||
		return m_pasteID;
 | 
			
		||||
	}
 | 
			
		||||
	uint32_t maxSize()
 | 
			
		||||
	{
 | 
			
		||||
		// 2MB for paste.ee
 | 
			
		||||
		return 1024*1024*2;
 | 
			
		||||
	}
 | 
			
		||||
	bool validateText();
 | 
			
		||||
protected:
 | 
			
		||||
	virtual void executeTask();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	bool parseResult(QJsonDocument doc);
 | 
			
		||||
	QString m_text;
 | 
			
		||||
	QByteArray m_text;
 | 
			
		||||
	QString m_error;
 | 
			
		||||
	QWidget *m_window;
 | 
			
		||||
	QString m_pasteID;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user