Skip to content

Commit 0de5b6a

Browse files
committed
Support selecting suggestion provider from extensions
1 parent 9aece43 commit 0de5b6a

2 files changed

Lines changed: 49 additions & 2 deletions

File tree

Core/Sources/HostApp/FeatureSettings/SuggestionSettingsView.swift

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import Client
12
import Preferences
23
import SharedUIComponents
34
import SwiftUI
5+
import XPCShared
46

57
#if canImport(ProHostApp)
68
import ProHostApp
@@ -30,7 +32,45 @@ struct SuggestionSettingsView: View {
3032
var acceptSuggestionWithTab
3133
@AppStorage(\.isSuggestionSenseEnabled)
3234
var isSuggestionSenseEnabled
33-
init() {}
35+
36+
var refreshExtensionSuggestionFeatureProvidersTask: Task<Void, Never>?
37+
38+
@MainActor
39+
@Published var extensionSuggestionFeatureProviders = [ExtensionSuggestionFeatureProvider]()
40+
41+
init() {
42+
Task { @MainActor in
43+
refreshExtensionSuggestionFeatureProviders()
44+
}
45+
refreshExtensionSuggestionFeatureProvidersTask = Task { [weak self] in
46+
let sequence = await NotificationCenter.default
47+
.notifications(named: NSApplication.didBecomeActiveNotification)
48+
for await _ in sequence {
49+
guard let self else { return }
50+
await MainActor.run {
51+
self.refreshExtensionSuggestionFeatureProviders()
52+
}
53+
}
54+
}
55+
}
56+
57+
struct ExtensionSuggestionFeatureProvider: Identifiable {
58+
var id: String { bundleIdentifier }
59+
var name: String
60+
var bundleIdentifier: String
61+
}
62+
63+
@MainActor
64+
func refreshExtensionSuggestionFeatureProviders() {
65+
guard let service = try? getService() else { return }
66+
Task { @MainActor in
67+
let services = try await service
68+
.send(requestBody: ExtensionServiceRequests.GetExtensionSuggestionServices())
69+
extensionSuggestionFeatureProviders = services.map {
70+
.init(name: $0.name, bundleIdentifier: $0.bundleIdentifier)
71+
}
72+
}
73+
}
3474
}
3575

3676
@StateObject var settings = Settings()
@@ -61,6 +101,13 @@ struct SuggestionSettingsView: View {
61101
Text("Codeium").tag(SuggestionFeatureProvider.builtIn($0))
62102
}
63103
}
104+
105+
ForEach(settings.extensionSuggestionFeatureProviders, id: \.id) {
106+
Text($0.name).tag(SuggestionFeatureProvider.extension(
107+
name: $0.name,
108+
bundleIdentifier: $0.bundleIdentifier
109+
))
110+
}
64111
} label: {
65112
Text("Feature Provider")
66113
}

Pro

Submodule Pro updated from 1398fd7 to 359d59c

0 commit comments

Comments
 (0)