X-Git-Url: https://git.sur5r.net/?p=minitube;a=blobdiff_plain;f=src%2Fytsearch.cpp;h=ea07412b50fc1d39a5ac6fe22f824dd27fd0c3db;hp=7274d89d44c193874ecf65c701842f3d88c7b03a;hb=533489a63a9716c645a11a99ca446978b20eedd0;hpb=994e6e5e95196b0e36c680b1fd496f12d71739c9 diff --git a/src/ytsearch.cpp b/src/ytsearch.cpp index 7274d89..ea07412 100644 --- a/src/ytsearch.cpp +++ b/src/ytsearch.cpp @@ -20,143 +20,145 @@ $END_LICENSE */ #include "ytsearch.h" #include "constants.h" -#include "networkaccess.h" +#include "http.h" +#include "httputils.h" #include "searchparams.h" #include "video.h" #include "ytchannel.h" -#ifdef APP_YT3 +#include "datautils.h" +#include "mainwindow.h" #include "yt3.h" #include "yt3listparser.h" -#include "datautils.h" -#else -#include "ytfeedreader.h" -#endif -#include "compatibility/qurlqueryhelper.h" - -namespace The { -NetworkAccess* http(); -QHash* globalActions(); -} namespace { -QDateTime RFC3339fromString(const QString &s) { - return QDateTime::fromString(s, "yyyy-MM-ddThh:mm:ssZ"); -} - QString RFC3339toString(const QDateTime &dt) { - return dt.toString("yyyy-MM-ddThh:mm:ssZ"); + return dt.toString(QStringLiteral("yyyy-MM-ddThh:mm:ssZ")); } - } -YTSearch::YTSearch(SearchParams *searchParams, QObject *parent) : - PaginatedVideoSource(parent), - searchParams(searchParams) { +YTSearch::YTSearch(SearchParams *searchParams, QObject *parent) + : PaginatedVideoSource(parent), searchParams(searchParams) { searchParams->setParent(this); } -#ifdef APP_YT3 - void YTSearch::loadVideos(int max, int startIndex) { aborted = false; QUrl url = YT3::instance().method("search"); - { - QUrlQueryHelper urlHelper(url); - urlHelper.addQueryItem("part", "snippet"); - urlHelper.addQueryItem("type", "video"); - urlHelper.addQueryItem("maxResults", QString::number(max)); - - if (startIndex > 1) { - if (maybeReloadToken(max, startIndex)) return; - urlHelper.addQueryItem("pageToken", nextPageToken); - } - // TODO interesting params - // urlHelper.addQueryItem("videoSyndicated", "true"); - // urlHelper.addQueryItem("regionCode", "IT"); - // urlHelper.addQueryItem("videoType", "movie"); + QUrlQuery q(url); + q.addQueryItem("part", "snippet"); + q.addQueryItem("type", "video"); + q.addQueryItem("maxResults", QString::number(max)); - if (!searchParams->keywords().isEmpty()) { - if (searchParams->keywords().startsWith("http://") || - searchParams->keywords().startsWith("https://")) { - urlHelper.addQueryItem("q", YTSearch::videoIdFromUrl(searchParams->keywords())); - } else urlHelper.addQueryItem("q", searchParams->keywords()); - } + if (startIndex > 1) { + if (maybeReloadToken(max, startIndex)) return; + q.addQueryItem("pageToken", nextPageToken); + } - if (!searchParams->channelId().isEmpty()) - urlHelper.addQueryItem("channelId", searchParams->channelId()); + // TODO interesting params + // urlHelper.addQueryItem("videoSyndicated", "true"); + // urlHelper.addQueryItem("regionCode", "IT"); + // urlHelper.addQueryItem("videoType", "movie"); + + if (!searchParams->keywords().isEmpty()) { + if (searchParams->keywords().startsWith("http://") || + searchParams->keywords().startsWith("https://")) { + q.addQueryItem("q", YTSearch::videoIdFromUrl(searchParams->keywords())); + } else + q.addQueryItem("q", searchParams->keywords()); + } - switch (searchParams->sortBy()) { - case SearchParams::SortByNewest: - urlHelper.addQueryItem("order", "date"); - break; - case SearchParams::SortByViewCount: - urlHelper.addQueryItem("order", "viewCount"); - break; - case SearchParams::SortByRating: - urlHelper.addQueryItem("order", "rating"); - break; - } + if (!searchParams->channelId().isEmpty()) + q.addQueryItem("channelId", searchParams->channelId()); + + switch (searchParams->sortBy()) { + case SearchParams::SortByNewest: + q.addQueryItem("order", "date"); + break; + case SearchParams::SortByViewCount: + q.addQueryItem("order", "viewCount"); + break; + case SearchParams::SortByRating: + q.addQueryItem("order", "rating"); + break; + } - switch (searchParams->duration()) { - case SearchParams::DurationShort: - urlHelper.addQueryItem("videoDuration", "short"); - break; - case SearchParams::DurationMedium: - urlHelper.addQueryItem("videoDuration", "medium"); - break; - case SearchParams::DurationLong: - urlHelper.addQueryItem("videoDuration", "long"); - break; - } + switch (searchParams->duration()) { + case SearchParams::DurationShort: + q.addQueryItem("videoDuration", "short"); + break; + case SearchParams::DurationMedium: + q.addQueryItem("videoDuration", "medium"); + break; + case SearchParams::DurationLong: + q.addQueryItem("videoDuration", "long"); + break; + } - switch (searchParams->time()) { - case SearchParams::TimeToday: - urlHelper.addQueryItem("publishedAfter", RFC3339toString(QDateTime::currentDateTimeUtc().addSecs(-60*60*24))); - break; - case SearchParams::TimeWeek: - urlHelper.addQueryItem("publishedAfter", RFC3339toString(QDateTime::currentDateTimeUtc().addSecs(-60*60*24*7))); - break; - case SearchParams::TimeMonth: - urlHelper.addQueryItem("publishedAfter", RFC3339toString(QDateTime::currentDateTimeUtc().addSecs(-60*60*24*30))); - break; - } + switch (searchParams->time()) { + case SearchParams::TimeToday: + q.addQueryItem("publishedAfter", + RFC3339toString(QDateTime::currentDateTimeUtc().addSecs(-60 * 60 * 24))); + break; + case SearchParams::TimeWeek: + q.addQueryItem("publishedAfter", + RFC3339toString(QDateTime::currentDateTimeUtc().addSecs(-60 * 60 * 24 * 7))); + break; + case SearchParams::TimeMonth: + q.addQueryItem("publishedAfter", RFC3339toString(QDateTime::currentDateTimeUtc().addSecs( + -60 * 60 * 24 * 30))); + break; + } - if (searchParams->publishedAfter()) { - urlHelper.addQueryItem("publishedAfter", RFC3339toString(QDateTime::fromTime_t(searchParams->publishedAfter()).toUTC())); - } + if (searchParams->publishedAfter()) { + q.addQueryItem( + "publishedAfter", + RFC3339toString(QDateTime::fromTime_t(searchParams->publishedAfter()).toUTC())); + } - switch (searchParams->quality()) { - case SearchParams::QualityHD: - urlHelper.addQueryItem("videoDefinition", "high"); - break; - } + switch (searchParams->quality()) { + case SearchParams::QualityHD: + q.addQueryItem("videoDefinition", "high"); + break; + } + + switch (searchParams->safeSearch()) { + case SearchParams::None: + q.addQueryItem("safeSearch", "none"); + break; + case SearchParams::Strict: + q.addQueryItem("safeSearch", "strict"); + break; } + url.setQuery(q); + lastUrl = url; // qWarning() << "YT3 search" << url.toString(); - QObject *reply = The::http()->get(url); + QObject *reply = HttpUtils::yt().get(url); connect(reply, SIGNAL(data(QByteArray)), SLOT(parseResults(QByteArray))); - connect(reply, SIGNAL(error(QNetworkReply*)), SLOT(requestError(QNetworkReply*))); + connect(reply, SIGNAL(error(QString)), SLOT(requestError(QString))); } -void YTSearch::parseResults(QByteArray data) { +void YTSearch::parseResults(const QByteArray &data) { if (aborted) return; YT3ListParser parser(data); - QList videos = parser.getVideos(); - suggestions = parser.getSuggestions(); + const QVector