#ifndef VIDEO_H
#define VIDEO_H
+#include <QtCore>
#include <QtGui>
-#if QT_VERSION >= 0x050000
-#include <QtWidgets>
-#endif
-#include <QtNetwork>
-class Video : public QObject {
+class YTVideo;
+class Video : public QObject {
Q_OBJECT
public:
Video();
- Video* clone();
+ ~Video();
+ Video *clone();
- enum License {
- LicenseYouTube = 1,
- LicenseCC
- };
+ enum License { LicenseYouTube = 1, LicenseCC };
+ Q_ENUM(License)
- const QString & title() const { return m_title; }
- void setTitle(const QString &title) { m_title = title; }
+ const QString &getTitle() const { return title; }
+ void setTitle(const QString &value) { title = value; }
- const QString & description() const { return m_description; }
- void setDescription(const QString &description) { m_description = description; }
+ const QString &getDescription() const { return description; }
+ void setDescription(const QString &value) { description = value; }
- const QString & channelTitle() const { return m_channelTitle; }
- void setChannelTitle(const QString &value) { m_channelTitle = value; }
+ const QString &getChannelTitle() const { return channelTitle; }
+ void setChannelTitle(const QString &value) { channelTitle = value; }
- const QString & channelId() const { return m_channelId; }
- void setChannelId(const QString &value ) { m_channelId = value; }
+ const QString &getChannelId() const { return channelId; }
+ void setChannelId(const QString &value) { channelId = value; }
- const QString & webpage();
+ const QString &getWebpage();
void setWebpage(const QString &value);
void loadThumbnail();
- const QPixmap & thumbnail() const { return m_thumbnail; }
+ const QPixmap &getThumbnail() const { return thumbnail; }
- const QString & thumbnailUrl() { return m_thumbnailUrl; }
- void setThumbnailUrl(const QString &url) { m_thumbnailUrl = url; }
+ const QString &getThumbnailUrl() const { return thumbnailUrl; }
+ void setThumbnailUrl(const QString &value) { thumbnailUrl = value; }
- void loadMediumThumbnail();
- const QString & mediumThumbnailUrl() { return m_mediumThumbnailUrl; }
- void setMediumThumbnailUrl(const QString &url) { m_mediumThumbnailUrl = url; }
+ const QString &getMediumThumbnailUrl() const { return mediumThumbnailUrl; }
+ void setMediumThumbnailUrl(const QString &value) { mediumThumbnailUrl = value; }
- int duration() const { return m_duration; }
- void setDuration( int duration ) { m_duration = duration; }
- QString formattedDuration() const;
+ const QString &getLargeThumbnailUrl() const { return largeThumbnailUrl; }
+ void setLargeThumbnailUrl(const QString &value) { largeThumbnailUrl = value; }
- int viewCount() const { return m_viewCount; }
- void setViewCount( int viewCount ) { m_viewCount = viewCount; }
+ int getDuration() const { return duration; }
+ void setDuration(int value);
+ const QString &getFormattedDuration() const { return formattedDuration; }
- const QDateTime & published() const { return m_published; }
- void setPublished(const QDateTime &published ) { m_published = published; }
+ int getViewCount() const { return viewCount; }
+ void setViewCount(int value);
+ const QString &getFormattedViewCount() const { return formattedViewCount; }
+
+ const QDateTime &getPublished() const { return published; }
+ void setPublished(const QDateTime &value);
+ const QString &getFormattedPublished() const { return formattedPublished; }
int getDefinitionCode() const { return definitionCode; }
void loadStreamUrl();
- const QUrl & getStreamUrl() { return m_streamUrl; }
+ const QString &getStreamUrl() { return streamUrl; }
+ bool isLoadingStreamUrl() const { return ytVideo != nullptr; }
+ void abortLoadStreamUrl();
- void setId(QString id) { videoId = id; }
- const QString & id() const { return videoId; }
+ const QString &getId() const { return id; }
+ void setId(const QString &value) { id = value; }
- void setLicense(License license) { m_license = license; }
- License license() const { return m_license; }
+ License getLicense() const { return license; }
+ void setLicense(License value) { license = value; }
signals:
void gotThumbnail();
- void gotMediumThumbnail(QByteArray bytes);
- void gotStreamUrl(QUrl streamUrl);
- void errorStreamUrl(QString message);
+ void gotMediumThumbnail(const QByteArray &bytes);
+ void gotLargeThumbnail(const QByteArray &bytes);
+ void gotStreamUrl(const QString &videoUrl, const QString &audioUrl);
+ void errorStreamUrl(const QString &message);
private slots:
- void setThumbnail(QByteArray bytes);
- void gotVideoInfo(QByteArray);
- void errorVideoInfo(QNetworkReply*);
- void scrapeWebPage(QByteArray);
- void parseJsPlayer(QByteArray bytes);
- void parseDashManifest(QByteArray bytes);
+ void setThumbnail(const QByteArray &bytes);
+ void streamUrlLoaded(const QString &streamUrl, const QString &audioUrl);
private:
- void getVideoInfo();
- void parseFmtUrlMap(const QString &fmtUrlMap, bool fromWebPage = false);
- void captureFunction(const QString &name, const QString &js);
- void captureObject(const QString &name, const QString &js);
- QString decryptSignature(const QString &s);
-
- QString m_title;
- QString m_description;
- QString m_channelTitle;
- QString m_channelId;
- QString m_webpage;
- QUrl m_streamUrl;
- QPixmap m_thumbnail;
- QString m_thumbnailUrl;
- QString m_mediumThumbnailUrl;
- int m_duration;
- QDateTime m_published;
- int m_viewCount;
- License m_license;
- QString videoId;
- QString videoToken;
+ QString title;
+ QString description;
+ QString channelTitle;
+ QString channelId;
+ QString webpage;
+ QString streamUrl;
+ QPixmap thumbnail;
+ QString thumbnailUrl;
+ QString mediumThumbnailUrl;
+ QString largeThumbnailUrl;
+ int duration;
+ QString formattedDuration;
+
+ QDateTime published;
+ QString formattedPublished;
+ int viewCount;
+ QString formattedViewCount;
+ License license;
+ QString id;
int definitionCode;
- // current index for the elTypes list
- // needed to iterate on elTypes
- int elIndex;
- bool ageGate;
-
- bool loadingStreamUrl;
bool loadingThumbnail;
- QString fmtUrlMap;
- QString sigFuncName;
- QHash<QString, QString> sigFunctions;
- QHash<QString, QString> sigObjects;
-
- QString dashManifestUrl;
+ YTVideo *ytVideo;
};
// This is required in order to use QPointer<Video> as a QVariant