From a22054bb93586bdaeb1e29f90ef2367d90fe2d34 Mon Sep 17 00:00:00 2001
From: Sergey Fedorov <vital.had@gmail.com>
Date: Fri, 29 Nov 2024 10:41:22 +0800
Subject: [PATCH] YouTubeDL: move to QJson

---
 src/modules/Extensions/MediaBrowser/ProstoPleer.cpp |  7 ++++---
 src/qmplay2/CMakeLists.txt                          |  3 ++-
 src/qmplay2/YouTubeDL.cpp                           | 13 +++++++------
 3 files changed, 13 insertions(+), 10 deletions(-)

diff --git src/modules/Extensions/MediaBrowser/ProstoPleer.cpp src/modules/Extensions/MediaBrowser/ProstoPleer.cpp
index cb3c287d..c35bd5d2 100644
--- src/modules/Extensions/MediaBrowser/ProstoPleer.cpp
+++ src/modules/Extensions/MediaBrowser/ProstoPleer.cpp
@@ -21,9 +21,10 @@
 #include <QMPlay2Extensions.hpp>
 #include <NetworkAccess.hpp>
 #include <Functions.hpp>
-#include <Json11.hpp>
 
+#include <QJsonDocument.h>
 #include <QTextDocument>
+#include <QJsonObject.h>
 #include <QHeaderView>
 #include <QTreeWidget>
 #include <QAction>
@@ -187,8 +188,8 @@ bool ProstoPleer::convertAddress(const QString &prefix, const QString &url, cons
 				IOController<NetworkReply> &netReply = ioCtrl->toRef<NetworkReply>();
 				if (net.startAndWait(netReply, QString("%1/site_api/files/get_url?id=%2").arg(g_url, fileId.mid(idx + 1))))
 				{
-					const Json json = Json::parse(netReply->readAll());
-					const QString tmpStreamUrl = json["track_link"].string_value();
+					const QJsonDocument json = QJsonDocument::fromJson(netReply->readAll());
+					const QString tmpStreamUrl = json.object()["track_link"].toString();
 					if (!tmpStreamUrl.isEmpty())
 						*streamUrl = tmpStreamUrl;
 					netReply.clear();
diff --git src/qmplay2/CMakeLists.txt src/qmplay2/CMakeLists.txt
index 01932ce6..270ad9cf 100644
--- src/qmplay2/CMakeLists.txt
+++ src/qmplay2/CMakeLists.txt
@@ -212,7 +212,8 @@ if(USE_QT5)
         target_link_libraries(${PROJECT_NAME} ${APPKIT_LIBRARY})
     endif()
 else()
-    target_link_libraries(${PROJECT_NAME} Qt4::QtCore Qt4::QtGui ${DBUS})
+    add_definitions(-I/opt/local/include/QJson4)
+    target_link_libraries(${PROJECT_NAME} Qt4::QtCore Qt4::QtGui QJson4 ${DBUS})
 endif()
 
 if(WIN32)
diff --git src/qmplay2/YouTubeDL.cpp src/qmplay2/YouTubeDL.cpp
index b87f64af..fb7e72fc 100644
--- src/qmplay2/YouTubeDL.cpp
+++ src/qmplay2/YouTubeDL.cpp
@@ -21,11 +21,13 @@
 #include <NetworkAccess.hpp>
 #include <QMPlay2Core.hpp>
 #include <Version.hpp>
-#include <Json11.hpp>
 #include <Functions.hpp>
 
 #include <QRegExp>
 #include <QReadWriteLock>
+#include <QJsonDocument.h>
+#include <QJsonObject.h>
+#include <QJsonArray.h>
 #include <QFile>
 
 /* Avoid downloading yt-dlp, it fails to work correctly. */
@@ -41,12 +43,11 @@ static QReadWriteLock g_lock;
 
 static void exportCookiesFromJSON(const QString &jsonData, const QString &url)
 {
-	const Json json = Json::parse(jsonData.toUtf8());
-	const QByteArray urlData = url.toUtf8();
-	for (const Json &formats : json["formats"].array_items())
+	const QJsonDocument json = QJsonDocument::fromJson(jsonData.toUtf8());
+	for (const QJsonValue &formats : json.object()["formats"].toArray())
 	{
-		if (urlData == formats["url"].string_value())
-			QMPlay2Core.addCookies(url, formats["http_headers"]["Cookie"].string_value());
+		if (url == formats.toObject()["url"].toString())
+			QMPlay2Core.addCookies(url, formats.toObject()["http_headers"].toObject()["Cookie"].toString().toUtf8());
 	}
 }
 
