Skip to content

Commit 46f3b44

Browse files
committed
Don't cache item images if app isn't frontmost
1 parent aa28264 commit 46f3b44

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

Ice/Main/AppState.swift

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,16 @@ final class AppState: ObservableObject {
104104
}
105105
.store(in: &c)
106106

107+
NSWorkspace.shared.publisher(for: \.frontmostApplication)
108+
.receive(on: DispatchQueue.main)
109+
.sink { [weak self] frontmostApplication in
110+
guard let self else {
111+
return
112+
}
113+
navigationState.isAppFrontmost = frontmostApplication == .current
114+
}
115+
.store(in: &c)
116+
107117
if let settingsWindow {
108118
settingsWindow.publisher(for: \.isVisible)
109119
.receive(on: DispatchQueue.main)
@@ -116,17 +126,20 @@ final class AppState: ObservableObject {
116126
.store(in: &c)
117127
}
118128

119-
navigationState.$isSettingsPresented
120-
.receive(on: DispatchQueue.main)
121-
.sink { isPresented in
122-
guard isPresented else {
123-
return
124-
}
125-
Task {
126-
await self.imageCache.updateCacheWithoutChecks(sections: MenuBarSection.Name.allCases)
127-
}
129+
Publishers.Merge(
130+
navigationState.$isAppFrontmost,
131+
navigationState.$isSettingsPresented
132+
)
133+
.debounce(for: 0.1, scheduler: DispatchQueue.main)
134+
.sink { shouldUpdate in
135+
guard shouldUpdate else {
136+
return
128137
}
129-
.store(in: &c)
138+
Task {
139+
await self.imageCache.updateCacheWithoutChecks(sections: MenuBarSection.Name.allCases)
140+
}
141+
}
142+
.store(in: &c)
130143

131144
menuBarManager.objectWillChange
132145
.sink { [weak self] in

Ice/MenuBar/MenuBarItemImageCache.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,10 @@ class MenuBarItemImageCache: ObservableObject {
207207
}
208208

209209
if !appState.navigationState.isIceBarPresented {
210+
guard appState.navigationState.isAppFrontmost else {
211+
Logger.imageCache.debug("Skipping image cache as Ice Bar not visible, app not frontmost")
212+
return
213+
}
210214
guard appState.navigationState.isSettingsPresented else {
211215
Logger.imageCache.debug("Skipping image cache as Ice Bar not visible, Settings not visible")
212216
return

Ice/Navigation/AppNavigationState.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Combine
88
/// The model for app-wide navigation.
99
@MainActor
1010
final class AppNavigationState: ObservableObject {
11+
@Published var isAppFrontmost = false
1112
@Published var isSettingsPresented = false
1213
@Published var isIceBarPresented = false
1314
@Published var settingsNavigationIdentifier: SettingsNavigationIdentifier = .general

0 commit comments

Comments
 (0)