]> git.sur5r.net Git - minitube/blob - src/invidious/ivlistparser.cpp
New upstream version 3.6.1
[minitube] / src / invidious / ivlistparser.cpp
1 #include "ivlistparser.h"
2
3 #include "video.h"
4
5 namespace {
6
7 QString decodeEntities(const QString &s) {
8     return QTextDocumentFragment::fromHtml(s).toPlainText();
9 }
10
11 } // namespace
12
13 IVListParser::IVListParser(const QJsonArray &items) {
14     videos.reserve(items.size());
15     for (const QJsonValue &v : items) {
16         QJsonObject item = v.toObject();
17         parseItem(item);
18     }
19 }
20
21 void IVListParser::parseItem(const QJsonObject &item) {
22     Video *video = new Video();
23
24     QJsonValue id = item[QLatin1String("videoId")];
25     video->setId(id.toString());
26
27     bool isLiveBroadcastContent = item[QLatin1String("liveNow")].toBool();
28     if (isLiveBroadcastContent) {
29         delete video;
30         return;
31     }
32
33     int publishedAt = item[QLatin1String("published")].toInt();
34     QDateTime publishedDateTime = QDateTime::fromSecsSinceEpoch(publishedAt);
35     video->setPublished(publishedDateTime);
36
37     video->setChannelId(item[QLatin1String("authorId")].toString());
38
39     QString title = item[QLatin1String("title")].toString();
40     static const QChar ampersand('&');
41     if (title.contains(ampersand)) title = decodeEntities(title);
42     video->setTitle(title);
43     video->setDescription(item[QLatin1String("descriptionHtml")].toString());
44
45     const auto thumbnails = item[QLatin1String("videoThumbnails")].toArray();
46     for (const auto &thumbnail : thumbnails) {
47         auto q = thumbnail["quality"];
48         if (q == QLatin1String("medium")) {
49             video->setThumbnailUrl(thumbnail["url"].toString());
50         } else if (q == QLatin1String("high")) {
51             video->setMediumThumbnailUrl(thumbnail["url"].toString());
52         } else if (q == QLatin1String("sddefault")) {
53             video->setLargeThumbnailUrl(thumbnail["url"].toString());
54         }
55     }
56
57     video->setChannelTitle(item[QLatin1String("author")].toString());
58
59     // These are only for "videos" requests
60
61     int duration = item[QLatin1String("lengthSeconds")].toInt();
62     video->setDuration(duration);
63
64     int viewCount = item[QLatin1String("viewCount")].toInt();
65     video->setViewCount(viewCount);
66
67     videos.append(video);
68 }