diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/parts/CalendarPartProvider.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/parts/CalendarPartProvider.kt index 48f6b3f52..672344f7b 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/parts/CalendarPartProvider.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/parts/CalendarPartProvider.kt @@ -122,6 +122,10 @@ class CalendarPartProvider : PartProvider, KoinComponent { from = now, to = endOfDay(now), excludeCalendars = excludedCalendars.toList(), + // No debounce: the ranking stays 0 until the first result arrives, and + // the query is only re-run on a calendar change or every 15 minutes, so + // holding the result back would only delay the part's appearance. + debounceMillis = 0, ).first() .filter { !it.isTask } .sortedBy { it.startTime ?: it.endTime } diff --git a/data/calendar/src/main/java/de/mm20/launcher2/calendar/CalendarRepository.kt b/data/calendar/src/main/java/de/mm20/launcher2/calendar/CalendarRepository.kt index 031681186..9736872bf 100644 --- a/data/calendar/src/main/java/de/mm20/launcher2/calendar/CalendarRepository.kt +++ b/data/calendar/src/main/java/de/mm20/launcher2/calendar/CalendarRepository.kt @@ -31,11 +31,17 @@ import kotlinx.coroutines.supervisorScope import kotlin.time.Duration.Companion.days interface CalendarRepository : SearchableRepository { + /** + * @param debounceMillis how long each result is held back, so bursts of upstream changes + * (plugin or permission updates) cause a single query. [debounce] delays the first result + * too, so callers that must show something immediately pass 0. + */ fun findMany( from: Long = System.currentTimeMillis(), to: Long = from + 14 * 24 * 60 * 60 * 1000L, excludeCalendars: List = emptyList(), excludeAllDayEvents: Boolean = false, + debounceMillis: Long = 500, ): Flow> fun getCalendars(providerId: String? = null): Flow> @@ -94,6 +100,7 @@ internal class CalendarRepositoryImpl( to: Long, excludeCalendars: List, excludeAllDayEvents: Boolean, + debounceMillis: Long, ): Flow> { val hasCalendarPermission = permissionsManager.hasPermission(PermissionGroup.Calendar) val hasTasksPermission = permissionsManager.hasPermission(PermissionGroup.Tasks) @@ -112,17 +119,16 @@ internal class CalendarRepositoryImpl( ) } - emitAll( - queryCalendarEvents( - query = null, - intervalStart = from, - intervalEnd = to, - excludeAllDayEvents = excludeAllDayEvents, - excludeCalendars = excludeCalendars, - providers = providers, - allowNetwork = false, - ).debounce(500) + val events = queryCalendarEvents( + query = null, + intervalStart = from, + intervalEnd = to, + excludeAllDayEvents = excludeAllDayEvents, + excludeCalendars = excludeCalendars, + providers = providers, + allowNetwork = false, ) + emitAll(if (debounceMillis > 0L) events.debounce(debounceMillis) else events) } }