From: AsamK Date: Mon, 16 Oct 2023 15:43:03 +0000 (+0200) Subject: Do a full recipients refresh every day X-Git-Tag: v0.12.3~8 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/dd3326f03897839fe10103bf429c0ac77105bd0c Do a full recipients refresh every day --- diff --git a/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java b/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java index 133aab5b..a27aca64 100644 --- a/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java +++ b/lib/src/main/java/org/asamk/signal/manager/helper/RecipientHelper.java @@ -214,6 +214,7 @@ public class RecipientHelper { }}; account.getCdsiStore().updateAfterFullCdsQuery(fullNumbers, seenNumbers); account.setCdsiToken(newToken); + account.setLastRecipientsRefresh(System.currentTimeMillis()); } }); } catch (CdsiInvalidTokenException e) { diff --git a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java index 189e4fe9..841fd791 100644 --- a/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java +++ b/lib/src/main/java/org/asamk/signal/manager/internal/ManagerImpl.java @@ -115,6 +115,7 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantLock; import java.util.function.Function; @@ -215,6 +216,18 @@ public class ManagerImpl implements Manager { public void checkAccountState() throws IOException { context.getAccountHelper().checkAccountState(); + final var lastRecipientsRefresh = account.getLastRecipientsRefresh(); + if (lastRecipientsRefresh == null + || lastRecipientsRefresh < System.currentTimeMillis() - TimeUnit.DAYS.toMillis(1)) { + try { + context.getRecipientHelper().refreshUsers(); + } catch (Exception e) { + logger.warn("Full CDSI recipients refresh failed, ignoring: {} ({})", + e.getMessage(), + e.getClass().getSimpleName()); + logger.debug("Full CDSI refresh failed", e); + } + } } @Override diff --git a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java index fbfd88f6..a51136a0 100644 --- a/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java +++ b/lib/src/main/java/org/asamk/signal/manager/storage/SignalAccount.java @@ -147,6 +147,8 @@ public class SignalAccount implements Closeable { long.class, 0L); private final KeyValueEntry cdsiToken = new KeyValueEntry<>("cdsi-token", byte[].class); + private final KeyValueEntry lastRecipientsRefresh = new KeyValueEntry<>("last-recipients-refresh", + long.class); private final KeyValueEntry storageManifestVersion = new KeyValueEntry<>("storage-manifest-version", long.class, -1L); @@ -374,6 +376,7 @@ public class SignalAccount implements Closeable { this.storageKey = null; trustSelfIdentity(ServiceIdType.ACI); trustSelfIdentity(ServiceIdType.PNI); + getKeyValueStore().storeEntry(lastRecipientsRefresh, null); } public void finishRegistration( @@ -406,6 +409,7 @@ public class SignalAccount implements Closeable { getRecipientTrustedResolver().resolveSelfRecipientTrusted(getSelfRecipientAddress()); trustSelfIdentity(ServiceIdType.ACI); trustSelfIdentity(ServiceIdType.PNI); + getKeyValueStore().storeEntry(lastRecipientsRefresh, null); } public void initDatabase() { @@ -1586,6 +1590,14 @@ public class SignalAccount implements Closeable { getKeyValueStore().storeEntry(cdsiToken, value); } + public Long getLastRecipientsRefresh() { + return getKeyValueStore().getEntry(lastRecipientsRefresh); + } + + public void setLastRecipientsRefresh(final Long value) { + getKeyValueStore().storeEntry(lastRecipientsRefresh, value); + } + public ProfileKey getProfileKey() { return profileKey; }