]> git.sur5r.net Git - minitube/blob - src/yt/invidious/ivvideolist.cpp
New upstream version 3.8
[minitube] / src / yt / invidious / ivvideolist.cpp
1 #include "ivvideolist.h"
2
3 #include "http.h"
4 #include "httputils.h"
5 #include "invidious.h"
6 #include "ivlistparser.h"
7 #include "video.h"
8
9 IVVideoList::IVVideoList(const QString &req, const QString &name, QObject *parent)
10     : IVVideoSource(parent), name(name), req(req) {}
11
12 void IVVideoList::reallyLoadVideos(int max, int startIndex) {
13     aborted = false;
14
15     QString baseUrl = Invidious::instance().baseUrl();
16     if (baseUrl.isEmpty()) {
17         QTimer::singleShot(500, this, [this] { handleError("No baseUrl"); });
18         return;
19     }
20     QUrl url(baseUrl + req);
21
22     auto *reply = Invidious::cachedHttp().get(url);
23     connect(reply, &HttpReply::data, this, [this](auto data) {
24         QJsonDocument doc = QJsonDocument::fromJson(data);
25         const QJsonArray items = doc.array();
26         if (items.isEmpty()) {
27             handleError("No videos");
28             return;
29         }
30
31         IVListParser parser(items);
32         const QVector<Video *> &videos = parser.getVideos();
33
34         emit gotVideos(videos);
35         emit finished(videos.size());
36     });
37     connect(reply, &HttpReply::error, this, &IVVideoList::handleError);
38 }