throws FetionException
{
Element root = XMLHelper.build(response.getBody().toSendString());
FetionStore store = this.context.getFetionStore();
//解析个人信息,飞信真有意思,这里却不简写,map.xml里面全是简写的,所以这里只能手动注入了。
Element personal = XMLHelper.find(root, "/results/user-info/personal");
User user = this.context.getFetionUser();
user.setEmail(personal.getAttributeValue("register-email"));
int personalVersion = Integer.parseInt(personal.getAttributeValue("version"));
Element contactList = XMLHelper.find(root, "/results/user-info/contact-list");
int contactVersion = Integer.parseInt(contactList.getAttributeValue("version"));
//联系人和个人信息版本信息
store.getStoreVersion().setPersonalVersion(personalVersion);
store.getStoreVersion().setContactVersion(contactVersion);
user.getStoreVersion().setPersonalVersion(personalVersion);
user.getStoreVersion().setContactVersion(contactVersion);
//个人信息
BeanHelper.toBean(User.class, user, personal);
//一定要对飞信列表加锁,防止其他飞信操作获取到空的数据
synchronized (store) {
//解析分组列表
List list = XMLHelper.findAll(root, "/results/user-info/contact-list/buddy-lists/*buddy-list");
Iterator it = list.iterator();
while(it.hasNext()) {
Element e = (Element) it.next();
store.addCord(new Cord(Integer.parseInt(e.getAttributeValue("id")), e.getAttributeValue("name")));
}
//解析好友列表
list = XMLHelper.findAll(root, "/results/user-info/contact-list/buddies/*b");
it = list.iterator();
while(it.hasNext()) {
Element e = (Element) it.next();
String uri = e.getAttributeValue("u");
Buddy b = UriHelper.createBuddy(uri);
b.setUserId(Integer.parseInt(e.getAttributeValue("i")));
b.setLocalName(e.getAttributeValue("n"));
b.setUri(e.getAttributeValue("u"));
b.setCordId(e.getAttributeValue("l"));
b.setRelation(Relation.valueOf(Integer.parseInt(e.getAttributeValue("r"))));
store.addBuddy(b);
}
//处理 chat-friend..
//这个chat-friend具体是什么含义我也没搞得太清楚,目前猜测里面的名单可能和用户是陌生人关系
list = XMLHelper.findAll(root, "/results/user-info/contact-list/chat-friends/*c");
it = list.iterator();
while(it.hasNext()){
Element e = (Element) it.next();
Buddy b = UriHelper.createBuddy(e.getAttributeValue("u"));
b.setUserId(Integer.parseInt(e.getAttributeValue("i")));
b.setUri(e.getAttributeValue("u"));
b.setRelation(Relation.STRANGER);
store.addBuddy(b);
}
//处理Blacklist
list = XMLHelper.findAll(root, "/results/user-info/contact-list/blacklist/*k");
it = list.iterator();
while(it.hasNext()){
Element e = (Element) it.next();
String uri = e.getAttributeValue("u");
Buddy b = store.getBuddyByUri(uri);
if(b!=null) {
b.setRelation(Relation.BANNED);
}
}
//处理Crendeticals
Element credentialList = XMLHelper.find(root, "/results/credentials");
user.setSsiCredential(this.decryptCredential(credentialList.getAttributeValue("kernel")));
list = XMLHelper.findAll(root, "/results/credentials/*credential");
it = list.iterator();
while(it.hasNext()) {
Element e = (Element) it.next();
String domain = e.getAttributeValue("domain");
Credential c = store.getCredential(domain);
if(c==null) {
c = new Credential(domain, null);
store.addCredential(c);
}
c.setCredential(this.decryptCredential(e.getAttributeValue("c")));
}
}