diff --git a/ShhShell/SSH/SSHHandler.swift b/ShhShell/SSH/SSHHandler.swift index 300217d..295b9e2 100644 --- a/ShhShell/SSH/SSHHandler.swift +++ b/ShhShell/SSH/SSHHandler.swift @@ -22,7 +22,7 @@ class SSHHandler: @unchecked Sendable, ObservableObject { @Published var testSuceeded: Bool? = nil - @Published var bell: UUID? = nil + @Published var bell: Bool = false @Published var host: Host @@ -150,9 +150,9 @@ class SSHHandler: @unchecked Sendable, ObservableObject { } func ring() { - withAnimation { bell = UUID() } - DispatchQueue.main.asyncAfter(deadline: .now()+1) { - withAnimation { self.bell = nil } + bell = true + DispatchQueue.main.asyncAfter(deadline: .now()+0.2) { + self.bell = false } } @@ -383,7 +383,7 @@ class SSHHandler: @unchecked Sendable, ObservableObject { } var buffer: [CChar] = Array(repeating: 0, count: 1024) - let nbytes = ssh_channel_read(channel, &buffer, UInt32(buffer.count), 0) + let nbytes = ssh_channel_read_nonblocking(channel, &buffer, UInt32(buffer.count), 0) guard nbytes > 0 else { return nil } diff --git a/ShhShell/Views/Terminal/SSHTerminalView.swift b/ShhShell/Views/Terminal/SSHTerminalView.swift index 50fa4d1..fb568e2 100644 --- a/ShhShell/Views/Terminal/SSHTerminalView.swift +++ b/ShhShell/Views/Terminal/SSHTerminalView.swift @@ -34,7 +34,7 @@ final class SSHTerminalView: TerminalView, Sendable, @preconcurrency TerminalVie self.feed(text: read) } } else { - Task {try? await Task.sleep(nanoseconds: 10_000_000) } //10ms + try? await Task.sleep(nanoseconds: 10_000_000) //10ms } } handler.disconnect() @@ -83,7 +83,6 @@ final class SSHTerminalView: TerminalView, Sendable, @preconcurrency TerminalVie } public func bell(source: TerminalView) { - print("bell rung") handler?.ring() } } diff --git a/ShhShell/Views/Terminal/ShellView.swift b/ShhShell/Views/Terminal/ShellView.swift index c53c611..d839fb6 100644 --- a/ShhShell/Views/Terminal/ShellView.swift +++ b/ShhShell/Views/Terminal/ShellView.swift @@ -16,11 +16,6 @@ struct ShellView: View { var body: some View { NavigationStack { ZStack { - if handler.bell != nil { - Text("🔔") - .font(.title) - .transition(.scale) - } if !handler.connected { DialogView(handler: handler, showDialog: !handler.connected) } @@ -50,7 +45,7 @@ struct ShellView: View { .onChange(of: handler.connected) { _ in if !handler.connected { dismiss() } } - .navigationTitle(handler.title) + .navigationTitle(handler.bell ? "🔔" : handler.title) .navigationBarTitleDisplayMode(.inline) } }