]> git.sur5r.net Git - minitube/blob - src/ytvideo.h
9f18e43c3094c9238396380caa4058d645bba072
[minitube] / src / ytvideo.h
1 #ifndef YTVIDEO_H
2 #define YTVIDEO_H
3
4 #include <QtCore>
5
6 class VideoDefinition;
7
8 class YTVideo : public QObject {
9     Q_OBJECT
10
11 public:
12     YTVideo(const QString &videoId, QObject *parent);
13     void loadStreamUrl();
14     int getDefinitionCode() const { return definitionCode; }
15
16 signals:
17     void gotStreamUrl(const QUrl &streamUrl);
18     void errorStreamUrl(const QString &message);
19
20 private slots:
21     void gotVideoInfo(const QByteArray &bytes);
22     void errorVideoInfo(const QString &message);
23     void scrapeWebPage(const QByteArray &bytes);
24     void parseJsPlayer(const QByteArray &bytes);
25     void parseDashManifest(const QByteArray &bytes);
26
27 private:
28     void getVideoInfo();
29     void parseFmtUrlMap(const QString &fmtUrlMap, bool fromWebPage = false);
30     void captureFunction(const QString &name, const QString &js);
31     void captureObject(const QString &name, const QString &js);
32     QString decryptSignature(const QString &s);
33     void saveDefinitionForUrl(const QString &url, const VideoDefinition &definition);
34
35     QString videoId;
36     QUrl m_streamUrl;
37     int definitionCode;
38     bool loadingStreamUrl;
39     // current index for the elTypes list
40     // needed to iterate on elTypes
41     int elIndex;
42     bool ageGate;
43     QString videoToken;
44     QString fmtUrlMap;
45     QString sigFuncName;
46     QHash<QString, QString> sigFunctions;
47     QHash<QString, QString> sigObjects;
48     QString dashManifestUrl;
49     QString jsPlayer;
50 };
51
52 #endif // YTVIDEO_H