BlackBerry: Pass encoded URLs to mm renderer
authorBernd Weimer <bweimer@blackberry.com>
Tue, 27 Aug 2013 08:39:31 +0000 (10:39 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 29 Aug 2013 07:24:31 +0000 (09:24 +0200)
MM renderer expects (remote) URLs to be percent encoded.

Change-Id: Ib7429cbeb3b7aa6baba99419d8b101a712ab4881
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
src/plugins/blackberry/mediaplayer/bbmediaplayercontrol.cpp
src/plugins/blackberry/mediaplayer/bbmediaplayercontrol.h

index 1ef68cb..c7a0fdd 100644 (file)
@@ -137,7 +137,7 @@ void BbMediaPlayerControl::closeConnection()
     }
 }
 
-QString BbMediaPlayerControl::resourcePathForUrl(const QUrl &url)
+QByteArray BbMediaPlayerControl::resourcePathForUrl(const QUrl &url)
 {
     // If this is a local file, mmrenderer expects the file:// prefix and an absolute path.
     // We treat URLs without scheme as local files, most likely someone just forgot to set the
@@ -149,7 +149,7 @@ QString BbMediaPlayerControl::resourcePathForUrl(const QUrl &url)
         else
             relativeFilePath = url.path();
         const QFileInfo fileInfo(relativeFilePath);
-        return QStringLiteral("file://") + fileInfo.absoluteFilePath();
+        return QFile::encodeName(QStringLiteral("file://") + fileInfo.absoluteFilePath());
 
     // QRC, copy to temporary file, as mmrenderer does not support resource files
     } else if (url.scheme() == QStringLiteral("qrc")) {
@@ -159,17 +159,17 @@ QString BbMediaPlayerControl::resourcePathForUrl(const QUrl &url)
                               QUuid::createUuid().toString() + QStringLiteral(".") +
                               resourceFileInfo.suffix();
         if (!QFile::copy(qrcPath, m_tempMediaFileName)) {
-            const QString errorMsg =
-                QString("Failed to copy resource file to temporary file %1 for playback").arg(m_tempMediaFileName);
+            const QString errorMsg = QString("Failed to copy resource file to temporary file "
+                                             "%1 for playback").arg(m_tempMediaFileName);
             qDebug() << errorMsg;
             emit error(0, errorMsg);
-            return QString();
+            return QByteArray();
         }
-        return m_tempMediaFileName;
+        return QFile::encodeName(m_tempMediaFileName);
 
-    // HTTP or similar URL, use as-is
+    // HTTP or similar URL
     } else {
-        return url.toString();
+        return url.toEncoded();
     }
 }
 
@@ -195,14 +195,14 @@ void BbMediaPlayerControl::attach()
         return;
     }
 
-    const QString resourcePath = resourcePathForUrl(m_media.canonicalUrl());
+    const QByteArray resourcePath = resourcePathForUrl(m_media.canonicalUrl());
     if (resourcePath.isEmpty()) {
         detach();
         return;
     }
 
-    if (mmr_input_attach(m_context, QFile::encodeName(resourcePath), "track") != 0) {
-        emitMmError(QString("mmr_input_attach() for %1 failed").arg(resourcePath));
+    if (mmr_input_attach(m_context, resourcePath.constData(), "track") != 0) {
+        emitMmError(QStringLiteral("mmr_input_attach() failed for ") + QString(resourcePath));
         setMediaStatus(QMediaPlayer::InvalidMedia);
         detach();
         return;
index a8a4a92..16505fd 100644 (file)
@@ -109,7 +109,7 @@ private Q_SLOTS:
     void continueLoadMedia();
 
 private:
-    QString resourcePathForUrl(const QUrl &url);
+    QByteArray resourcePathForUrl(const QUrl &url);
     void openConnection();
     void closeConnection();
     void attach();