From ca8ac4e80986d511391cacb6f332a9a990ab7890 Mon Sep 17 00:00:00 2001 From: fryshorts Date: Mon, 25 Aug 2014 21:22:58 +0200 Subject: [PATCH] obs: Refactor network requests. Remove unneeded class members for request and buffer handling. Let Qt do all the hard work here, keeping track of requests and associated data. --- obs/window-basic-main.cpp | 65 ++++++++++++++++++--------------------- obs/window-basic-main.hpp | 10 ------ 2 files changed, 30 insertions(+), 45 deletions(-) diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index 727282df8..0f3740d32 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -968,19 +968,12 @@ void OBSBasic::CheckForUpdates() request.setUrl(QUrl("https://obsproject.com/obs2_update/basic.json")); request.setRawHeader("User-Agent", versionString.c_str()); - updateReply = networkManager.get(request); - connect(updateReply, SIGNAL(finished()), + QNetworkReply *reply = networkManager.get(request); + connect(reply, SIGNAL(finished()), this, SLOT(updateFileFinished())); - connect(updateReply, SIGNAL(readyRead()), - this, SLOT(updateFileRead())); #endif } -void OBSBasic::updateFileRead() -{ - updateReturnData.push_back(updateReply->readAll()); -} - #ifdef __APPLE__ #define VERSION_ENTRY "mac" #elif _WIN32 @@ -993,18 +986,19 @@ void OBSBasic::updateFileFinished() { ui->actionCheckForUpdates->setEnabled(true); - if (updateReply->error()) { + QNetworkReply *reply = qobject_cast(sender()); + if (!reply || reply->error()) { blog(LOG_WARNING, "Update check failed: %s", - QT_TO_UTF8(updateReply->errorString())); + QT_TO_UTF8(reply->errorString())); return; } - const char *jsonReply = updateReturnData.constData(); - if (!jsonReply || !*jsonReply) + QByteArray raw = reply->readAll(); + if (!raw.length()) return; - obs_data_t *returnData = obs_data_create_from_json(jsonReply); - obs_data_t *versionData = obs_data_get_obj(returnData, VERSION_ENTRY); + obs_data_t *returnData = obs_data_create_from_json(raw.constData()); + obs_data_t *versionData = obs_data_get_obj(returnData, VERSION_ENTRY); const char *description = obs_data_get_string(returnData, "description"); const char *download = obs_data_get_string(versionData, "download"); @@ -1045,7 +1039,7 @@ void OBSBasic::updateFileFinished() obs_data_release(versionData); obs_data_release(returnData); - updateReturnData.clear(); + reply->deleteLater(); } void OBSBasic::RemoveSelectedScene() @@ -1961,15 +1955,20 @@ void OBSBasic::UploadLog(const char *file) return; } - logUploadPostData.setData(json, (int)strlen(json)); + QBuffer *postData = new QBuffer(); + postData->setData(json, (int) strlen(json)); - QUrl url("https://api.github.com/gists"); - logUploadReply = networkManager.post(QNetworkRequest(url), - &logUploadPostData); - connect(logUploadReply, SIGNAL(finished()), + QNetworkRequest postReq(QUrl("https://api.github.com/gists")); + postReq.setHeader(QNetworkRequest::ContentTypeHeader, + "application/json"); + + QNetworkReply *reply = networkManager.post(postReq, postData); + + /* set the reply as parent, so the buffer is deleted with the reply */ + postData->setParent(reply); + + connect(reply, SIGNAL(finished()), this, SLOT(logUploadFinished())); - connect(logUploadReply, SIGNAL(readyRead()), - this, SLOT(logUploadRead())); } void OBSBasic::on_actionShowLogs_triggered() @@ -1994,34 +1993,30 @@ void OBSBasic::on_actionCheckForUpdates_triggered() CheckForUpdates(); } -void OBSBasic::logUploadRead() -{ - logUploadReturnData.push_back(logUploadReply->readAll()); -} - void OBSBasic::logUploadFinished() { ui->menuLogFiles->setEnabled(true); - if (logUploadReply->error()) { + QNetworkReply *reply = qobject_cast(sender()); + if (!reply || reply->error()) { QMessageBox::information(this, QTStr("LogReturnDialog.ErrorUploadingLog"), - logUploadReply->errorString()); + reply->errorString()); return; } - const char *jsonReply = logUploadReturnData.constData(); - if (!jsonReply || !*jsonReply) + QByteArray raw = reply->readAll(); + if (!raw.length()) return; - obs_data_t *returnData = obs_data_create_from_json(jsonReply); - QString logURL = obs_data_get_string(returnData, "html_url"); + obs_data_t *returnData = obs_data_create_from_json(raw.constData()); + QString logURL = obs_data_get_string(returnData, "html_url"); obs_data_release(returnData); OBSLogReply logDialog(this, logURL); logDialog.exec(); - logUploadReturnData.clear(); + reply->deleteLater(); } static void RenameListItem(OBSBasic *parent, QListWidget *listWidget, diff --git a/obs/window-basic-main.hpp b/obs/window-basic-main.hpp index 2c4461d5b..60d9fa1d9 100644 --- a/obs/window-basic-main.hpp +++ b/obs/window-basic-main.hpp @@ -67,14 +67,6 @@ private: QPointer cpuUsageTimer; os_cpu_usage_info_t *cpuUsageInfo = nullptr; - QBuffer logUploadPostData; - QNetworkReply *logUploadReply = nullptr; - QByteArray logUploadReturnData; - - QBuffer updatePostData; - QNetworkReply *updateReply = nullptr; - QByteArray updateReturnData; - obs_output_t *fileOutput = nullptr; obs_output_t *streamOutput = nullptr; obs_service_t *service = nullptr; @@ -282,10 +274,8 @@ private slots: void on_recordButton_clicked(); void on_settingsButton_clicked(); - void logUploadRead(); void logUploadFinished(); - void updateFileRead(); void updateFileFinished(); void AddSourceFromAction();