]> git.sur5r.net Git - minitube/blob - src/youtubesearch.cpp
Initial import
[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     QString urlString = QString(
16             "http://gdata.youtube.com/feeds/api/videos?q=%1&max-results=%2&start-index=%3")
17             .arg(searchParams->keywords(), QString::number(max), QString::number(skip));
18
19     switch (searchParams->sortBy()) {
20     case SearchParams::SortByNewest:
21         urlString.append("&orderby=published");
22         break;
23     case SearchParams::SortByViewCount:
24         urlString.append("&orderby=viewCount");
25         break;
26     }
27
28     // QString urlString = QString("http://localhost/oringo/video.xml?q=%1&max-results=%2&start-index=%3")
29     // .arg(query, QString::number(max), QString::number(skip));
30
31     QUrl url(urlString);
32
33     QObject *reply = The::http()->get(url);
34     // connect(reply, SIGNAL(ready(QNetworkReply*)), SLOT(searchReady(QNetworkReply*)));
35     connect(reply, SIGNAL(data(QByteArray)), SLOT(parseResults(QByteArray)));
36
37 }
38
39 void YouTubeSearch::parseResults(QByteArray data) {
40
41     YouTubeStreamReader reader;
42     if (!reader.read(data)) {
43         qDebug() << "Error parsing XML";
44     }
45     videos = reader.getVideos();
46
47     foreach (Video *video, videos) {
48         // send it to the model
49         emit gotVideo(video);
50     }
51
52     foreach (Video *video, videos) {
53         // preload the thumb
54         if (abortFlag) return;
55         video->preloadThumbnail();
56     }
57
58     emit finished(videos.size());
59 }
60
61 QList<Video*> YouTubeSearch::getResults() {
62     return videos;
63 }
64
65 void YouTubeSearch::abort() {
66     this->abortFlag = true;
67 }