Skip to content

Commit b5f91b6

Browse files
committed
Merge branch 'release/0.17.1'
2 parents 2b1a27b + 468ad84 commit b5f91b6

File tree

5 files changed

+58
-11
lines changed

5 files changed

+58
-11
lines changed

Core/Sources/Service/SuggestionPresenter/PresentInWindowSuggestionPresenter.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ struct PresentInWindowSuggestionPresenter {
2828

2929
func presentError(_ error: Error) {
3030
if error is CancellationError { return }
31+
if let urlError = error as? URLError, urlError.code == URLError.cancelled { return }
3132
Task { @MainActor in
3233
let controller = GraphicalUserInterfaceController.shared.suggestionWidget
3334
controller.presentError(error.localizedDescription)

Core/Sources/SuggestionWidget/SuggestionWidgetController.swift

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -275,8 +275,9 @@ public final class SuggestionWidgetController: NSObject {
275275

276276
public extension SuggestionWidgetController {
277277
func suggestCode(fileURL: URL) {
278-
widgetViewModel.isProcessing = false
279278
Task {
279+
markAsProcessing(true)
280+
defer { markAsProcessing(false) }
280281
if let suggestion = await dataSource?.suggestionForFile(at: fileURL) {
281282
suggestionPanelViewModel.content = .suggestion(suggestion)
282283
suggestionPanelViewModel.isPanelDisplayed = true
@@ -285,25 +286,28 @@ public extension SuggestionWidgetController {
285286
}
286287

287288
func discardSuggestion(fileURL: URL) {
288-
widgetViewModel.isProcessing = false
289289
Task {
290290
await updateContentForActiveEditor(fileURL: fileURL)
291291
}
292292
}
293293

294294
func markAsProcessing(_ isProcessing: Bool) {
295-
widgetViewModel.isProcessing = isProcessing
295+
if isProcessing {
296+
widgetViewModel.markIsProcessing()
297+
} else {
298+
widgetViewModel.endIsProcessing()
299+
}
296300
}
297301

298302
func presentError(_ errorDescription: String) {
299303
suggestionPanelViewModel.content = .error(errorDescription)
300304
suggestionPanelViewModel.isPanelDisplayed = true
301-
widgetViewModel.isProcessing = false
302305
}
303306

304307
func presentChatRoom(fileURL: URL) {
305-
widgetViewModel.isProcessing = false
306308
Task {
309+
markAsProcessing(true)
310+
defer { markAsProcessing(false) }
307311
if let chat = await dataSource?.chatForFile(at: fileURL) {
308312
chatWindowViewModel.chat = chat
309313
chatWindowViewModel.isPanelDisplayed = true
@@ -343,15 +347,15 @@ public extension SuggestionWidgetController {
343347
}
344348

345349
func closeChatRoom(fileURL: URL) {
346-
widgetViewModel.isProcessing = false
347350
Task {
348351
await updateContentForActiveEditor(fileURL: fileURL)
349352
}
350353
}
351354

352355
func presentPromptToCode(fileURL: URL) {
353-
widgetViewModel.isProcessing = false
354356
Task {
357+
markAsProcessing(true)
358+
defer { markAsProcessing(false) }
355359
if let provider = await dataSource?.promptToCodeForFile(at: fileURL) {
356360
suggestionPanelViewModel.content = .promptToCode(provider)
357361
suggestionPanelViewModel.isPanelDisplayed = true
@@ -367,7 +371,6 @@ public extension SuggestionWidgetController {
367371
}
368372

369373
func discardPromptToCode(fileURL: URL) {
370-
widgetViewModel.isProcessing = false
371374
Task {
372375
await updateContentForActiveEditor(fileURL: fileURL)
373376
}

Core/Sources/SuggestionWidget/WidgetView.swift

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,40 @@ import SwiftUI
66

77
@MainActor
88
final class WidgetViewModel: ObservableObject {
9-
@Published var isProcessing: Bool
9+
struct IsProcessingCounter {
10+
var expirationDate: TimeInterval
11+
}
12+
13+
private var isProcessingCounters = [IsProcessingCounter]()
14+
private var cleanupIsProcessingCounterTask: Task<Void, Error>?
15+
@Published private(set) var isProcessing: Bool
1016
@Published var currentFileURL: URL?
1117

18+
func markIsProcessing(date: Date = Date()) {
19+
let deadline = date.timeIntervalSince1970 + 20
20+
isProcessingCounters.append(IsProcessingCounter(expirationDate: deadline))
21+
isProcessing = true
22+
23+
cleanupIsProcessingCounterTask?.cancel()
24+
cleanupIsProcessingCounterTask = Task { [weak self] in
25+
try await Task.sleep(nanoseconds: 20 * 1_000_000_000)
26+
try Task.checkCancellation()
27+
Task { @MainActor [weak self] in
28+
guard let self else { return }
29+
isProcessingCounters.removeAll()
30+
isProcessing = false
31+
}
32+
}
33+
}
34+
35+
func endIsProcessing(date: Date = Date()) {
36+
if !isProcessingCounters.isEmpty {
37+
isProcessingCounters.removeFirst()
38+
}
39+
isProcessingCounters.removeAll(where: { $0.expirationDate < date.timeIntervalSince1970 })
40+
isProcessing = !isProcessingCounters.isEmpty
41+
}
42+
1243
init(isProcessing: Bool = false) {
1344
self.isProcessing = isProcessing
1445
}

Version.xcconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
APP_VERSION = 0.17.0
2-
APP_BUILD = 170
1+
APP_VERSION = 0.17.1
2+
APP_BUILD = 171

appcast.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,18 @@
33
<channel>
44
<title>Copilot for Xcode</title>
55

6+
<item>
7+
<title>0.17.1</title>
8+
<pubDate>Wed, 31 May 2023 12:30:21 +0800</pubDate>
9+
<sparkle:version>171</sparkle:version>
10+
<sparkle:shortVersionString>0.17.1</sparkle:shortVersionString>
11+
<sparkle:minimumSystemVersion>12.0</sparkle:minimumSystemVersion>
12+
<sparkle:releaseNotesLink>
13+
https://github.com/intitni/CopilotForXcode/releases/tag/0.17.1
14+
</sparkle:releaseNotesLink>
15+
<enclosure url="https://github.com/intitni/CopilotForXcode/releases/download/0.17.1/Copilot.for.Xcode.app.zip" length="19078871" type="application/octet-stream" sparkle:edSignature="YCA19m2Ct8oM45VQXGWqYDL3OLdAL4dT9ZOJinc2w8VExVy/21ei27x9+qA8/7F/+njC3vpdJ/8K3fu3PYDSDw=="/>
16+
</item>
17+
618
<item>
719
<title>0.17.0</title>
820
<pubDate>Sat, 27 May 2023 15:33:25 +0800</pubDate>

0 commit comments

Comments
 (0)