1 #include "youtubesearch.h"
2 #include "youtubestreamreader.h"
4 #include "networkaccess.h"
10 YouTubeSearch::YouTubeSearch() : QObject() {}
12 void YouTubeSearch::search(SearchParams *searchParams, int max, int skip) {
13 this->abortFlag = false;
15 QUrl url("http://gdata.youtube.com/feeds/api/videos");
16 url.addQueryItem("max-results", QString::number(max));
17 url.addQueryItem("start-index", QString::number(skip));
18 if (!searchParams->keywords().isEmpty())
19 url.addQueryItem("q", searchParams->keywords());
20 if (!searchParams->author().isEmpty())
21 url.addQueryItem("author", searchParams->author());
23 switch (searchParams->sortBy()) {
24 case SearchParams::SortByNewest:
25 url.addQueryItem("orderby", "published");
27 case SearchParams::SortByViewCount:
28 url.addQueryItem("orderby", "viewCount");
32 QObject *reply = The::http()->get(url);
33 connect(reply, SIGNAL(data(QByteArray)), SLOT(parseResults(QByteArray)));
34 connect(reply, SIGNAL(error(QNetworkReply*)), SLOT(error(QNetworkReply*)));
38 void YouTubeSearch::error(QNetworkReply *reply) {
39 emit error(reply->errorString());
42 void YouTubeSearch::parseResults(QByteArray data) {
44 YouTubeStreamReader reader;
45 if (!reader.read(data)) {
46 qDebug() << "Error parsing XML";
48 videos = reader.getVideos();
50 foreach (Video *video, videos) {
51 // send it to the model
55 foreach (Video *video, videos) {
57 if (abortFlag) return;
58 video->preloadThumbnail();
61 emit finished(videos.size());
64 QList<Video*> YouTubeSearch::getResults() {
68 void YouTubeSearch::abort() {
69 this->abortFlag = true;