File indexing completed on 2024-04-21 04:51:52
0001 /* 0002 SPDX-FileCopyrightText: 2021 Julius Künzel <jk.kdedev@smartlab.uber.space> 0003 SPDX-FileCopyrightText: 2011 Jean-Baptiste Mardelle <jb@kdenlive.org> 0004 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <QJsonDocument> 0010 #include <QJsonObject> 0011 #include <QNetworkReply> 0012 #include <QObject> 0013 #include <QPixmap> 0014 #include <QTemporaryFile> 0015 #include <QtNetworkAuth> 0016 0017 struct ResourceItemInfo 0018 { 0019 QString fileType; 0020 QString name; 0021 QString description; 0022 QString id; 0023 QString infoUrl; 0024 QString license; 0025 QString author; 0026 QString authorUrl; 0027 int width; 0028 int height; 0029 int duration; 0030 QString downloadUrl; 0031 QString filetype; 0032 QStringList downloadUrls; 0033 QStringList downloadLabels; 0034 QString imageUrl; 0035 QString previewUrl; 0036 // int filesize; 0037 }; 0038 0039 class ProviderModel : public QObject 0040 { 0041 Q_OBJECT 0042 public: 0043 enum SERVICETYPE { UNKNOWN = 0, AUDIO = 1, VIDEO = 2, IMAGE = 3 }; 0044 ProviderModel() = delete; 0045 ProviderModel(const QString &path); 0046 0047 void authorize(); 0048 void refreshAccessToken(); 0049 bool is_valid() const; 0050 QString name() const; 0051 QString homepage() const; 0052 ProviderModel::SERVICETYPE type() const; 0053 QString attribution() const; 0054 bool downloadOAuth2() const; 0055 bool requiresLogin() const; 0056 0057 public Q_SLOTS: 0058 void slotStartSearch(const QString &searchText, int page); 0059 void slotFetchFiles(const QString &id); 0060 // void slotShowResults(QNetworkReply *reply); 0061 0062 protected: 0063 QOAuth2AuthorizationCodeFlow m_oauth2; 0064 QString m_path; 0065 QString m_name; 0066 QString m_homepage; 0067 SERVICETYPE m_type; 0068 QString m_clientkey; 0069 QString m_attribution; 0070 bool m_invalid; 0071 QJsonDocument m_doc; 0072 QString m_apiroot; 0073 QJsonObject m_search; 0074 QJsonObject m_download; 0075 QNetworkAccessManager *m_networkManager; 0076 0077 private: 0078 void validate(); 0079 QUrl getSearchUrl(const QString &searchText, const int page = 1); 0080 QUrl getFilesUrl(const QString &id); 0081 QJsonValue objectGetValue(QJsonObject item, QString key); 0082 QString objectGetString(QJsonObject item, const QString &key, const QString &id = QString(), const QString &parentKey = QString()); 0083 QString replacePlaceholders(QString string, const QString &query = QString(), const int page = 0, const QString &id = QString()); 0084 std::pair<QList<ResourceItemInfo>, const int> parseSearchResponse(const QByteArray &res); 0085 std::pair<QStringList, QStringList> parseFilesResponse(const QByteArray &res, const QString &id); 0086 QTemporaryFile *m_tmpThumbFile; 0087 const int m_perPage = 15; 0088 0089 Q_SIGNALS: 0090 void searchDone(QList<ResourceItemInfo> &list, const int pageCount); 0091 void searchError(const QString &msg = QString()); 0092 void fetchedFiles(QStringList, QStringList, const QString &token = QString()); 0093 void authenticated(const QString &token); 0094 void usePreview(); 0095 void authorizeWithBrowser(const QUrl &url); 0096 };