X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/0f3aa2251962f240818169bc7b8ab98c61f02020..2ccff8f51deff3f16d3af75ea230a095c0d46b0f:/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 31f2d9d6..d16aabe6 100644 --- a/src/main/java/org/asamk/signal/manager/Manager.java +++ b/src/main/java/org/asamk/signal/manager/Manager.java @@ -22,6 +22,8 @@ import org.asamk.signal.storage.SignalAccount; import org.asamk.signal.storage.contacts.ContactInfo; import org.asamk.signal.storage.groups.GroupInfo; import org.asamk.signal.storage.groups.JsonGroupStore; +import org.asamk.signal.storage.profiles.SignalProfile; +import org.asamk.signal.storage.profiles.SignalProfileEntry; import org.asamk.signal.storage.protocol.JsonIdentityKeyStore; import org.asamk.signal.util.IOUtils; import org.asamk.signal.util.Util; @@ -442,6 +444,18 @@ public class Manager implements Closeable { } private SignalProfile getRecipientProfile(SignalServiceAddress address, Optional unidentifiedAccess, ProfileKey profileKey) throws IOException { + SignalProfileEntry profileEntry = account.getProfileStore().getProfile(address); + long now = new Date().getTime(); + // Profiles are cache for 24h before retrieving them again + if (profileEntry == null || profileEntry.getProfile() == null || now - profileEntry.getLastUpdateTimestamp() > 24 * 60 * 60 * 1000) { + SignalProfile profile = retrieveRecipientProfile(address, unidentifiedAccess, profileKey); + profileEntry = new SignalProfileEntry(profileKey, now, profile); + account.getProfileStore().updateProfile(address, profileEntry); + } + return profileEntry.getProfile(); + } + + private SignalProfile retrieveRecipientProfile(SignalServiceAddress address, Optional unidentifiedAccess, ProfileKey profileKey) throws IOException { final SignalServiceProfile encryptedProfile = getEncryptedRecipientProfile(address, unidentifiedAccess); File avatarFile = null;