diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2010-08-17 00:22:21 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2010-08-17 00:22:21 +0200 |
commit | 6ec7efc36f44dfddff4c9d843cd4c70cffb95837 (patch) | |
tree | 35475563668e508b711517827fba6e2aeb54a0a3 /src/gui/CoreConnector.vala | |
parent | eb4193538b99cf9d49ad0650b1bb816844361ab5 (diff) | |
download | ephraim-6ec7efc36f44dfddff4c9d843cd4c70cffb95837.tar ephraim-6ec7efc36f44dfddff4c9d843cd4c70cffb95837.zip |
Many improvements to roster view
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)); } |