فهرست منبع

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.
fryshorts 11 سال پیش
والد
کامیت
ca8ac4e809
2فایلهای تغییر یافته به همراه30 افزوده شده و 45 حذف شده
  1. 30 35
      obs/window-basic-main.cpp
  2. 0 10
      obs/window-basic-main.hpp

+ 30 - 35
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<QNetworkReply *>(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));
+
+	QNetworkRequest postReq(QUrl("https://api.github.com/gists"));
+	postReq.setHeader(QNetworkRequest::ContentTypeHeader,
+			"application/json");
+
+	QNetworkReply *reply = networkManager.post(postReq, postData);
 
-	QUrl url("https://api.github.com/gists");
-	logUploadReply = networkManager.post(QNetworkRequest(url),
-			&logUploadPostData);
-	connect(logUploadReply, SIGNAL(finished()),
+	/* 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<QNetworkReply *>(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,

+ 0 - 10
obs/window-basic-main.hpp

@@ -67,14 +67,6 @@ private:
 	QPointer<QTimer>    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();