]> git.sur5r.net Git - minitube/blobdiff - src/video.cpp
Fix VEVO
[minitube] / src / video.cpp
index 41e8c018323b0b3a0c3ebb2351f83a5d1c851829..5a1dbd00d2fdd00ea5dc7eb090471f9e409bcca2 100644 (file)
@@ -25,6 +25,7 @@ $END_LICENSE */
 #include "jsfunctions.h"
 #include "temporary.h"
 #include "compatibility/qurlqueryhelper.h"
+#include "datautils.h"
 
 namespace The {
 NetworkAccess* http();
@@ -93,21 +94,18 @@ void Video::loadThumbnail() {
     connect(reply, SIGNAL(data(QByteArray)), SLOT(setThumbnail(QByteArray)));
 }
 
-void Video::setThumbnail(QByteArray bytes) {
+void Video::setThumbnail(const QByteArray &bytes) {
     loadingThumbnail = false;
+    qreal ratio = qApp->devicePixelRatio();
     m_thumbnail = QPixmap();
     m_thumbnail.loadFromData(bytes);
-    if (m_thumbnail.width() > 160)
-        m_thumbnail = m_thumbnail.scaledToWidth(160, Qt::SmoothTransformation);
+    m_thumbnail.setDevicePixelRatio(ratio);
+    const int thumbWidth = 160 * ratio;
+    if (m_thumbnail.width() > thumbWidth)
+        m_thumbnail = m_thumbnail.scaledToWidth(thumbWidth, Qt::SmoothTransformation);
     emit gotThumbnail();
 }
 
-void Video::loadMediumThumbnail() {
-    if (m_mediumThumbnailUrl.isEmpty()) return;
-    QObject *reply = The::http()->get(m_mediumThumbnailUrl);
-    connect(reply, SIGNAL(data(QByteArray)), SIGNAL(gotMediumThumbnail(QByteArray)));
-}
-
 void Video::loadStreamUrl() {
     if (loadingStreamUrl) {
         qDebug() << "Already loading stream URL for" << this->title();
@@ -155,8 +153,8 @@ void  Video::getVideoInfo() {
     // see you in gotVideoInfo...
 }
 
-void  Video::gotVideoInfo(QByteArray data) {
-    QString videoInfo = QString::fromUtf8(data);
+void  Video::gotVideoInfo(const QByteArray &bytes) {
+    QString videoInfo = QString::fromUtf8(bytes);
     // qDebug() << "videoInfo" << videoInfo;
 
     // get video token
@@ -291,8 +289,8 @@ void Video::errorVideoInfo(QNetworkReply *reply) {
     emit errorStreamUrl(tr("Network error: %1 for %2").arg(reply->errorString(), reply->url().toString()));
 }
 
-void Video::scrapeWebPage(QByteArray data) {
-    QString html = QString::fromUtf8(data);
+void Video::scrapeWebPage(const QByteArray &bytes) {
+    QString html = QString::fromUtf8(bytes);
 
     QRegExp ageGateRE(JsFunctions::instance()->ageGateRE());
     if (ageGateRE.indexIn(html) != -1) {
@@ -346,7 +344,7 @@ void Video::scrapeWebPage(QByteArray data) {
     }
 }
 
-void Video::parseJsPlayer(QByteArray bytes) {
+void Video::parseJsPlayer(const QByteArray &bytes) {
     QString js = QString::fromUtf8(bytes);
     // qWarning() << "jsPlayer" << js;
 
@@ -392,7 +390,7 @@ void Video::parseJsPlayer(QByteArray bytes) {
     parseFmtUrlMap(fmtUrlMap, true);
 }
 
-void Video::parseDashManifest(QByteArray bytes) {
+void Video::parseDashManifest(const QByteArray &bytes) {
     QFile file(Temporary::filename() + ".mpd");
     if (!file.open(QIODevice::WriteOnly))
         qWarning() << file.errorString() << file.fileName();
@@ -408,8 +406,12 @@ void Video::parseDashManifest(QByteArray bytes) {
 void Video::captureFunction(const QString &name, const QString &js) {
     QRegExp funcRe("function\\s+" + QRegExp::escape(name) + "\\s*\\([" + jsNameChars + ",\\s]*\\)\\s*\\{[^\\}]+\\}");
     if (funcRe.indexIn(js) == -1) {
-        qWarning() << "Cannot capture function" << name;
-        return;
+        // try var foo = function(bar) { };
+        funcRe = QRegExp("var\\s+" + QRegExp::escape(name) + "\\s*=\\s*function\\s*\\([" + jsNameChars + ",\\s]*\\)\\s*\\{[^\\}]+\\}");
+        if (funcRe.indexIn(js) == -1) {
+            qWarning() << "Cannot capture function" << name;
+            return;
+        }
     }
     QString func = funcRe.cap(0);
     sigFunctions.insert(name, func);
@@ -473,8 +475,7 @@ QString Video::decryptSignature(const QString &s) {
 }
 
 QString Video::formattedDuration() const {
-    QString format = m_duration > 3600 ? "h:mm:ss" : "m:ss";
-    return QTime().addSecs(m_duration).toString(format);
+    return DataUtils::formatDuration(m_duration);
 }
 
 void Video::saveDefinitionForUrl(const QString& url, const VideoDefinition& definition) {