Update app/reportissuedialog.cpp
This commit is contained in:
parent
fcaa1eacaf
commit
b6403208f1
@ -1,103 +1,103 @@
|
|||||||
#include "reportissuedialog.h"
|
#include "reportissuedialog.h"
|
||||||
#include "qjsonarray.h"
|
#include "qjsonarray.h"
|
||||||
#include "ui_reportissuedialog.h"
|
#include "ui_reportissuedialog.h"
|
||||||
|
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
|
|
||||||
ReportIssueDialog::ReportIssueDialog(const QString &giteaBaseUrl,
|
ReportIssueDialog::ReportIssueDialog(const QString &giteaBaseUrl,
|
||||||
const QString &repoOwner,
|
const QString &repoOwner,
|
||||||
const QString &repoName,
|
const QString &repoName,
|
||||||
const QString &accessToken,
|
const QString &accessToken,
|
||||||
QWidget *parent) :
|
QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::ReportIssueDialog),
|
ui(new Ui::ReportIssueDialog),
|
||||||
networkManager(new QNetworkAccessManager(this)),
|
networkManager(new QNetworkAccessManager(this)),
|
||||||
giteaBaseUrl(giteaBaseUrl),
|
giteaBaseUrl(giteaBaseUrl),
|
||||||
repoOwner(repoOwner),
|
repoOwner(repoOwner),
|
||||||
repoName(repoName),
|
repoName(repoName),
|
||||||
accessToken(accessToken)
|
accessToken(accessToken)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
connect(networkManager, &QNetworkAccessManager::finished, this, &ReportIssueDialog::onNetworkReplyFinished);
|
connect(networkManager, &QNetworkAccessManager::finished, this, &ReportIssueDialog::onNetworkReplyFinished);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReportIssueDialog::~ReportIssueDialog()
|
ReportIssueDialog::~ReportIssueDialog()
|
||||||
{
|
{
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReportIssueDialog::on_buttonSend_clicked()
|
void ReportIssueDialog::on_buttonSend_clicked()
|
||||||
{
|
{
|
||||||
QString title = ui->lineEditSummary->text().trimmed();
|
QString title = ui->lineEditSummary->text().trimmed();
|
||||||
QString details = ui->textEditDetails->toPlainText().trimmed();
|
QString details = ui->textEditDetails->toPlainText().trimmed();
|
||||||
QString contact = ui->lineEditContact->text().trimmed();
|
QString contact = ui->lineEditContact->text().trimmed();
|
||||||
|
|
||||||
if (title.isEmpty()) {
|
if (title.isEmpty()) {
|
||||||
QMessageBox::warning(this, tr("Input Error"), tr("Please enter a summary/title for the issue."));
|
QMessageBox::warning(this, tr("Input Error"), tr("Please enter a summary/title for the issue."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString body = details;
|
QString body = details;
|
||||||
if (!contact.isEmpty()) {
|
if (!contact.isEmpty()) {
|
||||||
body += QString("\n\nContact info:\n%1").arg(contact);
|
body += QString("\n\nContact info:\n%1").arg(contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
ui->buttonSend->setEnabled(false);
|
ui->buttonSend->setEnabled(false);
|
||||||
sendIssueReport(title, body, contact);
|
sendIssueReport(title, body, contact);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReportIssueDialog::on_buttonCancel_clicked()
|
void ReportIssueDialog::on_buttonCancel_clicked()
|
||||||
{
|
{
|
||||||
reject();
|
reject();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReportIssueDialog::sendIssueReport(const QString &title, const QString &body, const QString &/*contact*/)
|
void ReportIssueDialog::sendIssueReport(const QString &title, const QString &body, const QString &/*contact*/)
|
||||||
{
|
{
|
||||||
// Compose URL: e.g. https://gitea.example.com/api/v1/repos/{owner}/{repo}/issues
|
// Compose URL: e.g. https://gitea.example.com/api/v1/repos/{owner}/{repo}/issues
|
||||||
QUrl url(QString("%1/api/v1/repos/%2/%3/issues").arg(giteaBaseUrl).arg(repoOwner).arg(repoName));
|
QUrl url(QString("%1/api/v1/repos/%2/%3/issues").arg(giteaBaseUrl).arg(repoOwner).arg(repoName));
|
||||||
|
|
||||||
QNetworkRequest request(url);
|
QNetworkRequest request(url);
|
||||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||||
|
|
||||||
if (!accessToken.isEmpty()) {
|
if (!accessToken.isEmpty()) {
|
||||||
request.setRawHeader("Authorization", "token " + accessToken.toUtf8());
|
request.setRawHeader("Authorization", "token " + accessToken.toUtf8());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compose JSON body
|
// Compose JSON body
|
||||||
QJsonObject json;
|
QJsonObject json;
|
||||||
json["title"] = title;
|
json["title"] = title;
|
||||||
json["body"] = body;
|
json["body"] = body;
|
||||||
json["labels"] = QJsonArray{12};
|
json["labels"] = QJsonArray{12};
|
||||||
|
|
||||||
QJsonDocument doc(json);
|
QJsonDocument doc(json);
|
||||||
QByteArray data = doc.toJson();
|
QByteArray data = doc.toJson();
|
||||||
|
|
||||||
networkManager->post(request, data);
|
networkManager->post(request, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReportIssueDialog::onNetworkReplyFinished(QNetworkReply *reply)
|
void ReportIssueDialog::onNetworkReplyFinished(QNetworkReply *reply)
|
||||||
{
|
{
|
||||||
ui->buttonSend->setEnabled(true);
|
ui->buttonSend->setEnabled(true);
|
||||||
|
|
||||||
QByteArray responseData = reply->readAll();
|
QByteArray responseData = reply->readAll();
|
||||||
QString responseStr = QString::fromUtf8(responseData);
|
QString responseStr = QString::fromUtf8(responseData);
|
||||||
|
|
||||||
if (reply->error() != QNetworkReply::NoError) {
|
if (reply->error() != QNetworkReply::NoError) {
|
||||||
QString errorStr = reply->errorString();
|
QString errorStr = reply->errorString();
|
||||||
if (errorStr.isEmpty()) errorStr = "Unknown network error";
|
if (errorStr.isEmpty()) errorStr = "Unknown network error";
|
||||||
QMessageBox::critical(this, tr("Error"), tr("Failed to send issue report:\n%1\nResponse:\n%2").arg(errorStr).arg(responseStr));
|
QMessageBox::critical(this, tr("Error"), tr("Failed to send issue report:\n%1\nResponse:\n%2").arg(errorStr).arg(responseStr));
|
||||||
} else {
|
} else {
|
||||||
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||||
if (status == 201) {
|
if (status == 201) {
|
||||||
QMessageBox::information(this, tr("Success"), tr("Issue reported successfully!"));
|
QMessageBox::information(this, tr("Success"), tr("Issue reported successfully!"));
|
||||||
accept();
|
accept();
|
||||||
} else {
|
} else {
|
||||||
QMessageBox::warning(this, tr("Failed"), tr("Unexpected response from server (%1):\n%2").arg(status).arg(responseStr));
|
QMessageBox::warning(this, tr("Failed"), tr("Unexpected response from server (%1):\n%2").arg(status).arg(responseStr));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user