From 062e958db54f956ac97fc441b98f77dc52381541 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Fri, 19 Dec 2025 13:46:34 -0500 Subject: [PATCH] Schedule search index optimization to occur overnight. --- .../jobs/OptimizeMessageSearchIndexJob.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMessageSearchIndexJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMessageSearchIndexJob.kt index 56393ec209..43f6a87e9e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMessageSearchIndexJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/OptimizeMessageSearchIndexJob.kt @@ -7,6 +7,9 @@ import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.transport.RetryLaterException import java.lang.Exception +import java.time.LocalDateTime +import java.time.temporal.ChronoUnit +import kotlin.time.Duration.Companion.hours import kotlin.time.Duration.Companion.seconds /** @@ -23,6 +26,19 @@ class OptimizeMessageSearchIndexJob private constructor(parameters: Parameters) fun enqueue() { AppDependencies.jobManager.add(OptimizeMessageSearchIndexJob()) } + + private fun getInitialDelay(): Long { + val now = LocalDateTime.now() + + if (now.hour in 0..3) { + return 0 + } + + val midnight = now.plusDays(1).truncatedTo(ChronoUnit.DAYS) + val scheduledTime = midnight.plusMinutes((0..4.hours.inWholeMinutes).random()) + + return ChronoUnit.MILLIS.between(now, scheduledTime) + } } constructor() : this( @@ -30,6 +46,7 @@ class OptimizeMessageSearchIndexJob private constructor(parameters: Parameters) .setQueue("OptimizeMessageSearchIndexJob") .setMaxAttempts(5) .setMaxInstancesForQueue(2) + .setInitialDelay(getInitialDelay()) .build() )