]> git.sur5r.net Git - minitube/blob - src/yt3listparser.cpp
74e11e6a3c816b884e550f9fd168b8efa1612b43
[minitube] / src / yt3listparser.cpp
1 #include "yt3listparser.h"
2 #include "datautils.h"
3 #include "video.h"
4
5 YT3ListParser::YT3ListParser(const QByteArray &bytes) {
6     QJsonDocument doc = QJsonDocument::fromJson(bytes);
7     QJsonObject obj = doc.object();
8
9     nextPageToken = obj[QLatin1String("nextPageToken")].toString();
10
11     const QJsonArray items = obj[QLatin1String("items")].toArray();
12     videos.reserve(items.size());
13     for (const QJsonValue &v : items) {
14         QJsonObject item = v.toObject();
15         parseItem(item);
16     }
17 }
18
19 void YT3ListParser::parseItem(const QJsonObject &item) {
20     Video *video = new Video();
21
22     QJsonValue id = item[QLatin1String("id")];
23     if (id.isString())
24         video->setId(id.toString());
25     else {
26         QString videoId = id.toObject()[QLatin1String("videoId")].toString();
27         video->setId(videoId);
28     }
29
30     QJsonObject snippet = item[QLatin1String("snippet")].toObject();
31
32     bool isLiveBroadcastContent =
33             snippet[QLatin1String("liveBroadcastContent")].toString() != QLatin1String("none");
34     if (isLiveBroadcastContent) {
35         delete video;
36         return;
37     }
38
39     QString publishedAt = snippet[QLatin1String("publishedAt")].toString();
40     QDateTime publishedDateTime = QDateTime::fromString(publishedAt, Qt::ISODate);
41     video->setPublished(publishedDateTime);
42
43     video->setChannelId(snippet[QLatin1String("channelId")].toString());
44
45     video->setTitle(snippet[QLatin1String("title")].toString());
46     video->setDescription(snippet[QLatin1String("description")].toString());
47
48     QJsonObject thumbnails = snippet[QLatin1String("thumbnails")].toObject();
49     QLatin1String url("url");
50     video->setThumbnailUrl(thumbnails[QLatin1String("medium")].toObject()[url].toString());
51     video->setMediumThumbnailUrl(thumbnails[QLatin1String("high")].toObject()[url].toString());
52     video->setLargeThumbnailUrl(thumbnails[QLatin1String("standard")].toObject()[url].toString());
53
54     video->setChannelTitle(snippet[QLatin1String("channelTitle")].toString());
55
56     // These are only for "videos" requests
57
58     QJsonValue contentDetails = item[QLatin1String("contentDetails")];
59     if (contentDetails.isObject()) {
60         QString isoPeriod = contentDetails.toObject()[QLatin1String("duration")].toString();
61         int duration = DataUtils::parseIsoPeriod(isoPeriod);
62         video->setDuration(duration);
63     }
64
65     QJsonValue statistics = item[QLatin1String("statistics")];
66     if (statistics.isObject()) {
67         int viewCount = statistics.toObject()[QLatin1String("viewCount")].toString().toInt();
68         video->setViewCount(viewCount);
69     }
70
71     videos.append(video);
72 }