]> git.sur5r.net Git - minitube/blobdiff - src/yt/invidious/ivvideolist.cpp
Update upstream source from tag 'upstream/3.8'
[minitube] / src / yt / invidious / ivvideolist.cpp
diff --git a/src/yt/invidious/ivvideolist.cpp b/src/yt/invidious/ivvideolist.cpp
new file mode 100644 (file)
index 0000000..c29ec6a
--- /dev/null
@@ -0,0 +1,38 @@
+#include "ivvideolist.h"
+
+#include "http.h"
+#include "httputils.h"
+#include "invidious.h"
+#include "ivlistparser.h"
+#include "video.h"
+
+IVVideoList::IVVideoList(const QString &req, const QString &name, QObject *parent)
+    : IVVideoSource(parent), name(name), req(req) {}
+
+void IVVideoList::reallyLoadVideos(int max, int startIndex) {
+    aborted = false;
+
+    QString baseUrl = Invidious::instance().baseUrl();
+    if (baseUrl.isEmpty()) {
+        QTimer::singleShot(500, this, [this] { handleError("No baseUrl"); });
+        return;
+    }
+    QUrl url(baseUrl + req);
+
+    auto *reply = Invidious::cachedHttp().get(url);
+    connect(reply, &HttpReply::data, this, [this](auto data) {
+        QJsonDocument doc = QJsonDocument::fromJson(data);
+        const QJsonArray items = doc.array();
+        if (items.isEmpty()) {
+            handleError("No videos");
+            return;
+        }
+
+        IVListParser parser(items);
+        const QVector<Video *> &videos = parser.getVideos();
+
+        emit gotVideos(videos);
+        emit finished(videos.size());
+    });
+    connect(reply, &HttpReply::error, this, &IVVideoList::handleError);
+}