Просмотр исходного кода

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 лет назад
Родитель
Сommit
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.setUrl(QUrl("https://obsproject.com/obs2_update/basic.json"));
 	request.setRawHeader("User-Agent", versionString.c_str());
 	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()));
 			this, SLOT(updateFileFinished()));
-	connect(updateReply, SIGNAL(readyRead()),
-			this, SLOT(updateFileRead()));
 #endif
 #endif
 }
 }
 
 
-void OBSBasic::updateFileRead()
-{
-	updateReturnData.push_back(updateReply->readAll());
-}
-
 #ifdef __APPLE__
 #ifdef __APPLE__
 #define VERSION_ENTRY "mac"
 #define VERSION_ENTRY "mac"
 #elif _WIN32
 #elif _WIN32
@@ -993,18 +986,19 @@ void OBSBasic::updateFileFinished()
 {
 {
 	ui->actionCheckForUpdates->setEnabled(true);
 	ui->actionCheckForUpdates->setEnabled(true);
 
 
-	if (updateReply->error()) {
+	QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
+	if (!reply || reply->error()) {
 		blog(LOG_WARNING, "Update check failed: %s",
 		blog(LOG_WARNING, "Update check failed: %s",
-				QT_TO_UTF8(updateReply->errorString()));
+				QT_TO_UTF8(reply->errorString()));
 		return;
 		return;
 	}
 	}
 
 
-	const char *jsonReply = updateReturnData.constData();
-	if (!jsonReply || !*jsonReply)
+	QByteArray raw = reply->readAll();
+	if (!raw.length())
 		return;
 		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,
 	const char *description = obs_data_get_string(returnData,
 			"description");
 			"description");
 	const char *download    = obs_data_get_string(versionData, "download");
 	const char *download    = obs_data_get_string(versionData, "download");
@@ -1045,7 +1039,7 @@ void OBSBasic::updateFileFinished()
 	obs_data_release(versionData);
 	obs_data_release(versionData);
 	obs_data_release(returnData);
 	obs_data_release(returnData);
 
 
-	updateReturnData.clear();
+	reply->deleteLater();
 }
 }
 
 
 void OBSBasic::RemoveSelectedScene()
 void OBSBasic::RemoveSelectedScene()
@@ -1961,15 +1955,20 @@ void OBSBasic::UploadLog(const char *file)
 		return;
 		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()));
 			this, SLOT(logUploadFinished()));
-	connect(logUploadReply, SIGNAL(readyRead()),
-			this, SLOT(logUploadRead()));
 }
 }
 
 
 void OBSBasic::on_actionShowLogs_triggered()
 void OBSBasic::on_actionShowLogs_triggered()
@@ -1994,34 +1993,30 @@ void OBSBasic::on_actionCheckForUpdates_triggered()
 	CheckForUpdates();
 	CheckForUpdates();
 }
 }
 
 
-void OBSBasic::logUploadRead()
-{
-	logUploadReturnData.push_back(logUploadReply->readAll());
-}
-
 void OBSBasic::logUploadFinished()
 void OBSBasic::logUploadFinished()
 {
 {
 	ui->menuLogFiles->setEnabled(true);
 	ui->menuLogFiles->setEnabled(true);
 
 
-	if (logUploadReply->error()) {
+	QNetworkReply *reply = qobject_cast<QNetworkReply *>(sender());
+	if (!reply || reply->error()) {
 		QMessageBox::information(this,
 		QMessageBox::information(this,
 				QTStr("LogReturnDialog.ErrorUploadingLog"),
 				QTStr("LogReturnDialog.ErrorUploadingLog"),
-				logUploadReply->errorString());
+				reply->errorString());
 		return;
 		return;
 	}
 	}
 
 
-	const char *jsonReply = logUploadReturnData.constData();
-	if (!jsonReply || !*jsonReply)
+	QByteArray raw = reply->readAll();
+	if (!raw.length())
 		return;
 		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);
 	obs_data_release(returnData);
 
 
 	OBSLogReply logDialog(this, logURL);
 	OBSLogReply logDialog(this, logURL);
 	logDialog.exec();
 	logDialog.exec();
 
 
-	logUploadReturnData.clear();
+	reply->deleteLater();
 }
 }
 
 
 static void RenameListItem(OBSBasic *parent, QListWidget *listWidget,
 static void RenameListItem(OBSBasic *parent, QListWidget *listWidget,

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

@@ -67,14 +67,6 @@ private:
 	QPointer<QTimer>    cpuUsageTimer;
 	QPointer<QTimer>    cpuUsageTimer;
 	os_cpu_usage_info_t *cpuUsageInfo = nullptr;
 	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  *fileOutput = nullptr;
 	obs_output_t  *streamOutput = nullptr;
 	obs_output_t  *streamOutput = nullptr;
 	obs_service_t *service = nullptr;
 	obs_service_t *service = nullptr;
@@ -282,10 +274,8 @@ private slots:
 	void on_recordButton_clicked();
 	void on_recordButton_clicked();
 	void on_settingsButton_clicked();
 	void on_settingsButton_clicked();
 
 
-	void logUploadRead();
 	void logUploadFinished();
 	void logUploadFinished();
 
 
-	void updateFileRead();
 	void updateFileFinished();
 	void updateFileFinished();
 
 
 	void AddSourceFromAction();
 	void AddSourceFromAction();