Skip to content

Commit 9ea8513

Browse files
committed
Fix settings in app
1 parent 48bd3ae commit 9ea8513

File tree

4 files changed

+30
-20
lines changed

4 files changed

+30
-20
lines changed

Copilot for Xcode/App.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import SwiftUI
2+
import XPCShared
23

34
@main
45
struct CopilotForXcodeApp: App {
@@ -7,6 +8,9 @@ struct CopilotForXcodeApp: App {
78
ContentView()
89
.frame(minWidth: 500, minHeight: 700)
910
.preferredColorScheme(.dark)
11+
.onAppear {
12+
UserDefaults.setupDefaultSettings()
13+
}
1014
}
1115
.windowStyle(.hiddenTitleBar)
1216
}

Copilot for Xcode/SettingsView.swift

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import LaunchAgentManager
22
import SwiftUI
33
import XPCShared
44

5-
struct SettingsView: View {
5+
final class Settings: ObservableObject {
66
@AppStorage(SettingsKey.quitXPCServiceOnXcodeAndAppQuit, store: .shared)
77
var quitXPCServiceOnXcodeAndAppQuit: Bool = false
88
@AppStorage(SettingsKey.realtimeSuggestionToggle, store: .shared)
@@ -11,18 +11,24 @@ struct SettingsView: View {
1111
var realtimeSuggestionDebounce: Double = 0.7
1212
@AppStorage(SettingsKey.suggestionPresentationMode, store: .shared)
1313
var suggestionPresentationModeRawValue: Int = 0
14+
init() {}
15+
}
16+
17+
#warning("MUSTDO: Settings are not synced.")
18+
struct SettingsView: View {
19+
@StateObject var settings = Settings()
1420
@State var editingRealtimeSuggestionDebounce: Double = UserDefaults.shared
1521
.value(forKey: SettingsKey.realtimeSuggestionDebounce) as? Double ?? 0.7
16-
22+
1723
var body: some View {
1824
Section {
1925
Form {
20-
Toggle(isOn: $quitXPCServiceOnXcodeAndAppQuit) {
26+
Toggle(isOn: $settings.quitXPCServiceOnXcodeAndAppQuit) {
2127
Text("Quit service when Xcode and host app are terminated")
2228
}
2329
.toggleStyle(.switch)
2430

25-
Picker(selection: $suggestionPresentationModeRawValue) {
31+
Picker(selection: $settings.suggestionPresentationModeRawValue) {
2632
ForEach(PresentationMode.allCases, id: \.rawValue) {
2733
switch $0 {
2834
case .comment:
@@ -34,8 +40,8 @@ struct SettingsView: View {
3440
} label: {
3541
Text("Present suggestions in")
3642
}
37-
38-
Toggle(isOn: $realtimeSuggestionToggle) {
43+
44+
Toggle(isOn: $settings.realtimeSuggestionToggle) {
3945
Text("Real-time suggestion")
4046
}
4147
.toggleStyle(.switch)
@@ -44,7 +50,7 @@ struct SettingsView: View {
4450
Slider(value: $editingRealtimeSuggestionDebounce, in: 0...2, step: 0.1) {
4551
Text("Real-time suggestion fetch debounce")
4652
} onEditingChanged: { _ in
47-
realtimeSuggestionDebounce = editingRealtimeSuggestionDebounce
53+
settings.realtimeSuggestionDebounce = editingRealtimeSuggestionDebounce
4854
}
4955

5056
Text(

Core/Sources/XPCShared/UserDefaults.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@ import Foundation
22

33
public extension UserDefaults {
44
static var shared = UserDefaults(suiteName: "5YKZ4Y3DAW.group.com.intii.CopilotForXcode")!
5+
6+
static func setupDefaultSettings() {
7+
func setDefaultValue<T>(_ value: T, forKey: String) {
8+
let userDefaults = UserDefaults.shared
9+
if userDefaults.value(forKey: forKey) == nil {
10+
userDefaults.set(value, forKey: forKey)
11+
}
12+
}
13+
setDefaultValue(true, forKey: SettingsKey.quitXPCServiceOnXcodeAndAppQuit)
14+
setDefaultValue(false, forKey: SettingsKey.realtimeSuggestionToggle)
15+
setDefaultValue(1 as Double, forKey: SettingsKey.realtimeSuggestionDebounce)
16+
}
517
}
618

719
public enum SettingsKey {

ExtensionService/AppDelegate.swift

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate {
2323
_ = GraphicalUserInterfaceController.shared
2424
// setup real-time suggestion controller
2525
_ = RealtimeSuggestionController.shared
26-
setupDefaultSettings()
26+
UserDefaults.setupDefaultSettings()
2727
setupQuitOnUpdate()
2828
setupQuitOnUserTerminated()
2929
xpcListener = setupXPCListener()
@@ -178,18 +178,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate {
178178
listener.resume()
179179
return (listener, delegate)
180180
}
181-
182-
func setupDefaultSettings() {
183-
func setDefaultValue<T>(_ value: T, forKey: String) {
184-
let userDefaults = UserDefaults.shared
185-
if userDefaults.value(forKey: forKey) == nil {
186-
userDefaults.set(value, forKey: forKey)
187-
}
188-
}
189-
setDefaultValue(true, forKey: SettingsKey.quitXPCServiceOnXcodeAndAppQuit)
190-
setDefaultValue(false, forKey: SettingsKey.realtimeSuggestionToggle)
191-
setDefaultValue(1 as Double, forKey: SettingsKey.realtimeSuggestionDebounce)
192-
}
193181
}
194182

195183
private class UserDefaultsObserver: NSObject {

0 commit comments

Comments
 (0)