File indexing completed on 2025-02-23 04:35:12
0001 // SPDX-FileCopyrightText: 2021 Linus Jahn <lnj@kaidan.im> 0002 // SPDX-License-Identifier: GPL-3.0-or-later 0003 0004 #pragma once 0005 0006 #include "abstractapi.h" 0007 #include "channel.h" 0008 #include "comment.h" 0009 #include "credentials.h" 0010 #include "playlist.h" 0011 #include "preferences.h" 0012 #include "searchparameters.h" 0013 #include "video.h" 0014 0015 #include <QFuture> 0016 #include <QHash> 0017 #include <QNetworkCookie> 0018 #include <QNetworkReply> 0019 #include <QObject> 0020 0021 #include <variant> 0022 0023 class QNetworkAccessManager; 0024 0025 namespace QInvidious 0026 { 0027 0028 class InvidiousApi : public AbstractApi 0029 { 0030 Q_OBJECT 0031 0032 public: 0033 explicit InvidiousApi(QNetworkAccessManager *netManager, QObject *parent = nullptr); 0034 0035 QFuture<LogInResult> logIn(QStringView username, QStringView password) override; 0036 QFuture<VideoResult> requestVideo(QStringView videoId) override; 0037 QString resolveVideoUrl(QStringView videoId) override; 0038 QFuture<SearchListResult> requestSearchResults(const SearchParameters ¶meters) override; 0039 QFuture<VideoListResult> requestFeed(qint32 page = 1) override; 0040 QFuture<VideoListResult> requestTop() override; 0041 QFuture<VideoListResult> requestTrending(TrendingTopic = Main) override; 0042 QFuture<VideoListResult> requestChannel(QStringView query, qint32 page = 1) override; 0043 QFuture<SubscriptionsResult> requestSubscriptions() override; 0044 QFuture<Result> subscribeToChannel(QStringView channel) override; 0045 QFuture<Result> unsubscribeFromChannel(QStringView channel) override; 0046 QFuture<HistoryResult> requestHistory(qint32 page = 1) override; 0047 QFuture<Result> markWatched(const QString &videoId) override; 0048 QFuture<Result> markUnwatched(const QString &videoId) override; 0049 QFuture<CommentsResult> requestComments(const QString &videoId, const QString &continuation = {}) override; 0050 QFuture<PlaylistsResult> requestPlaylists() override; 0051 QFuture<PreferencesResult> requestPreferences() override; 0052 QFuture<Result> setPreferences(const QInvidious::Preferences &preferences) override; 0053 QFuture<VideoListResult> requestPlaylist(const QString &plid) override; 0054 QFuture<ChannelResult> requestChannelInfo(QStringView queryd) override; 0055 QFuture<Result> addVideoToPlaylist(const QString &plid, const QString &videoId) override; 0056 QFuture<Result> removeVideoFromPlaylist(const QString &plid, const QString &indexId) override; 0057 0058 private: 0059 enum VideoListType { Search, Trending, Top, Feed, Channel }; 0060 0061 static Error invalidJsonError(); 0062 static Result checkIsReplyOk(QNetworkReply *reply); 0063 0064 bool supportsFeature(SupportedFeature feature) override; 0065 0066 QFuture<VideoListResult> requestVideoList(VideoListType queryType, const QString &urlExtension = {}, const QHash<QString, QString> ¶meters = {}); 0067 QNetworkRequest authenticatedNetworkRequest(QUrl &&url); 0068 QUrlQuery genericUrlQuery() const; 0069 QUrl videoUrl(QStringView videoId) const; 0070 QUrl videoListUrl(VideoListType queryType, const QString &urlExtension = {}, const QHash<QString, QString> ¶meters = {}) const; 0071 QUrl subscriptionsUrl() const; 0072 QUrl subscribeUrl(QStringView channelId) const; 0073 }; 0074 0075 }