X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fvideo.cpp;h=c4c3575955c077264ca9ac99e0679c0684095ba0;hb=0817201dd8aa205f3532c3d850e63786b728e649;hp=0e8d86021b9b3ca15ed35d12afc9aa88521d7f62;hpb=9d21bba470b09c5bf9c35bfe0e8163e7dd13a4b2;p=minitube diff --git a/src/video.cpp b/src/video.cpp index 0e8d860..c4c3575 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -38,7 +38,10 @@ void Video::scrapeStreamUrl() { // QRegExp re("^((?:http://)?(?:\\w+\\.)?youtube\\.com/(?:(?:v/)|(?:(?:watch(?:\\.php)?)?\\?(?:.+&)?v=)))?([0-9A-Za-z_-]+)(?(1).+)?$"); QRegExp re("^http://www\\.youtube\\.com/watch\\?v=([0-9A-Za-z_-]+)$"); bool match = re.exactMatch(webpage.toString()); - // if (!match || re.numCaptures() < 1) return false; + if (!match || re.numCaptures() < 1) { + emit errorStreamUrl(QString("Cannot get video id for %1").arg(webpage.toString())); + return; + } videoId = re.cap(1); // if (!videoId) return false; // qDebug() << videoId; @@ -49,16 +52,37 @@ void Video::scrapeStreamUrl() { QObject *reply = The::http()->get(normalizedUrl); connect(reply, SIGNAL(data(QByteArray)), SLOT(gotVideoInfo(QByteArray))); + connect(reply, SIGNAL(error(QNetworkReply*)), SLOT(errorVideoInfo(QNetworkReply*))); // see you in gotVideoInfo... } void Video::gotVideoInfo(QByteArray data) { QString videoInfo = QString::fromUtf8(data); - // qDebug() << videoInfo; + QRegExp re = QRegExp("^.*&token=([^&]+).*$"); bool match = re.exactMatch(videoInfo); - if (!match || re.numCaptures() < 1) return; + + // on regexp failure, stop and report error + if (!match || re.numCaptures() < 1) { + qDebug() << videoInfo; + re = QRegExp("^.*&reason=([^&]+).*$"); + match = re.exactMatch(videoInfo); + if (match) { + // report the error in the status bar + QMainWindow* mainWindow = dynamic_cast(qApp->topLevelWidgets().first()); + QString errorMessage = QUrl::fromEncoded(re.cap(1).toUtf8()).toString().replace("+", " "); + int indexOfTag = errorMessage.indexOf("<"); + if (indexOfTag != -1) { + errorMessage = errorMessage.left(indexOfTag); + } + if (mainWindow) mainWindow->statusBar()->showMessage(errorMessage); + emit errorStreamUrl(errorMessage); + } else + emit errorStreamUrl("Error parsing video info"); + return; + } + QString videoToken = re.cap(1); // FIXME proper decode videoToken = videoToken.replace("%3D", "="); @@ -73,3 +97,7 @@ void Video::gotVideoInfo(QByteArray data) { emit gotStreamUrl(videoUrl); } + +void Video::errorVideoInfo(QNetworkReply *reply) { + emit errorStreamUrl(tr("Network error: %1 for %2").arg(reply->errorString(), reply->url().toString())); +}