1 #include "ivchannelsource.h"
6 #include "ivlistparser.h"
7 #include "mainwindow.h"
8 #include "searchparams.h"
12 int invidiousFixedMax = 20;
15 IVChannelSource::IVChannelSource(SearchParams *searchParams, QObject *parent)
16 : VideoSource(parent), searchParams(searchParams) {
17 searchParams->setParent(this);
20 void IVChannelSource::loadVideos(int max, int startIndex) {
23 QUrl url = Invidious::instance().method("channels/videos/");
24 url.setPath(url.path() + searchParams->channelId());
28 int page = ((startIndex - 1) / invidiousFixedMax) + 1;
29 q.addQueryItem("page", QString::number(page));
31 switch (searchParams->sortBy()) {
32 case SearchParams::SortByNewest:
33 q.addQueryItem("sort_by", "newest");
35 case SearchParams::SortByViewCount:
36 q.addQueryItem("sort_by", "popular");
42 auto *reply = Invidious::cachedHttp().get(url);
43 connect(reply, &HttpReply::data, this, [this](auto data) {
44 QJsonDocument doc = QJsonDocument::fromJson(data);
45 const QJsonArray items = doc.array();
46 IVListParser parser(items);
47 const QVector<Video *> &videos = parser.getVideos();
49 if (items.size() > invidiousFixedMax) invidiousFixedMax = items.size();
51 if (name.isEmpty() && !searchParams->channelId().isEmpty()) {
52 if (!videos.isEmpty()) {
53 name = videos.at(0)->getChannelTitle();
54 if (!searchParams->keywords().isEmpty()) {
55 name += QLatin1String(": ") + searchParams->keywords();
58 emit nameChanged(name);
61 emit gotVideos(videos);
62 emit finished(videos.size());
64 connect(reply, &HttpReply::error, this, [this](auto message) {
65 Invidious::instance().initServers();
70 void IVChannelSource::abort() {
74 QString IVChannelSource::getName() {
78 const QList<QAction *> &IVChannelSource::getActions() {
79 static const QList<QAction *> channelActions = {
80 MainWindow::instance()->getAction("subscribeChannel")};
81 if (searchParams->channelId().isEmpty()) {
82 static const QList<QAction *> noActions;
85 return channelActions;
88 int IVChannelSource::maxResults() {
89 return invidiousFixedMax;