X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/70690fef36589a0526b23c128f409697ef086966..80e15ad54eff0d0552bea1db45208a6b80c19e16:/src/main/java/org/asamk/signal/manager/Manager.java diff --git a/src/main/java/org/asamk/signal/manager/Manager.java b/src/main/java/org/asamk/signal/manager/Manager.java index ec427ce3..b8a0f57b 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -137,6 +137,7 @@ import org.whispersystems.signalservice.internal.push.SignalServiceProtos; import org.whispersystems.signalservice.internal.push.UnsupportedDataMessageException; import org.whispersystems.signalservice.internal.util.DynamicCredentialsProvider; import org.whispersystems.signalservice.internal.util.Hex; +import org.whispersystems.signalservice.internal.util.Util; import java.io.Closeable; import java.io.File; @@ -363,6 +364,11 @@ public class Manager implements Closeable { avatarStore.deleteProfileAvatar(getSelfAddress()); } } + + try { + sendSyncMessage(SignalServiceSyncMessage.forFetchLatest(SignalServiceSyncMessage.FetchType.LOCAL_PROFILE)); + } catch (UntrustedIdentityException ignored) { + } } public void unregister() throws IOException { @@ -409,6 +415,9 @@ public class Manager implements Closeable { } public void setRegistrationLockPin(Optional pin) throws IOException, UnauthenticatedResponseException { + if (!account.isMasterDevice()) { + throw new RuntimeException("Only master device can set a PIN"); + } if (pin.isPresent()) { final MasterKey masterKey = account.getPinMasterKey() != null ? account.getPinMasterKey() @@ -493,6 +502,12 @@ public class Manager implements Closeable { private SignalProfile getRecipientProfile( SignalServiceAddress address + ) { + return getRecipientProfile(address, false); + } + + private SignalProfile getRecipientProfile( + SignalServiceAddress address, boolean force ) { SignalProfileEntry profileEntry = account.getProfileStore().getProfileEntry(address); if (profileEntry == null) { @@ -501,7 +516,9 @@ public class Manager implements Closeable { long now = new Date().getTime(); // Profiles are cached for 24h before retrieving them again if (!profileEntry.isRequestPending() && ( - profileEntry.getProfile() == null || now - profileEntry.getLastUpdateTimestamp() > 24 * 60 * 60 * 1000 + force + || profileEntry.getProfile() == null + || now - profileEntry.getLastUpdateTimestamp() > 24 * 60 * 60 * 1000 )) { profileEntry.setRequestPending(true); final SignalServiceProfile encryptedProfile; @@ -1992,6 +2009,14 @@ public class Manager implements Closeable { account.getStickerStore().updateSticker(sticker); } } + if (syncMessage.getFetchType().isPresent()) { + switch (syncMessage.getFetchType().get()) { + case LOCAL_PROFILE: + getRecipientProfile(getSelfAddress(), true); + case STORAGE_MANIFEST: + // TODO + } + } if (syncMessage.getConfiguration().isPresent()) { // TODO } @@ -2283,8 +2308,20 @@ public class Manager implements Closeable { return account.getContactStore().getContacts(); } - public ContactInfo getContact(String number) { - return account.getContactStore().getContact(Utils.getSignalServiceAddressFromIdentifier(number)); + public String getContactOrProfileName(String number) { + final SignalServiceAddress address = Utils.getSignalServiceAddressFromIdentifier(number); + + final ContactInfo contact = account.getContactStore().getContact(address); + if (contact != null && !Util.isEmpty(contact.name)) { + return contact.name; + } + + final SignalProfileEntry profileEntry = account.getProfileStore().getProfileEntry(address); + if (profileEntry != null && profileEntry.getProfile() != null) { + return profileEntry.getProfile().getName(); + } + + return null; } public GroupInfo getGroup(GroupId groupId) {