1 #include "ivlistparser.h"
7 QString decodeEntities(const QString &s) {
8 return QTextDocumentFragment::fromHtml(s).toPlainText();
13 IVListParser::IVListParser(const QJsonArray &items) {
14 videos.reserve(items.size());
15 for (const QJsonValue &v : items) {
16 QJsonObject item = v.toObject();
21 void IVListParser::parseItem(const QJsonObject &item) {
22 Video *video = new Video();
24 QJsonValue id = item[QLatin1String("videoId")];
25 video->setId(id.toString());
27 bool isLiveBroadcastContent = item[QLatin1String("liveNow")].toBool();
28 if (isLiveBroadcastContent) {
33 int publishedAt = item[QLatin1String("published")].toInt();
34 QDateTime publishedDateTime = QDateTime::fromSecsSinceEpoch(publishedAt);
35 video->setPublished(publishedDateTime);
37 video->setChannelId(item[QLatin1String("authorId")].toString());
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());
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());
57 video->setChannelTitle(item[QLatin1String("author")].toString());
59 // These are only for "videos" requests
61 int duration = item[QLatin1String("lengthSeconds")].toInt();
62 video->setDuration(duration);
64 int viewCount = item[QLatin1String("viewCount")].toInt();
65 video->setViewCount(viewCount);