From 800bb7375b45959486706f9746bb2fe146c3403e Mon Sep 17 00:00:00 2001 From: arcan1s Date: Sun, 27 Jul 2014 22:50:18 +0400 Subject: [PATCH] add support of github --- sources/src/CMakeLists.txt | 2 +- sources/src/config.h | 4 +- sources/src/reportabug.cpp | 152 +++++++++++++++++++++++++++++++++++-- sources/src/reportabug.h | 8 ++ sources/src/reportabug.ui | 6 ++ 5 files changed, 162 insertions(+), 10 deletions(-) diff --git a/sources/src/CMakeLists.txt b/sources/src/CMakeLists.txt index fc4afe5..6eaa623 100644 --- a/sources/src/CMakeLists.txt +++ b/sources/src/CMakeLists.txt @@ -25,7 +25,7 @@ if (USE_QT5) add_executable (${SUBPROJECT} ${UI_HEADERS} ${HEADERS} ${SOURCES} ${MOC_SOURCES}) target_link_libraries (${SUBPROJECT} ${Qt5Widgets_LIBRARIES} ${Qt5Core_LIBRARIES}) else () - find_package (Qt4 REQUIRED) + find_package(Qt4 COMPONENTS QtCore QtGui QtNetwork REQUIRED) include (${QT_USE_FILE}) qt4_wrap_cpp (MOC_SOURCES ${HEADERS}) qt4_wrap_ui (UI_HEADERS ${FORMS}) diff --git a/sources/src/config.h b/sources/src/config.h index c5c5e3d..6847dd2 100644 --- a/sources/src/config.h +++ b/sources/src/config.h @@ -41,12 +41,12 @@ #define TAG_ASSIGNEE "$OWNER" #define TAG_MILESTONE "" // comma separated -#define TAG_LABELS "auto" +#define TAG_LABELS "auto,bug" /* * configuration of creating an issue using GitReports * - * please, visit the following site: https://gitreports.com/ + * please, visit https://gitreports.com/ * and set up it for your repository */ // enable this function diff --git a/sources/src/reportabug.cpp b/sources/src/reportabug.cpp index 1a81136..d977223 100644 --- a/sources/src/reportabug.cpp +++ b/sources/src/reportabug.cpp @@ -19,7 +19,12 @@ #include "ui_reportabug.h" #include +#include +#include +#include +#include #include +#include #include "config.h" @@ -46,7 +51,6 @@ void Reportabug::createActions() connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateTabs(int))); connect(ui->buttonBox->button(QDialogButtonBox::Close), SIGNAL(clicked(bool)), this, SLOT(close())); connect(ui->buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked(bool)), this, SLOT(sendReport())); - connect(ui->buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked(bool)), this, SLOT(close())); } @@ -88,17 +92,72 @@ void Reportabug::keyPressEvent(QKeyEvent *pressedKey) } +QString Reportabug::parseCmd(QString line, + const QString password, + const QString text, + const QString username) +{ + if (line.contains(QString("$ISSUES_URL"))) + line = line.split(QString("$ISSUES_URL"))[0] + + parseString(QString(ISSUES_URL)) + + line.split(QString("$ISSUES_URL"))[1]; + if (line.contains(QString("$PASSWORD"))) + line = line.split(QString("$PASSWORD"))[0] + + password + + line.split(QString("$PASSWORD"))[1]; + if (line.contains(QString("$TEXT"))) + line = line.split(QString("$TEXT"))[0] + + text + + line.split(QString("$TEXT"))[1]; + if (line.contains(QString("$USERNAME"))) + line = line.split(QString("$USERNAME"))[0] + + username + + line.split(QString("$USERNAME"))[1]; + + return line; +} + + QString Reportabug::parseString(QString line) { if (line.contains(QString("$OWNER"))) - line = line.split(QString("$OWNER"))[0] + QString(OWNER) + line.split(QString("$OWNER"))[1]; + line = line.split(QString("$OWNER"))[0] + + QString(OWNER) + + line.split(QString("$OWNER"))[1]; if (line.contains(QString("$PROJECT"))) - line = line.split(QString("$PROJECT"))[0] + QString(PROJECT) + line.split(QString("$PROJECT"))[1]; + line = line.split(QString("$PROJECT"))[0] + + QString(PROJECT) + + line.split(QString("$PROJECT"))[1]; return line; } +QByteArray Reportabug::prepareRequest(const QString title, const QString body) +{ + QStringList requestList; + requestList.append(QString("\"title\":\"") + title + QString("\"")); + requestList.append(QString("\"body\":\"") + body + QString("\"")); + if (!QString(TAG_ASSIGNEE).isEmpty()) + requestList.append(QString("\"assignee\":\"") + parseString(QString(TAG_ASSIGNEE)) + QString("\"")); + if (!QString(TAG_MILESTONE).isEmpty()) + requestList.append(QString("\"milestone\":") + QString(TAG_MILESTONE)); + if (!QString(TAG_LABELS).isEmpty()) { + QStringList labels = QString(TAG_LABELS).split(QChar(',')); + for (int i=0; icomboBox->currentIndex()); @@ -118,15 +177,18 @@ void Reportabug::updateTabs(const int index) if (number == -1) return; else if (number == 0) - sendReportUsingGithub(); + updateGithubTab(); else if (number == 1) - sendReportUsingGitreport(); + updateGitreportTab(); } void Reportabug::updateGithubTab() { - + ui->lineEdit_username->clear(); + ui->lineEdit_password->clear(); + ui->lineEdit_title->setText(QString(TAG_TITLE)); + ui->plainTextEdit->setPlainText(QString(TAG_BODY)); } @@ -136,9 +198,85 @@ void Reportabug::updateGitreportTab() } +void Reportabug::replyFinished(QNetworkReply *reply) +{ + int state = true; + QString answer = reply->readAll(); + QString messageBody, messageTitle; + QMessageBox::Icon icon = QMessageBox::NoIcon; + if (answer.contains(QString("\"html_url\":"))) { + QString url; + for (int i=0; iaddItem(horizontalSpacer, layout->rowCount(), 0, 1, layout->columnCount()); + int ret = messageBox.exec(); + switch (ret) { + case QMessageBox::Ok: + if (state) close(); + break; + case QMessageBox::Retry: + if (state) updateTabs(ui->comboBox->currentIndex()); + break; + default: + break; + } +} + + void Reportabug::sendReportUsingGithub() { - + // authorization + QString username = ui->lineEdit_username->text(); + QString password = ui->lineEdit_password->text(); + QString concatenated = username + QString(":") + password; + QByteArray userData = concatenated.toLocal8Bit().toBase64(); + QString headerData = QString("Basic ") + userData; + // text + QString title = ui->lineEdit_title->text(); + QString body = ui->plainTextEdit->toPlainText(); + QByteArray text = prepareRequest(title, body); + QByteArray textSize = QByteArray::number(text.size()); + // sending request + QNetworkRequest request = QNetworkRequest(parseString(QString(ISSUES_URL))); + request.setRawHeader("Authorization", headerData.toLocal8Bit()); + request.setRawHeader("User-Agent", "reportabug"); + request.setRawHeader("Host", "api.github.com"); + request.setRawHeader("Accept", "*/*"); + request.setRawHeader("Content-Type", "application/vnd.github.VERSION.raw+json"); + request.setRawHeader("Content-Length", textSize); + QNetworkAccessManager *manager = new QNetworkAccessManager; + manager->post(request, text); + connect(manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinished(QNetworkReply *))); } diff --git a/sources/src/reportabug.h b/sources/src/reportabug.h index d179a76..2815cf0 100644 --- a/sources/src/reportabug.h +++ b/sources/src/reportabug.h @@ -22,6 +22,8 @@ #include +class QNetworkReply; + namespace Ui { class Reportabug; } @@ -45,6 +47,7 @@ public slots: private slots: void sendReportUsingGithub(); void sendReportUsingGitreport(); + void replyFinished(QNetworkReply *reply); private: Ui::Reportabug *ui; @@ -53,7 +56,12 @@ private: int getNumberByIndex(const int index); // ESC pressed event void keyPressEvent(QKeyEvent *pressedKey); + QString parseCmd(QString line, + const QString password = QString(), + const QString text = QString(), + const QString username = QString()); QString parseString(QString line); + QByteArray prepareRequest(const QString title, const QString body); }; diff --git a/sources/src/reportabug.ui b/sources/src/reportabug.ui index 38b10e0..433bb6e 100644 --- a/sources/src/reportabug.ui +++ b/sources/src/reportabug.ui @@ -43,6 +43,9 @@ Your GitHub account + + username + @@ -66,6 +69,9 @@ QLineEdit::Password + + password +