Cache identities for contact info update

pull/198/head
M66B 3 years ago
parent c4485d587a
commit bdf4e8bef5

@ -94,6 +94,7 @@ public class ContactInfo {
private static Map<String, Lookup> emailLookup = new ConcurrentHashMap<>();
private static final Map<String, ContactInfo> emailContactInfo = new HashMap<>();
private static final Map<String, Avatar> emailGravatar = new HashMap<>();
private static final Map<Long, List<EntityIdentity>> accountIdentities = new HashMap<>();
private static final ExecutorService executorLookup =
Helper.getBackgroundExecutor(1, "contact");
@ -193,6 +194,12 @@ public class ContactInfo {
});
}
static void clearIdentities() {
synchronized (accountIdentities) {
accountIdentities.clear();
}
}
@NonNull
static ContactInfo[] get(Context context, long account, String folderType, Address[] addresses) {
return get(context, account, folderType, addresses, false);
@ -750,7 +757,14 @@ public class ContactInfo {
// Check if from self
if (type == EntityContact.TYPE_FROM) {
if (message.from != null) {
List<EntityIdentity> identities = db.identity().getSynchronizingIdentities(folder.account);
List<EntityIdentity> identities;
synchronized (accountIdentities) {
if (!accountIdentities.containsKey(folder.account))
accountIdentities.put(folder.account,
db.identity().getSynchronizingIdentities(folder.account));
identities = accountIdentities.get(folder.account);
}
if (identities != null) {
for (Address sender : message.from) {
for (EntityIdentity identity : identities)

@ -990,6 +990,8 @@ public class FragmentIdentity extends FragmentBase {
db.endTransaction();
}
ContactInfo.clearIdentities();
return false;
}
@ -1374,6 +1376,8 @@ public class FragmentIdentity extends FragmentBase {
DB db = DB.getInstance(context);
db.identity().deleteIdentity(id);
ContactInfo.clearIdentities();
return null;
}

Loading…
Cancel
Save