.github
api
gui
logic
icons
java
launch
meta
minecraft
net
ByteArraySink.h
ChecksumValidator.h
Download.cpp
Download.h
FileSink.cpp
FileSink.h
HttpMetaCache.cpp
HttpMetaCache.h
MetaCacheSink.cpp
MetaCacheSink.h
Mode.h
NetAction.h
NetJob.cpp
NetJob.h
PasteUpload.cpp
PasteUpload.h
Sink.h
URLConstants.cpp
URLConstants.h
Validator.h
news
notifications
pathmatcher
screenshots
settings
status
tasks
testdata
tools
translations
updater
BaseInstaller.cpp
BaseInstaller.h
BaseInstance.cpp
BaseInstance.h
BaseInstanceProvider.h
BaseVersion.h
BaseVersionList.cpp
BaseVersionList.h
CMakeLists.txt
Commandline.cpp
Commandline.h
DefaultVariable.h
Env.cpp
Env.h
Exception.h
FileSystem.cpp
FileSystem.h
FileSystem_test.cpp
FolderInstanceProvider.cpp
FolderInstanceProvider.h
GZip.cpp
GZip.h
GZip_test.cpp
InstanceCopyTask.cpp
InstanceCopyTask.h
InstanceCreationTask.cpp
InstanceCreationTask.h
InstanceImportTask.cpp
InstanceImportTask.h
InstanceList.cpp
InstanceList.h
Json.cpp
Json.h
LoggedProcess.cpp
LoggedProcess.h
MMCStrings.cpp
MMCStrings.h
MMCZip.cpp
MMCZip.h
MessageLevel.cpp
MessageLevel.h
NullInstance.h
ProblemProvider.h
QObjectPtr.h
RWStorage.h
RecursiveFileSystemWatcher.cpp
RecursiveFileSystemWatcher.h
SeparatorPrefixTree.h
Usable.h
Version.cpp
Version.h
Version_test.cpp
application
cmake
libraries
travis
.arcconfig
.clang-format
.gitattributes
.gitignore
.gitmodules
.travis.yml
BUILD.md
CMakeLists.txt
COPYING.md
README.md
changelog.md
104 lines
2.8 KiB
C++
104 lines
2.8 KiB
C++
#include "PasteUpload.h"
|
|
#include "Env.h"
|
|
#include <QDebug>
|
|
#include <QJsonObject>
|
|
#include <QJsonArray>
|
|
#include <QJsonDocument>
|
|
#include <QFile>
|
|
|
|
PasteUpload::PasteUpload(QWidget *window, QString text, QString key) : m_window(window)
|
|
{
|
|
m_key = key;
|
|
QByteArray temp;
|
|
QJsonObject topLevelObj;
|
|
QJsonObject sectionObject;
|
|
sectionObject.insert("contents", text);
|
|
QJsonArray sectionArray;
|
|
sectionArray.append(sectionObject);
|
|
topLevelObj.insert("description", "MultiMC Log Upload");
|
|
topLevelObj.insert("sections", sectionArray);
|
|
QJsonDocument docOut;
|
|
docOut.setObject(topLevelObj);
|
|
m_jsonContent = docOut.toJson();
|
|
}
|
|
|
|
PasteUpload::~PasteUpload()
|
|
{
|
|
}
|
|
|
|
bool PasteUpload::validateText()
|
|
{
|
|
return m_jsonContent.size() <= maxSize();
|
|
}
|
|
|
|
void PasteUpload::executeTask()
|
|
{
|
|
QNetworkRequest request(QUrl("https://api.paste.ee/v1/pastes"));
|
|
request.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Uncached)");
|
|
|
|
request.setRawHeader("Content-Type", "application/json");
|
|
request.setRawHeader("Content-Length", QByteArray::number(m_jsonContent.size()));
|
|
request.setRawHeader("X-Auth-Token", m_key.toStdString().c_str());
|
|
|
|
QNetworkReply *rep = ENV.qnam().post(request, m_jsonContent);
|
|
|
|
m_reply = std::shared_ptr<QNetworkReply>(rep);
|
|
setStatus(tr("Uploading to paste.ee"));
|
|
connect(rep, &QNetworkReply::uploadProgress, this, &Task::setProgress);
|
|
connect(rep, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(downloadError(QNetworkReply::NetworkError)));
|
|
connect(rep, SIGNAL(finished()), this, SLOT(downloadFinished()));
|
|
}
|
|
|
|
void PasteUpload::downloadError(QNetworkReply::NetworkError error)
|
|
{
|
|
// error happened during download.
|
|
qCritical() << "Network error: " << error;
|
|
emitFailed(m_reply->errorString());
|
|
}
|
|
|
|
void PasteUpload::downloadFinished()
|
|
{
|
|
QByteArray data = m_reply->readAll();
|
|
// if the download succeeded
|
|
if (m_reply->error() == QNetworkReply::NetworkError::NoError)
|
|
{
|
|
m_reply.reset();
|
|
QJsonParseError jsonError;
|
|
QJsonDocument doc = QJsonDocument::fromJson(data, &jsonError);
|
|
if (jsonError.error != QJsonParseError::NoError)
|
|
{
|
|
emitFailed(jsonError.errorString());
|
|
return;
|
|
}
|
|
if (!parseResult(doc))
|
|
{
|
|
emitFailed(tr("paste.ee returned an error. Please consult the logs for more information"));
|
|
return;
|
|
}
|
|
}
|
|
// else the download failed
|
|
else
|
|
{
|
|
emitFailed(QString("Network error: %1").arg(m_reply->errorString()));
|
|
m_reply.reset();
|
|
return;
|
|
}
|
|
emitSucceeded();
|
|
}
|
|
|
|
bool PasteUpload::parseResult(QJsonDocument doc)
|
|
{
|
|
auto object = doc.object();
|
|
auto status = object.value("success").toBool();
|
|
if (!status)
|
|
{
|
|
qCritical() << "paste.ee reported error:" << QString(object.value("error").toString());
|
|
return false;
|
|
}
|
|
m_pasteLink = object.value("link").toString();
|
|
m_pasteID = object.value("id").toString();
|
|
qDebug() << m_pasteLink;
|
|
return true;
|
|
}
|
|
|