| 54 | } |
| 55 | |
| 56 | void ImgurUpload::executeTask() |
| 57 | { |
| 58 | finished = false; |
| 59 | m_state = Task::State::Running; |
| 60 | QNetworkRequest request(m_url); |
| 61 | request.setHeader(QNetworkRequest::UserAgentHeader, APPLICATION->getUserAgentUncached().toUtf8()); |
| 62 | request.setRawHeader("Authorization", QString("Client-ID %1").arg(BuildConfig.IMGUR_CLIENT_ID).toStdString().c_str()); |
| 63 | request.setRawHeader("Accept", "application/json"); |
| 64 | |
| 65 | QFile f(m_shot->m_file.absoluteFilePath()); |
| 66 | if (!f.open(QFile::ReadOnly)) |
| 67 | { |
| 68 | emitFailed(); |
| 69 | return; |
| 70 | } |
| 71 | |
| 72 | QHttpMultiPart *multipart = new QHttpMultiPart(QHttpMultiPart::FormDataType); |
| 73 | QHttpPart filePart; |
| 74 | filePart.setBody(f.readAll().toBase64()); |
| 75 | filePart.setHeader(QNetworkRequest::ContentTypeHeader, "image/png"); |
| 76 | filePart.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data; name=\"image\""); |
| 77 | multipart->append(filePart); |
| 78 | QHttpPart typePart; |
| 79 | typePart.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data; name=\"type\""); |
| 80 | typePart.setBody("base64"); |
| 81 | multipart->append(typePart); |
| 82 | QHttpPart namePart; |
| 83 | namePart.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data; name=\"name\""); |
| 84 | namePart.setBody(m_shot->m_file.baseName().toUtf8()); |
| 85 | multipart->append(namePart); |
| 86 | |
| 87 | QNetworkReply *rep = m_network->post(request, multipart); |
| 88 | |
| 89 | m_reply.reset(rep); |
| 90 | connect(rep, &QNetworkReply::uploadProgress, this, &ImgurUpload::downloadProgress); |
| 91 | connect(rep, &QNetworkReply::finished, this, &ImgurUpload::downloadFinished); |
| 92 | #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) |
| 93 | connect(rep, SIGNAL(errorOccurred(QNetworkReply::NetworkError)), SLOT(downloadError(QNetworkReply::NetworkError))); |
| 94 | #else |
| 95 | connect(rep, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(downloadError(QNetworkReply::NetworkError))); |
| 96 | #endif |
| 97 | } |
| 98 | void ImgurUpload::downloadError(QNetworkReply::NetworkError error) |
| 99 | { |
| 100 | qCritical() << "ImgurUpload failed with error" << m_reply->errorString() << "Server reply:\n" << m_reply->readAll(); |