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 thumbs = item[QLatin1String("videoThumbnails")].toArray();
46 for (const auto &t : thumbs) {
47 video->addThumb(t["width"].toInt(), t["height"].toInt(), t["url"].toString());
50 video->setChannelTitle(item[QLatin1String("author")].toString());
52 // These are only for "videos" requests
54 int duration = item[QLatin1String("lengthSeconds")].toInt();
55 video->setDuration(duration);
57 int viewCount = item[QLatin1String("viewCount")].toInt();
58 video->setViewCount(viewCount);