Обновление 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()

Точка входа Qt5 программы и компилятор Visual Studio 2012+

Многие сталкивались с тем что при компиляции студией Qt-проектов (и не только) Windows не хочет использовать стандартную функцию main(), а требует свои

WinMain

для GUI приложений и при использовании UNICODE, выдавая ошибки линковки вроде этих:

LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup

или

error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup

На более старых версиях проблему можно было отчасти решить, задав точку входа принудительно через

/ENTRY:main

или

#pragma comment( linker, “/entry:main” )

Но сейчас такой способ больше не работает, программа будет падать при старте. Если вам не нужна поддержка WCHAR в параметрах argv, то проще всего слинковать со специальной служебной либой Qt5 для линковки с main(). Библиотека называется Qt5::WinMain:

IF (BUILD_WIN32)
TARGET_LINK_LIBRARIES(${PROJECT} Qt5::WinMain) # Correct entry point
ENDIF()