Обновление VKMM 0.1.2

В процессе портирования программы VKMM сделал давно актуальный фикс – ВКонтакте уже довольно давно присылает 302 редирект на страницу ошибки, вместо прямого кода ошибки HTTP 404. С точки зрения QNetworkReply разумеется редирект не считается ошибкой, что приводило к зависаниям стрима, если плейлист был открыт давно (и ссылки протухли).

Обработка редиректа в Qt выполняется достаточно просто:

1. Присоединяемся к QNetworkReply::finished

connect(netReply, &QNetworkReply::finished, this, &mStream::onNetResult);

2. В слоте проверяем код статуса HTTP на редирект:

void mStream::onNetResult()
{
	QNetworkReply* reply = qobject_cast(sender());
	Q_CHECK_PTR(reply);

	if (!reply) return;

	switch (reply->error())
	{
	case QNetworkReply::NoError:
	{
		int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
		switch (statusCode) {
		case 301:
		case 302:
		case 307:
			qDebug() << "redirected: " << reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();

			onNetError(QNetworkReply::ContentNotFoundError);
			break;
		default:
			break;
		}
	} break;
	case QNetworkReply::ContentNotFoundError:
		// 404 Not found
		MSTREAM_DEBUG("Error 404!")
		break;
	}
}

В идеале конечно надо проверять все коды и содержимое адреса в Location, но в данном случае такой проверки вполне достаточно.

Скачать сборки а так же исходный код можно на домашней странице программы.

Leave a Reply

Your email address will not be published. Required fields are marked *