X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fvideo.h;h=723be191d592764c0f6667d6431254dd4a59a96a;hb=HEAD;hp=16454425a87463b3038b413a4b548ce6e1860281;hpb=fd2de342562fc7565ee7437636eb10c4456e0368;p=minitube diff --git a/src/video.h b/src/video.h index 1645442..0aa4443 100644 --- a/src/video.h +++ b/src/video.h @@ -21,123 +21,104 @@ $END_LICENSE */ #ifndef VIDEO_H #define VIDEO_H +#include #include -#if QT_VERSION >= 0x050000 -#include -#endif -#include -class Video : public QObject { +#include "ytthumb.h" + +class YTVideo; +class YTJSVideo; +class VariantPromise; +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 QString & thumbnailUrl() { return m_thumbnailUrl; } - void setThumbnailUrl(const QString &url) { m_thumbnailUrl = url; } + int getDuration() const { return duration; } + void setDuration(int value); + const QString &getFormattedDuration() const { return formattedDuration; } - void loadMediumThumbnail(); - const QString & mediumThumbnailUrl() { return m_mediumThumbnailUrl; } - void setMediumThumbnailUrl(const QString &url) { m_mediumThumbnailUrl = url; } + int getViewCount() const { return viewCount; } + void setViewCount(int value); + const QString &getFormattedViewCount() const { return formattedViewCount; } - int duration() const { return m_duration; } - void setDuration( int duration ) { m_duration = duration; } - QString formattedDuration() const; - - int viewCount() const { return m_viewCount; } - void setViewCount( int viewCount ) { m_viewCount = viewCount; } - - const QDateTime & published() const { return m_published; } - void setPublished(const QDateTime &published ) { m_published = published; } + 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; + 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; } + + const auto &getThumbs() const { return thumbs; } + void addThumb(int width, int height, QString url); + VariantPromise &loadThumb(QSize size, qreal pixelRatio); signals: - void gotThumbnail(); - void gotMediumThumbnail(QByteArray bytes); - void gotStreamUrl(QUrl streamUrl); - void errorStreamUrl(QString message); + void gotStreamUrl(const QString &videoUrl, const QString &audioUrl); + void errorStreamUrl(const QString &message); + void changed(); private slots: - void setThumbnail(QByteArray bytes); - void gotVideoInfo(QByteArray); - void errorVideoInfo(QNetworkReply*); - void scrapeWebPage(QByteArray); - void parseJsPlayer(QByteArray bytes); - void parseDashManifest(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; + void loadStreamUrlJS(); + void loadStreamUrlYT(); + + QString title; + QString description; + QString channelTitle; + QString channelId; + QString webpage; + QString streamUrl; + 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 sigFunctions; - QHash sigObjects; + YTVideo *ytVideo; + YTJSVideo *ytjsVideo; - QString dashManifestUrl; + QVector thumbs; + bool thumbsNeedSorting = false; }; // This is required in order to use QPointer