fix webpreview for urls with url-encoded chars
authorDaniel Albers <daniel@lbers.com>
Thu, 8 Oct 2009 18:30:11 +0000 (20:30 +0200)
committerDaniel Albers <daniel@lbers.com>
Thu, 8 Oct 2009 18:30:11 +0000 (20:30 +0200)
Also switches argument of WebPreviewItem() and friends from QString to QUrl to make sure the caller takes care of the appropriate string conversion.
Test case: http://de.wikipedia.org/wiki/München http://de.wikipedia.org/wiki/M%C3%BCnchen

src/qtui/chatitem.cpp
src/qtui/chatscene.cpp
src/qtui/chatscene.h
src/qtui/webpreviewitem.cpp
src/qtui/webpreviewitem.h

index e255d00..e3ab1ab 100644 (file)
@@ -636,9 +636,10 @@ void ContentsChatItem::showWebPreview(const Clickable &click) {
   QPointF topLeft = scenePos() + QPointF(x, y);
   QRectF urlRect = QRectF(topLeft.x(), topLeft.y(), width, height);
 
-  QString url = data(ChatLineModel::DisplayRole).toString().mid(click.start(), click.length());
-  if(!url.contains("://"))
-    url = "http://" + url;
+  QString urlstr = data(ChatLineModel::DisplayRole).toString().mid(click.start(), click.length());
+  if(!urlstr.contains("://"))
+    urlstr= "http://" + urlstr;
+  QUrl url = QUrl::fromEncoded(urlstr.toUtf8(), QUrl::TolerantMode);
   chatScene()->loadWebPreview(this, url, urlRect);
 #endif
 }
index 411cdb8..86a461b 100644 (file)
@@ -882,7 +882,7 @@ bool ChatScene::event(QEvent *e) {
 //  Webkit Only stuff
 // ========================================
 #ifdef HAVE_WEBKIT
-void ChatScene::loadWebPreview(ChatItem *parentItem, const QString &url, const QRectF &urlRect) {
+void ChatScene::loadWebPreview(ChatItem *parentItem, const QUrl &url, const QRectF &urlRect) {
   if(!_showWebPreview)
     return;
 
@@ -967,7 +967,7 @@ void ChatScene::webPreviewNextStep() {
       webPreview.previewItem = 0;
     }
     webPreview.parentItem = 0;
-    webPreview.url = QString();
+    webPreview.url = QUrl();
     webPreview.urlRect = QRectF();
     webPreview.previewState = WebPreview::NoPreview;
   }
index 6595ea4..7bf5be3 100644 (file)
@@ -122,7 +122,7 @@ public:
   void requestBacklog();
 
 #ifdef HAVE_WEBKIT
-  void loadWebPreview(ChatItem *parentItem, const QString &url, const QRectF &urlRect);
+  void loadWebPreview(ChatItem *parentItem, const QUrl &url, const QRectF &urlRect);
   void clearWebPreview(ChatItem *parentItem = 0);
 #endif
 
@@ -203,7 +203,7 @@ private:
     };
     ChatItem *parentItem;
     QGraphicsItem *previewItem;
-    QString url;
+    QUrl url;
     QRectF urlRect;
     PreviewState previewState;
     QTimer timer;
index 8f49032..45c080c 100644 (file)
@@ -26,7 +26,7 @@
 #include <QPainter>
 #include <QWebView>
 
-WebPreviewItem::WebPreviewItem(const QString &url)
+WebPreviewItem::WebPreviewItem(const QUrl &url)
   : QGraphicsItem(0), // needs to be a top level item as we otherwise cannot guarantee that it's on top of other chatlines
     _boundingRect(0, 0, 400, 300)
 {
index 6708125..c5bcbb6 100644 (file)
@@ -27,7 +27,7 @@
 
 class WebPreviewItem : public QGraphicsItem {
 public:
-  WebPreviewItem(const QString &url);
+  WebPreviewItem(const QUrl &url);
   virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
   virtual inline QRectF boundingRect() const { return _boundingRect; }