diff --git a/DynamicIsland/Localizable.xcstrings b/DynamicIsland/Localizable.xcstrings index c00538e..13c3eed 100644 --- a/DynamicIsland/Localizable.xcstrings +++ b/DynamicIsland/Localizable.xcstrings @@ -6607,6 +6607,10 @@ } } }, + "Clear conversation and attachments" : { + "comment" : "A help text for the \"Reset Context\" button in the chat messages view.", + "isCommentAutoGenerated" : true + }, "Clear Data" : { "localizations" : { "fr" : { @@ -20138,6 +20142,10 @@ } } }, + "Reset Context" : { + "comment" : "A button label that resets the conversation context.", + "isCommentAutoGenerated" : true + }, "Reset Live Activities" : { "comment" : "A menu item that resets live activities for a particular app.", "isCommentAutoGenerated" : true, diff --git a/DynamicIsland/managers/ScreenAssistantManager.swift b/DynamicIsland/managers/ScreenAssistantManager.swift index da0a0cd..9bf0c2c 100644 --- a/DynamicIsland/managers/ScreenAssistantManager.swift +++ b/DynamicIsland/managers/ScreenAssistantManager.swift @@ -662,12 +662,14 @@ class ScreenAssistantManager: NSObject, ObservableObject { return } - let task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in + var task: URLSessionDataTask? + task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in DispatchQueue.main.async { guard let self = self else { return } + guard let currentTask = task else { return } // Ensure this callback belongs to the current in-flight request - guard self.activeRequest === task else { return } + guard self.activeRequest === currentTask else { return } self.isLoading = false self.activeRequest = nil @@ -677,7 +679,7 @@ class ScreenAssistantManager: NSObject, ObservableObject { } activeRequest = task - task.resume() + task?.resume() } private func performOpenAIRequest(url: URL, requestBody: [String: Any], apiKey: String) { @@ -696,12 +698,14 @@ class ScreenAssistantManager: NSObject, ObservableObject { return } - let task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in + var task: URLSessionDataTask? + task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in DispatchQueue.main.async { guard let self = self else { return } + guard let currentTask = task else { return } // Ensure this callback belongs to the current in-flight request - guard self.activeRequest === task else { return } + guard self.activeRequest === currentTask else { return } self.isLoading = false self.activeRequest = nil @@ -711,7 +715,7 @@ class ScreenAssistantManager: NSObject, ObservableObject { } activeRequest = task - task.resume() + task?.resume() } private func performClaudeRequest(url: URL, requestBody: [String: Any], apiKey: String) { @@ -731,12 +735,14 @@ class ScreenAssistantManager: NSObject, ObservableObject { return } - let task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in + var task: URLSessionDataTask? + task = URLSession.shared.dataTask(with: request) { [weak self] data, response, error in DispatchQueue.main.async { guard let self = self else { return } + guard let currentTask = task else { return } // Ensure this callback belongs to the current in-flight request - guard self.activeRequest === task else { return } + guard self.activeRequest === currentTask else { return } self.isLoading = false self.activeRequest = nil @@ -746,7 +752,7 @@ class ScreenAssistantManager: NSObject, ObservableObject { } activeRequest = task - task.resume() + task?.resume() } // MARK: - Response Handlers