@@ -1133,20 +1133,16 @@ extension StatusItemController {
11331133 #endif
11341134 guard self . openMenus [ ObjectIdentifier ( menu) ] != nil else { return }
11351135 let refreshAllOnOpen = self . settings. refreshAllProvidersOnMenuOpen
1136- let availableProviders = Set ( self . store. enabledProvidersForBackgroundWork ( ) )
1137- // When "refresh all providers on open" is enabled, consider every enabled provider and refresh
1138- // it regardless of freshness; otherwise keep the conservative stale/missing retry set scoped to
1139- // the providers actually rendered in this menu.
1140- let candidateProviders = refreshAllOnOpen
1141- ? self . store. enabledProvidersForBackgroundWork ( )
1142- : self . delayedRefreshRetryProviders ( for: menu)
1143- let retryProviders = candidateProviders. filter {
1144- availableProviders. contains ( $0) &&
1145- ( refreshAllOnOpen ||
1146- self . store. refreshingProviders. contains ( $0) ||
1147- self . store. isStale ( provider: $0) ||
1148- self . store. snapshot ( for: $0) == nil )
1149- }
1136+ let enabledProviders = self . store. enabledProvidersForBackgroundWork ( )
1137+ let visibleProviders = self . delayedRefreshRetryProviders ( for: menu)
1138+ let plan = MenuOpenRefreshPlan . resolve ( . init(
1139+ refreshAllOnOpen: refreshAllOnOpen,
1140+ enabledProviders: enabledProviders,
1141+ visibleProviders: visibleProviders,
1142+ refreshingProviders: self . store. refreshingProviders,
1143+ staleProviders: Set ( visibleProviders. filter { self . store. isStale ( provider: $0) } ) ,
1144+ missingProviders: Set ( visibleProviders. filter { self . store. snapshot ( for: $0) == nil } ) ) )
1145+ let retryProviders = plan. providers
11501146 guard !retryProviders. isEmpty else {
11511147 self . clearSatisfiedDeferredMenuInteractionRefreshes (
11521148 for: self . delayedRefreshRetryProviders ( for: menu) )
@@ -1162,7 +1158,7 @@ extension StatusItemController {
11621158 }
11631159 self . deferMenuInteractionRefreshIfNeeded ( providers: retryProviders)
11641160 await ProviderInteractionContext . $current. withValue ( . background) {
1165- if refreshAllOnOpen {
1161+ if plan . scheduling == . concurrent {
11661162 // Refresh concurrently so one slow provider doesn't delay the rest, mirroring the
11671163 // periodic refresh in `UsageStore.runRefresh`. `coalesceIfRefreshing` makes each call
11681164 // wait for any in-flight refresh (e.g. a manual refresh) instead of overriding it.
0 commit comments