#include "jsfunctions.h"
#include "temporary.h"
#include "compatibility/qurlqueryhelper.h"
+#include "datautils.h"
namespace The {
NetworkAccess* http();
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();
// 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
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) {
}
}
-void Video::parseJsPlayer(QByteArray bytes) {
+void Video::parseJsPlayer(const QByteArray &bytes) {
QString js = QString::fromUtf8(bytes);
// qWarning() << "jsPlayer" << js;
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();
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);
}
QString Video::formattedDuration() const {
- int duration = m_duration;
- QString res;
- int seconds = duration % 60;
- duration /= 60;
- int minutes = duration % 60;
- duration /= 60;
- int hours = duration % 24;
- if (hours == 0)
- return res.sprintf("%d:%02d", minutes, seconds);
- return res.sprintf("%d:%02d:%02d", hours, minutes, seconds);
+ return DataUtils::formatDuration(m_duration);
}
void Video::saveDefinitionForUrl(const QString& url, const VideoDefinition& definition) {