]> git.sur5r.net Git - minitube/commitdiff
new error signal when stream url cannot be determined
authorFlavio Tordini <flavio.tordini@gmail.com>
Thu, 23 Jul 2009 23:13:20 +0000 (01:13 +0200)
committerFlavio Tordini <flavio.tordini@gmail.com>
Thu, 23 Jul 2009 23:13:20 +0000 (01:13 +0200)
This makes the playlist skip to the next video

src/MediaView.cpp
src/MediaView.h
src/video.cpp
src/video.h

index bd3eb7a227ddf346675104ab7952469d7962471a..45282b8e018a158f9d686e4adfaa77a057069871 100644 (file)
@@ -194,6 +194,8 @@ void MediaView::activeRowChanged(int row) {
     // mediaObject->pause();
 
     connect(video, SIGNAL(gotStreamUrl(QUrl)), SLOT(gotStreamUrl(QUrl)));
+    // TODO handle signal in a proper slot and impl item error status
+    connect(video, SIGNAL(errorStreamUrl()), SLOT(skip()));
     video->loadStreamUrl();
 
     // reset the timer flag
index 0419cb8eb3abe94ba9c0f2da09a97170549908d6..a4a8996df6d1df880c6e9bc6f7f84accc290bd70 100644 (file)
@@ -53,12 +53,12 @@ private slots:
     void selectionChanged (const QItemSelection & selected, const QItemSelection & deselected);
     void activeRowChanged(int);
     void selectVideos(QList<Video*> videos);
+    void gotStreamUrl(QUrl streamUrl);
     // phonon
     void stateChanged(Phonon::State newState, Phonon::State oldState);
     void aboutToFinish();
     void currentSourceChanged(const Phonon::MediaSource source);
     void showVideoContextMenu(QPoint point);
-    void gotStreamUrl(QUrl streamUrl);
     // bar
     void searchMostRelevant();
     void searchMostRecent();
index 0e8d86021b9b3ca15ed35d12afc9aa88521d7f62..1ac9871453133da8ba23a27c46eea259de5ddd07 100644 (file)
@@ -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();
+        return;
+    }
     videoId = re.cap(1);
     // if (!videoId) return false;
     // qDebug() << videoId;
@@ -55,10 +58,29 @@ void Video::scrapeStreamUrl() {
 
 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<QMainWindow*>(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();
+        return;
+    }
+
     QString videoToken = re.cap(1);
     // FIXME proper decode
     videoToken = videoToken.replace("%3D", "=");
index 81e07346ca24a2e505b27eaf45bcd3b375eb4f00..f7d91980633d9efe20f5696ff5095fe82ca8ca01 100644 (file)
@@ -52,6 +52,7 @@ public slots:
 signals:
     void gotThumbnail();
     void gotStreamUrl(QUrl streamUrl);
+    void errorStreamUrl();
 
 private slots:
     void gotVideoInfo(QByteArray);