Skip to content

Commit 6654aac

Browse files
committed
Prevent events to be sent to a store rapidly
1 parent 786e19a commit 6654aac

File tree

3 files changed

+17
-27
lines changed

3 files changed

+17
-27
lines changed

Core/Sources/Service/SuggestionCommandHandler/PseudoCommandHandler.swift

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,16 @@ struct PseudoCommandHandler {
5555
presenter.markAsProcessing(true)
5656
defer { presenter.markAsProcessing(false) }
5757

58-
// Check if the current suggestion is still valid.
59-
if filespace.validateSuggestions(
60-
lines: editor.lines,
61-
cursorPosition: editor.cursorPosition
62-
) {
63-
return
64-
} else {
65-
presenter.discardSuggestion(fileURL: filespace.fileURL)
58+
if filespace.presentingSuggestion != nil {
59+
// Check if the current suggestion is still valid.
60+
if filespace.validateSuggestions(
61+
lines: editor.lines,
62+
cursorPosition: editor.cursorPosition
63+
) {
64+
return
65+
} else {
66+
presenter.discardSuggestion(fileURL: filespace.fileURL)
67+
}
6668
}
6769

6870
let snapshot = FilespaceSuggestionSnapshot(

Core/Sources/Service/SuggestionCommandHandler/WindowBaseCommandHandler.swift

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
8080

8181
@WorkspaceActor
8282
private func _presentNextSuggestion(editor: EditorContent) async throws {
83-
presenter.markAsProcessing(true)
84-
defer { presenter.markAsProcessing(false) }
8583
guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL else { return }
8684
let (workspace, filespace) = try await Service.shared.workspacePool
8785
.fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)
@@ -107,8 +105,6 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
107105

108106
@WorkspaceActor
109107
private func _presentPreviousSuggestion(editor: EditorContent) async throws {
110-
presenter.markAsProcessing(true)
111-
defer { presenter.markAsProcessing(false) }
112108
guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL else { return }
113109
let (workspace, filespace) = try await Service.shared.workspacePool
114110
.fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)
@@ -134,8 +130,6 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
134130

135131
@WorkspaceActor
136132
private func _rejectSuggestion(editor: EditorContent) async throws {
137-
presenter.markAsProcessing(true)
138-
defer { presenter.markAsProcessing(false) }
139133
guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL else { return }
140134

141135
let (workspace, _) = try await Service.shared.workspacePool
@@ -146,9 +140,6 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
146140

147141
@WorkspaceActor
148142
func acceptSuggestion(editor: EditorContent) async throws -> UpdatedContent? {
149-
presenter.markAsProcessing(true)
150-
defer { presenter.markAsProcessing(false) }
151-
152143
guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL else { return nil }
153144
let (workspace, _) = try await Service.shared.workspacePool
154145
.fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)
@@ -182,9 +173,6 @@ struct WindowBaseCommandHandler: SuggestionCommandHandler {
182173
}
183174

184175
func acceptPromptToCode(editor: EditorContent) async throws -> UpdatedContent? {
185-
presenter.markAsProcessing(true)
186-
defer { presenter.markAsProcessing(false) }
187-
188176
guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL else { return nil }
189177

190178
let injector = SuggestionInjector()
@@ -363,8 +351,6 @@ extension WindowBaseCommandHandler {
363351
generateDescription: Bool?,
364352
name: String?
365353
) async throws {
366-
presenter.markAsProcessing(true)
367-
defer { presenter.markAsProcessing(false) }
368354
guard let fileURL = XcodeInspector.shared.realtimeActiveDocumentURL else { return }
369355
let (workspace, filespace) = try await Service.shared.workspacePool
370356
.fetchOrCreateWorkspaceAndFilespace(fileURL: fileURL)

Core/Sources/SuggestionWidget/SuggestionWidgetController.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ public final class SuggestionWidgetController: NSObject {
223223
dependency.windows.suggestionPanelWindow = suggestionPanelWindow
224224
dependency.windows.fullscreenDetector = fullscreenDetector
225225
dependency.windows.widgetWindow = widgetWindow
226-
226+
227227
store.send(.startup)
228228
}
229229
}
@@ -240,10 +240,12 @@ public extension SuggestionWidgetController {
240240
}
241241

242242
func markAsProcessing(_ isProcessing: Bool) {
243-
if isProcessing {
244-
store.send(.circularWidget(.markIsProcessing))
245-
} else {
246-
store.send(.circularWidget(.endIsProcessing))
243+
store.withState { state in
244+
if isProcessing, !state.circularWidgetState.isProcessing {
245+
store.send(.circularWidget(.markIsProcessing))
246+
} else if !isProcessing, state.circularWidgetState.isProcessing {
247+
store.send(.circularWidget(.endIsProcessing))
248+
}
247249
}
248250
}
249251

0 commit comments

Comments
 (0)