From 9aa82db81f659e0ed93fef11fc0fe2809ae9e475 Mon Sep 17 00:00:00 2001 From: Daniel Kraft Date: Fri, 5 Jul 2013 18:14:47 +0200 Subject: [PATCH] Basic implementation. Implement very rough first query implementation, with still hardcoded connection details. --- src/bitmessageqt/__init__.py | 2 +- src/class_namecoin.py | 32 +++++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/bitmessageqt/__init__.py b/src/bitmessageqt/__init__.py index b04320d2..d6f6d369 100644 --- a/src/bitmessageqt/__init__.py +++ b/src/bitmessageqt/__init__.py @@ -1459,7 +1459,7 @@ class MyForm(QtGui.QMainWindow): def click_pushButtonFetchNamecoinID(self): nc = namecoinConnection() - err, addr = nc.query("") + err, addr = nc.query(str(self.ui.lineEditTo.text())) if err is not None: self.statusBar().showMessage(_translate( "MainWindow", "Error: " + err)) diff --git a/src/class_namecoin.py b/src/class_namecoin.py index 6239cd78..d5a9543a 100644 --- a/src/class_namecoin.py +++ b/src/class_namecoin.py @@ -1,3 +1,4 @@ +import json from jsonrpc import ServiceProxy, JSONRPCException # This class handles the Namecoin identity integration. @@ -9,12 +10,37 @@ class namecoinConnection(object): password = "password" host = "localhost" port = "8336" - self.s = ServiceProxy ("http://" + user + ":" + password - + "@" + host + ":" + port) + self.s = ServiceProxy("http://" + user + ":" + password + + "@" + host + ":" + port) # Query for the bitmessage address corresponding to the given identity # string. If it doesn't contain a slash, id/ is prepended. We return # the result as (Error, Address) pair, where the Error is an error # message to display or None in case of success. def query(self,string): - return None, "BM-Foobar2" + slashPos = string.find("/") + if slashPos < 0: + string = "id/" + string + + try: + res = self.s.name_show(string) + except JSONRPCException as err: + if err.error["code"] == -4: + return ("The name '" + string + "' was not found.", None) + else: + return ("The namecoin query failed (" + + err.error["message"] + ")", None) + except: + return ("The namecoin query failed.", None) + + try: + print res["value"] + val = json.loads(res["value"]) + except: + return ("The name '" + string + "' has no valid JSON data.", None) + + if "bitmessage" in val: + return (None, val["bitmessage"]) + + return ("The name '" + string + + "' has no associated Bitmessage address.", None)