aboutsummaryrefslogtreecommitdiff
path: root/Hotline/macOS/Settings/GeneralSettingsView.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Hotline/macOS/Settings/GeneralSettingsView.swift')
-rw-r--r--Hotline/macOS/Settings/GeneralSettingsView.swift67
1 files changed, 67 insertions, 0 deletions
diff --git a/Hotline/macOS/Settings/GeneralSettingsView.swift b/Hotline/macOS/Settings/GeneralSettingsView.swift
new file mode 100644
index 0000000..6be73aa
--- /dev/null
+++ b/Hotline/macOS/Settings/GeneralSettingsView.swift
@@ -0,0 +1,67 @@
+import SwiftUI
+
+struct GeneralSettingsView: View {
+ @State private var username: String = ""
+ @State private var usernameChanged: Bool = false
+ @State private var showClearHistoryConfirmation: Bool = false
+
+ let saveTimer = Timer.publish(every: 5, on: .main, in: .common).autoconnect()
+
+ var body: some View {
+ @Bindable var preferences = Prefs.shared
+
+ Form {
+ TextField("Your Name", text: $username, prompt: Text("guest"))
+ Toggle("Show Join/Leave in Chat", isOn: $preferences.showJoinLeaveMessages)
+ Toggle("Refuse private messages", isOn: $preferences.refusePrivateMessages)
+ Toggle("Refuse private chat", isOn: $preferences.refusePrivateChat)
+ Toggle("Automatic Response", isOn: $preferences.enableAutomaticMessage)
+ if preferences.enableAutomaticMessage {
+ TextField("", text: $preferences.automaticMessage, prompt: Text("Write a response message"))
+ .lineLimit(2)
+ .multilineTextAlignment(.leading)
+ .frame(maxWidth: .infinity)
+ .onSubmit(of: .text) {
+ preferences.username = self.username
+ }
+ }
+
+ Divider()
+
+ Button(role: .destructive) {
+ showClearHistoryConfirmation = true
+ } label: {
+ Text("Clear Chat History…")
+ }
+ }
+ .padding()
+ .frame(width: 392)
+ .confirmationDialog("Clear chat history?", isPresented: $showClearHistoryConfirmation, titleVisibility: .visible) {
+ Button("Clear Chat History", role: .destructive) {
+ Task {
+ await ChatStore.shared.clearAll()
+ }
+ }
+ Button("Cancel", role: .cancel) {}
+ } message: {
+ Text("This removes all saved chat logs across servers. Active chats will repopulate only with new messages.")
+ }
+ .onAppear {
+ self.username = preferences.username
+ self.usernameChanged = false
+ }
+ .onDisappear {
+ preferences.username = self.username
+ self.usernameChanged = false
+ }
+ .onChange(of: username) { oldValue, newValue in
+ self.usernameChanged = true
+ }
+ .onReceive(saveTimer) { _ in
+ if self.usernameChanged {
+ self.usernameChanged = false
+ preferences.username = self.username
+ }
+ }
+ }
+}