+/* $BEGIN_LICENSE
+
+This file is part of Minitube.
+Copyright 2009, Flavio Tordini <flavio.tordini@gmail.com>
+
+Minitube is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Minitube is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Minitube. If not, see <http://www.gnu.org/licenses/>.
+
+$END_LICENSE */
+
#ifndef VIDEO_H
#define VIDEO_H
+#include <QtCore>
#include <QtGui>
-#include <QtNetwork>
-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();
- const QString title() const { return m_title; }
- void setTitle( QString title ) { m_title = title; }
+ enum License { LicenseYouTube = 1, LicenseCC };
+ Q_ENUM(License)
- const QString description() const { return m_description; }
- void setDescription( QString description ) { m_description = description; }
+ const QString &getTitle() const { return title; }
+ void setTitle(const QString &value) { title = value; }
- const QString author() const { return m_author; }
- void setAuthor( QString author ) { m_author = author; }
+ const QString &getDescription() const { return description; }
+ void setDescription(const QString &value) { description = value; }
- const QUrl webpage() const { return m_webpage; }
- void setWebpage( QUrl webpage ) { m_webpage = webpage; }
+ const QString &getChannelTitle() const { return channelTitle; }
+ void setChannelTitle(const QString &value) { channelTitle = value; }
- QList<QUrl> thumbnailUrls() const { return m_thumbnailUrls; }
- void addThumbnailUrl(QUrl url) {
- m_thumbnailUrls << url;
- }
+ const QString &getChannelId() const { return channelId; }
+ void setChannelId(const QString &value) { channelId = value; }
- void preloadThumbnail();
- const QImage thumbnail() const;
+ const QString &getWebpage();
+ void setWebpage(const QString &value);
- int duration() const { return m_duration; }
- void setDuration( int duration ) { m_duration = duration; }
+ int getDuration() const { return duration; }
+ void setDuration(int value);
+ const QString &getFormattedDuration() const { return formattedDuration; }
- int viewCount() const { return m_viewCount; }
- void setViewCount( int viewCount ) { m_viewCount = viewCount; }
+ int getViewCount() const { return viewCount; }
+ void setViewCount(int value);
+ const QString &getFormattedViewCount() const { return formattedViewCount; }
- const QDateTime published() const { return m_published; }
- void setPublished( 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();
- QUrl getStreamUrl() { return m_streamUrl; }
+ const QString &getStreamUrl() { return streamUrl; }
+ bool isLoadingStreamUrl() const;
+ void abortLoadStreamUrl();
- QString id() { return videoId; }
+ const QString &getId() const { return id; }
+ void setId(const QString &value) { id = value; }
-public slots:
- void setThumbnail(QByteArray bytes);
+ 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 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 gotVideoInfo(QByteArray);
- void errorVideoInfo(QNetworkReply*);
- void scrapeWebPage(QByteArray);
- void gotHeadHeaders(QNetworkReply*);
+ void streamUrlLoaded(const QString &streamUrl, const QString &audioUrl);
private:
- void getVideoInfo();
- void findVideoUrl(int definitionCode);
- void foundVideoUrl(QString videoToken, int definitionCode);
-
- QString m_title;
- QString m_description;
- QString m_author;
- QUrl m_webpage;
- QUrl m_streamUrl;
- QImage m_thumbnail;
- QList<QUrl> m_thumbnailUrls;
- int m_duration;
- QDateTime m_published;
- int m_viewCount;
-
- // The YouTube video id
- // This is needed by the gotVideoInfo callback
- 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 loadingStreamUrl;
+ YTVideo *ytVideo;
+ YTJSVideo *ytjsVideo;
+
+ QVector<YTThumb> thumbs;
+ bool thumbsNeedSorting = false;
};
// This is required in order to use QPointer<Video> as a QVariant