Skip to content

Commit 3404070

Browse files
committed
Pre-release 0.27.92
1 parent a9ad824 commit 3404070

File tree

24 files changed

+310
-66
lines changed

24 files changed

+310
-66
lines changed

Copilot for Xcode.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Core/Package.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ let package = Package(
5050
// quick hack to support custom UserDefaults
5151
// https://github.com/sindresorhus/KeyboardShortcuts
5252
.package(url: "https://github.com/devm33/KeyboardShortcuts", branch: "main"),
53-
.package(url: "https://github.com/devm33/CGEventOverride", from: "1.2.1"),
53+
.package(url: "https://github.com/devm33/CGEventOverride", branch: "devm33/fix-stale-AXIsProcessTrusted"),
5454
.package(url: "https://github.com/devm33/Highlightr", branch: "master"),
5555
],
5656
targets: [
@@ -83,6 +83,7 @@ let package = Package(
8383
.product(name: "UserDefaultsObserver", package: "Tool"),
8484
.product(name: "AppMonitoring", package: "Tool"),
8585
.product(name: "SuggestionBasic", package: "Tool"),
86+
.product(name: "Status", package: "Tool"),
8687
.product(name: "ChatTab", package: "Tool"),
8788
.product(name: "Logger", package: "Tool"),
8889
.product(name: "ChatAPIService", package: "Tool"),

Core/Sources/HostApp/General.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import Client
22
import ComposableArchitecture
33
import Foundation
44
import LaunchAgentManager
5+
import Status
56
import SwiftUI
67
import XPCShared
78
import Logger
@@ -11,7 +12,7 @@ struct General {
1112
@ObservableState
1213
struct State: Equatable {
1314
var xpcServiceVersion: String?
14-
var isAccessibilityPermissionGranted: Bool?
15+
var isAccessibilityPermissionGranted: ObservedAXStatus = .unknown
1516
var isReloading = false
1617
}
1718

@@ -20,7 +21,7 @@ struct General {
2021
case setupLaunchAgentIfNeeded
2122
case openExtensionManager
2223
case reloadStatus
23-
case finishReloading(xpcServiceVersion: String, permissionGranted: Bool)
24+
case finishReloading(xpcServiceVersion: String, permissionGranted: ObservedAXStatus)
2425
case failedReloading
2526
case retryReloading
2627
}
@@ -35,7 +36,7 @@ struct General {
3536
case .appear:
3637
return .run { send in
3738
await send(.setupLaunchAgentIfNeeded)
38-
for await _ in DistributedNotificationCenter.default().notifications(named: NSNotification.Name("com.apple.accessibility.api")) {
39+
for await _ in DistributedNotificationCenter.default().notifications(named: .serviceStatusDidChange) {
3940
await send(.reloadStatus)
4041
}
4142
}

Core/Sources/HostApp/GeneralSettings/CopilotConnectionView.swift

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,6 @@
11
import ComposableArchitecture
22
import SwiftUI
33

4-
struct ActivityIndicatorView: NSViewRepresentable {
5-
func makeNSView(context _: Context) -> NSProgressIndicator {
6-
let progressIndicator = NSProgressIndicator()
7-
progressIndicator.style = .spinning
8-
progressIndicator.controlSize = .small
9-
progressIndicator.startAnimation(nil)
10-
return progressIndicator
11-
}
12-
13-
func updateNSView(_: NSProgressIndicator, context _: Context) {
14-
// No-op
15-
}
16-
}
17-
184
struct CopilotConnectionView: View {
195
@AppStorage("username") var username: String = ""
206
@Environment(\.toast) var toast
@@ -38,6 +24,9 @@ struct CopilotConnectionView: View {
3824
title: "GitHub Account Status Permissions",
3925
subtitle: "GitHub Connection: \(viewModel.status?.description ?? "Loading...")"
4026
) {
27+
if viewModel.isRunningAction || waitingForSignIn {
28+
ProgressView().controlSize(.small)
29+
}
4130
Button("Refresh Connection") {
4231
viewModel.checkStatus()
4332
}
@@ -72,9 +61,6 @@ struct CopilotConnectionView: View {
7261
viewModel.isSignInAlertPresented = false
7362
}
7463
}
75-
if viewModel.isRunningAction || waitingForSignIn {
76-
ActivityIndicatorView()
77-
}
7864
}
7965
}
8066

Core/Sources/HostApp/GeneralSettings/GeneralSettingsView.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,14 @@ struct GeneralSettingsView: View {
99
let store: StoreOf<General>
1010

1111
var accessibilityPermissionSubtitle: String {
12-
guard let granted = store.isAccessibilityPermissionGranted else { return "Loading..." }
13-
return granted ? "Granted" : "Not Granted. Required to run. Click to open System Preferences."
12+
switch store.isAccessibilityPermissionGranted {
13+
case .granted:
14+
return "Granted"
15+
case .notGranted:
16+
return "Not Granted. Required to run. Click to open System Preferences."
17+
case .unknown:
18+
return ""
19+
}
1420
}
1521

1622
var body: some View {

Core/Sources/Service/RealtimeSuggestionController.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import Combine
66
import Foundation
77
import Logger
88
import Preferences
9+
import Status
910
import QuartzCore
1011
import Workspace
1112
import XcodeInspector
@@ -124,10 +125,12 @@ public actor RealtimeSuggestionController {
124125
do {
125126
try await XcodeInspector.shared.safe.latestActiveXcode?
126127
.triggerCopilotCommand(name: "Sync Text Settings")
128+
await Status.shared.updateExtensionStatus(.succeeded)
127129
} catch {
128130
if filespace.codeMetadata.uti?.isEmpty ?? true {
129131
filespace.codeMetadata.uti = nil
130132
}
133+
await Status.shared.updateExtensionStatus(.failed)
131134
}
132135
}
133136
}

Core/Sources/Service/Service.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public final class Service {
3232
let globalShortcutManager: GlobalShortcutManager
3333
let keyBindingManager: KeyBindingManager
3434
let xcodeThemeController: XcodeThemeController = .init()
35+
public var markAsProcessing: (Bool) -> Void = { _ in }
3536

3637
@Dependency(\.toast) var toast
3738
var cancellable = Set<AnyCancellable>()

Core/Sources/Service/SuggestionPresenter/PresentInWindowSuggestionPresenter.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ struct PresentInWindowSuggestionPresenter {
3030
Task { @MainActor in
3131
let controller = Service.shared.guiController.widgetController
3232
controller.markAsProcessing(isProcessing)
33+
Service.shared.markAsProcessing(isProcessing)
3334
}
3435
}
3536

Core/Sources/Service/XPCService.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import GitHubCopilotService
44
import LanguageServerProtocol
55
import Logger
66
import Preferences
7+
import Status
78
import XPCShared
89

910
public class XPCService: NSObject, XPCServiceProtocol {
@@ -16,8 +17,10 @@ public class XPCService: NSObject, XPCServiceProtocol {
1617
)
1718
}
1819

19-
public func getXPCServiceAccessibilityPermission(withReply reply: @escaping (Bool) -> Void) {
20-
reply(AXIsProcessTrusted())
20+
public func getXPCServiceAccessibilityPermission(withReply reply: @escaping (ObservedAXStatus) -> Void) {
21+
Task {
22+
reply(await Status.shared.getAXStatus())
23+
}
2124
}
2225

2326
// MARK: - Suggestion

ExtensionService/AppDelegate+Menu.swift

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import AppKit
22
import Foundation
33
import Preferences
4+
import Status
45
import SuggestionBasic
56
import XcodeInspector
67
import Logger
@@ -14,10 +15,6 @@ extension AppDelegate {
1415
.init("xcodeInspectorDebugMenu")
1516
}
1617

17-
fileprivate var accessibilityAPIPermissionMenuItemIdentifier: NSUserInterfaceItemIdentifier {
18-
.init("accessibilityAPIPermissionMenuItem")
19-
}
20-
2118
fileprivate var sourceEditorDebugMenu: NSUserInterfaceItemIdentifier {
2219
.init("sourceEditorDebugMenu")
2320
}
@@ -72,12 +69,12 @@ extension AppDelegate {
7269
xcodeInspectorDebug.submenu = xcodeInspectorDebugMenu
7370
xcodeInspectorDebug.isHidden = false
7471

75-
let accessibilityAPIPermission = NSMenuItem(
76-
title: "Accessibility Permission: N/A",
77-
action: nil,
72+
statusMenuItem = NSMenuItem(
73+
title: "",
74+
action: #selector(openStatusLink),
7875
keyEquivalent: ""
7976
)
80-
accessibilityAPIPermission.identifier = accessibilityAPIPermissionMenuItemIdentifier
77+
statusMenuItem.isHidden = true
8178

8279
let quitItem = NSMenuItem(
8380
title: "Quit",
@@ -126,7 +123,7 @@ extension AppDelegate {
126123
statusBarMenu.addItem(toggleIgnoreLanguage)
127124
statusBarMenu.addItem(.separator())
128125
statusBarMenu.addItem(copilotStatus)
129-
statusBarMenu.addItem(accessibilityAPIPermission)
126+
statusBarMenu.addItem(statusMenuItem)
130127
statusBarMenu.addItem(.separator())
131128
statusBarMenu.addItem(openDocs)
132129
statusBarMenu.addItem(openForum)
@@ -160,22 +157,14 @@ extension AppDelegate: NSMenuDelegate {
160157
item.identifier == toggleIgnoreLanguageMenuItemIdentifier
161158
}) {
162159
if let lang = DisabledLanguageList.shared.activeDocumentLanguage {
163-
toggleLanguage.title = "\(DisabledLanguageList.shared.isEnabled(lang) ? "Disable" : "Enable") Completions For \(lang.rawValue)"
160+
toggleLanguage.title = "\(DisabledLanguageList.shared.isEnabled(lang) ? "Disable" : "Enable") Completions for \(lang.rawValue)"
164161
toggleLanguage.action = #selector(toggleIgnoreLanguage)
165162
} else {
166163
toggleLanguage.title = "No Active Document"
167164
toggleLanguage.action = nil
168165
}
169166
}
170167

171-
if let accessibilityAPIPermission = menu.items.first(where: { item in
172-
item.identifier == accessibilityAPIPermissionMenuItemIdentifier
173-
}) {
174-
AXIsProcessTrusted()
175-
accessibilityAPIPermission.title =
176-
"Accessibility Permission: \(AXIsProcessTrusted() ? "Granted" : "Not Granted")"
177-
}
178-
179168
statusChecker.updateStatusInBackground(notify: { (status: String, isOk: Bool) in
180169
if let statusItem = menu.items.first(where: { item in
181170
item.identifier == self.copilotStatusMenuItemIdentifier
@@ -321,6 +310,15 @@ private extension AppDelegate {
321310
}
322311
}
323312
}
313+
314+
@objc func openStatusLink() {
315+
Task {
316+
let status = await Status.shared.getStatus()
317+
if let s = status.url, let url = URL(string: s) {
318+
NSWorkspace.shared.open(url)
319+
}
320+
}
321+
}
324322
}
325323

326324
private extension NSMenuItem {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy