1 /* $BEGIN_LICENSE 2 3 This file is part of Minitube. 4 Copyright 2009, Flavio Tordini <flavio.tordini@gmail.com> 5 6 Minitube is free software: you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 Minitube is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with Minitube. If not, see <http://www.gnu.org/licenses/>. 18 19 $END_LICENSE */ 20 21 #ifndef JSFUNCTIONS_H 22 #define JSFUNCTIONS_H 23 24 #include <QJSEngine> 25 #include <QJSValue> 26 #include <QtCore> 27 #include <QtNetwork> 28 29 class JsFunctions : public QObject { 30 Q_OBJECT 31 32 public: 33 static JsFunctions *instance(); 34 JsFunctions(const QString &url, QObject *parent = nullptr); 35 QJSValue evaluate(const QString &js); 36 QString string(const QString &js); 37 QStringList stringArray(const QString &js); 38 39 // Specialized functions 40 // TODO move to subclass 41 QString decryptSignature(const QString &s); 42 QString decryptAgeSignature(const QString &s); 43 QString videoIdRE(); 44 QString videoTokenRE(); 45 QString videoInfoFmtMapRE(); 46 QString webPageFmtMapRE(); 47 QString ageGateRE(); 48 QString jsPlayerRE(); 49 QString signatureFunctionNameRE(); 50 QStringList signatureFunctionNameREs(); 51 QStringList apiKeys(); 52 53 signals: 54 void ready(); 55 56 private slots: 57 void gotJs(const QByteArray &bytes); 58 void errorJs(const QString &message); 59 60 private: 61 QString jsFilename(); 62 QString jsDir(); 63 QString jsPath(); 64 void loadJs(); 65 void parseJs(const QString &js); 66 67 QString url; 68 QJSEngine *engine; 69 }; 70 71 #endif // JSFUNCTIONS_H 72