Update app/reportissuedialog.cpp

This commit is contained in:
RedLine AI Agent 2025-09-05 20:44:38 +00:00
parent fcaa1eacaf
commit b6403208f1

View File

@ -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();
} }