diff --git a/src/settings.cpp b/src/settings.cpp index ba8207b..fd53381 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -292,27 +292,23 @@ PaymentURI Settings::parseURI(QString uri) { ans.error = "Could not understand address"; return ans; } - uri = uri.right(uri.length() - ans.addr.length()); - - if (!uri.isEmpty()) { - uri = uri.right(uri.length() - 1); // Eat the "?" - - QStringList args = uri.split("&"); - for (QString arg: args) { - QStringList kv = arg.split("="); - if (kv.length() != 2) { - ans.error = "No value argument was seen"; - return ans; - } - - if (kv[0].toLower() == "amt" || kv[0].toLower() == "amount") { - ans.amt = kv[1]; - } else if (kv[0].toLower() == "memo" || kv[0].toLower() == "message" || kv[0].toLower() == "msg") { - ans.memo = QUrl::fromPercentEncoding(kv[1].toUtf8()); - } else { - // Ignore unknown fields, since some developers use it to pass extra data. - } - } + uri = uri.right(uri.length() - ans.addr.length()-1); // swallow '?' + QUrlQuery query(uri); + + // parse out amt / amount + if (query.hasQueryItem("amt")) { + ans.amt = query.queryItemValue("amt"); + } else if (query.hasQueryItem("amount")) { + ans.amt = query.queryItemValue("amount"); + } + + // parse out memo / msg / message + if (query.hasQueryItem("memo")) { + ans.memo = query.queryItemValue("memo"); + } else if (query.hasQueryItem("msg")) { + ans.memo = query.queryItemValue("msg"); + } else if (query.hasQueryItem("message")) { + ans.memo = query.queryItemValue("message"); } return ans;