Restructure IPC URL handling (fixes #851)
authorWladimir J. van der Laan <laanwj@gmail.com>
Fri, 17 Feb 2012 14:26:20 +0000 (15:26 +0100)
committerLuke Dashjr <luke-jr+git@utopios.org>
Mon, 27 Feb 2012 17:28:39 +0000 (12:28 -0500)
src/qt/guiutil.cpp
src/qt/guiutil.h
src/qt/sendcoinsdialog.cpp
src/qt/sendcoinsdialog.h

index 158b84a..bc443ce 100644 (file)
@@ -72,3 +72,17 @@ bool GUIUtil::parseBitcoinURL(const QUrl *url, SendCoinsRecipient *out)
     }
     return true;
 }
+
+bool GUIUtil::parseBitcoinURL(QString url, SendCoinsRecipient *out)
+{
+    // Convert bitcoin:// to bitcoin:
+    //
+    //    Cannot handle this later, because bitcoin:// will cause Qt to see the part after // as host,
+    //    which will lowercase it (and thus invalidate the address).
+    if(url.startsWith("bitcoin://"))
+    {
+        url.replace(0, 10, "bitcoin:");
+    }
+    QUrl urlInstance(url);
+    return parseBitcoinURL(&urlInstance, out);
+}
index bc4ddb8..129ab73 100644 (file)
@@ -29,6 +29,7 @@ public:
     // Parse "bitcoin:" URL into recipient object, return true on succesful parsing
     // See Bitcoin URL definition discussion here: https://bitcointalk.org/index.php?topic=33490.0
     static bool parseBitcoinURL(const QUrl *url, SendCoinsRecipient *out);
+    static bool parseBitcoinURL(QString url, SendCoinsRecipient *out);
 };
 
 #endif // GUIUTIL_H
index 6d32891..e465b41 100644 (file)
@@ -265,6 +265,16 @@ void SendCoinsDialog::handleURL(const QUrl *url)
     pasteEntry(rv);
 }
 
+void SendCoinsDialog::handleURL(const QString &url)
+{
+    SendCoinsRecipient rv;
+    if(!GUIUtil::parseBitcoinURL(url, &rv))
+    {
+        return;
+    }
+    pasteEntry(rv);
+}
+
 void SendCoinsDialog::setBalance(qint64 balance, qint64 unconfirmedBalance)
 {
     Q_UNUSED(unconfirmedBalance);
index a14f99e..fdff057 100644 (file)
@@ -30,6 +30,7 @@ public:
 
     void pasteEntry(const SendCoinsRecipient &rv);
     void handleURL(const QUrl *url);
+    void handleURL(const QString &url);
 
 public slots:
     void clear();