diff options
Diffstat (limited to 'src/gui/CoreConnector.vala')
-rw-r--r-- | src/gui/CoreConnector.vala | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/gui/CoreConnector.vala b/src/gui/CoreConnector.vala index 5566686..d5f0ecc 100644 --- a/src/gui/CoreConnector.vala +++ b/src/gui/CoreConnector.vala @@ -32,6 +32,9 @@ public class CoreConnector { } private static string from_utf8(Eva.Binary bin) { + if(bin.len == 0) + return ""; + string ret = ((string)bin.data).ndup(bin.len); warn_if_fail(ret.validate()); return ret; @@ -69,13 +72,34 @@ public class CoreConnector { Eva.Binary name_term = match["Name"] as Eva.Binary; string? name; - if (name_term is Eva.Binary) + if (name_term != null) name = from_utf8(name_term); else name = null; Contact contact = new Contact(jid, name); - + + Eva.Atom subscription = match["Subscription"] as Eva.Atom; + if(subscription != null) { + switch(subscription.value) { + case "none": + contact.subscription = Contact.Subscription.NONE; + break; + case "to": + contact.subscription = Contact.Subscription.TO; + break; + case "from": + contact.subscription = Contact.Subscription.FROM; + break; + case "both": + contact.subscription = Contact.Subscription.BOTH; + break; + default: + stderr.printf("Unknown subscription: %s\r\n", subscription.value); + break; + } + } + Eva.Cons groups = match["Groups"] as Eva.Cons; while(groups != null) { Eva.Binary group_term = groups.head as Eva.Binary; @@ -122,8 +146,11 @@ public class CoreConnector { } string? status = null; - if(status_term != null) + if(status_term != null) { status = from_utf8(status_term); + if(status == "") + status = null; + } contact.update_resource(rname, new Contact.Resource(prio, show, status)); } |