~ubuntu-branches/ubuntu/saucy/minitube/saucy

1.2.11 by Jakob Haufe
Import upstream version 2.0
1
#include "ytfeedreader.h"
2
#include "video.h"
3
4
YTFeedReader::YTFeedReader(const QByteArray &bytes) : QXmlStreamReader(bytes) {
5
    while (!atEnd()) {
6
        readNext();
7
        if (isStartElement() && name() == QLatin1String("entry")) {
8
            readEntry();
9
        } else if (name() == QLatin1String("link")
10
                   && attributes().value("rel").toString()
11
                   == QLatin1String("http://schemas.google.com/g/2006#spellcorrection")) {
12
            suggestions << attributes().value("title").toString();
13
        }
14
    }
15
}
16
17
void YTFeedReader::readEntry() {
18
    Video* video = new Video();
19
20
    while (!atEnd()) {
21
        readNext();
22
23
        /*
24
        qDebug() << name();
25
        QXmlStreamAttribute attribute;
26
        foreach (attribute, attributes())
27
            qDebug() << attribute.name() << ":" << attribute.value();
28
        */
29
30
        if (isEndElement() && name() == QLatin1String("entry")) break;
31
        if (isStartElement()) {
32
33
            if (name() == QLatin1String("link")
34
                    && attributes().value("rel").toString() == QLatin1String("alternate")
35
                    && attributes().value("type").toString() == QLatin1String("text/html")
36
                    ) {
37
                QString webpage = attributes().value("href").toString();
38
                webpage.remove("&feature=youtube_gdata");
39
                video->setWebpage(QUrl(webpage));
40
            } else if (name() == QLatin1String("author")) {
41
                while(readNextStartElement())
42
                    if (name() == QLatin1String("name")) {
43
                        QString author = readElementText();
44
                        video->setAuthor(author);
45
                    } else if (name() == QLatin1String("uri")) {
46
                        QString uri = readElementText();
47
                        int i = uri.lastIndexOf('/');
48
                        if (i != -1) uri = uri.mid(i+1);
49
                        video->setAuthorUri(uri);
50
                    } else skipCurrentElement();
51
            } else if (name() == QLatin1String("published")) {
52
                video->setPublished(QDateTime::fromString(readElementText(), Qt::ISODate));
53
            } else if (namespaceUri() == QLatin1String("http://gdata.youtube.com/schemas/2007")
54
                       && name() == QLatin1String("statistics")) {
55
                QString viewCount = attributes().value("viewCount").toString();
56
                video->setViewCount(viewCount.toInt());
57
            }
58
            else if (namespaceUri() == QLatin1String("http://search.yahoo.com/mrss/")
59
                     && name() == QLatin1String("group")) {
60
61
                // read media group
62
                while (!atEnd()) {
63
                    readNext();
64
                    if (isEndElement() && name() == QLatin1String("group")) break;
65
                    if (isStartElement()) {
66
                        if (name() == QLatin1String("thumbnail")) {
67
                            // qDebug() << "Thumb: " << attributes().value("url").toString();
68
                            QStringRef name = attributes().value("yt:name");
69
                            if (name == QLatin1String("mqdefault"))
70
                                video->setThumbnailUrl(
71
                                            attributes().value("url").toString());
72
                            else if (name == QLatin1String("hqdefault"))
73
                                video->setMediumThumbnailUrl(
74
                                            attributes().value("url").toString());
75
                        }
76
                        else if (name() == QLatin1String("title")) {
77
                            QString title = readElementText();
78
                            // qDebug() << "Title: " << title;
79
                            video->setTitle(title);
80
                        }
81
                        else if (name() == QLatin1String("description")) {
82
                            QString desc = readElementText();
83
                            // qDebug() << "Description: " << desc;
84
                            video->setDescription(desc);
85
                        }
86
                        else if (name() == QLatin1String("duration")) {
87
                            QString duration = attributes().value("seconds").toString();
88
                            // qDebug() << "Duration: " << duration;
89
                            video->setDuration(duration.toInt());
90
                        }
91
                    }
92
                }
93
            }
94
        }
95
    }
96
97
    videos.append(video);
98
99
}
100
101
const QList<Video *> &YTFeedReader::getVideos() {
102
    return videos;
103
}
104
105
const QStringList & YTFeedReader::getSuggestions() const {
106
    return suggestions;
107
}