]> git.sur5r.net Git - minitube/blob - src/youtubesearch.cpp
Imported Upstream version 1.4.1
[minitube] / src / youtubesearch.cpp
1 #include "youtubesearch.h"
2 #include "youtubestreamreader.h"
3 #include "constants.h"
4 #include "networkaccess.h"
5
6 namespace The {
7     NetworkAccess* http();
8 }
9
10 YouTubeSearch::YouTubeSearch() : QObject() {}
11
12 void YouTubeSearch::search(SearchParams *searchParams, int max, int skip) {
13     this->abortFlag = false;
14
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());
22
23     switch (searchParams->sortBy()) {
24     case SearchParams::SortByNewest:
25         url.addQueryItem("orderby", "published");
26         break;
27     case SearchParams::SortByViewCount:
28         url.addQueryItem("orderby", "viewCount");
29         break;
30     }
31
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*)));
35
36 }
37
38 void YouTubeSearch::error(QNetworkReply *reply) {
39     emit error(reply->errorString());
40 }
41
42 void YouTubeSearch::parseResults(QByteArray data) {
43
44     YouTubeStreamReader reader;
45     if (!reader.read(data)) {
46         qDebug() << "Error parsing XML";
47     }
48     videos = reader.getVideos();
49
50     foreach (Video *video, videos) {
51         // send it to the model
52         emit gotVideo(video);
53     }
54
55     foreach (Video *video, videos) {
56         // preload the thumb
57         if (abortFlag) return;
58         video->preloadThumbnail();
59     }
60
61     emit finished(videos.size());
62 }
63
64 QList<Video*> YouTubeSearch::getResults() {
65     return videos;
66 }
67
68 void YouTubeSearch::abort() {
69     this->abortFlag = true;
70 }