summaryrefslogtreecommitdiffstats
path: root/src/gui/CoreConnector.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/CoreConnector.vala')
-rw-r--r--src/gui/CoreConnector.vala33
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));
}