- if (c.getName().isPresent()) {
- contact.name = c.getName().get();
- }
- if (c.getColor().isPresent()) {
- contact.color = c.getColor().get();
- }
- contactStore.updateContact(contact);
-
- if (c.getAvatar().isPresent()) {
- retrieveContactAvatarAttachment(c.getAvatar().get(), contact.number);
+ DeviceContact c;
+ while ((c = s.read()) != null) {
+ ContactInfo contact = contactStore.getContact(c.getNumber());
+ if (contact == null) {
+ contact = new ContactInfo();
+ contact.number = c.getNumber();
+ }
+ if (c.getName().isPresent()) {
+ contact.name = c.getName().get();
+ }
+ if (c.getColor().isPresent()) {
+ contact.color = c.getColor().get();
+ }
+ if (c.getProfileKey().isPresent()) {
+ contact.profileKey = Base64.encodeBytes(c.getProfileKey().get());
+ }
+ if (c.getVerified().isPresent()) {
+ final VerifiedMessage verifiedMessage = c.getVerified().get();
+ signalProtocolStore.saveIdentity(verifiedMessage.getDestination(), verifiedMessage.getIdentityKey(), TrustLevel.fromVerifiedState(verifiedMessage.getVerified()));
+ }
+ if (c.getExpirationTimer().isPresent()) {
+ ThreadInfo thread = threadStore.getThread(c.getNumber());
+ thread.messageExpirationTime = c.getExpirationTimer().get();
+ threadStore.updateThread(thread);
+ }
+ if (c.isBlocked()) {
+ // TODO store list of blocked numbers
+ }
+ contactStore.updateContact(contact);
+
+ if (c.getAvatar().isPresent()) {
+ retrieveContactAvatarAttachment(c.getAvatar().get(), contact.number);
+ }