diff --git a/ShhShell/Views/Terminal/SSHTerminalDelegate.swift b/ShhShell/Views/Terminal/SSHTerminalDelegate.swift index a85770a..aca17a6 100644 --- a/ShhShell/Views/Terminal/SSHTerminalDelegate.swift +++ b/ShhShell/Views/Terminal/SSHTerminalDelegate.swift @@ -19,33 +19,24 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina self.handler = handler self.hostsManager = hostsManager + print(getTerminal().backgroundColor.colorCodable) + print(getTerminal().foregroundColor.colorCodable) + applySelectedTheme() - DispatchQueue.main.async { - Task { - guard let handler = self.handler else { return } - while handler.connected { - if let read = handler.readFromChannel() { - await MainActor.run { - self.feed(text: read) - } - } else { - try? await Task.sleep(nanoseconds: 10_000_000) //10ms - } - } - handler.disconnect() - } + Task { + await startFeedLoop() } } - func restoreScrollback() { + func restoreScrollback() async { guard let scrollback = handler?.scrollback else { return } guard !scrollback.isEmpty else { return } - DispatchQueue.main.asyncAfter(deadline: .now()+0.01) { + try? await Task.sleep(nanoseconds: 10_000_000) + await MainActor.run { self.getTerminal().resetToInitialState() for line in scrollback { - print("scrollbak \(line)") self.feed(text: line) } self.setNeedsLayout() @@ -53,6 +44,20 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina } } + func startFeedLoop() async { + guard let handler else { return } + while handler.connected { + if let read = handler.readFromChannel() { + await MainActor.run { + self.feed(text: read) + } + } else { + try? await Task.sleep(nanoseconds: 10_000_000) //10ms + } + } + handler.disconnect() + } + func applySelectedTheme() { guard let hostsManager else { return } applyTheme(hostsManager.selectedTheme) diff --git a/ShhShell/Views/Terminal/TerminalController.swift b/ShhShell/Views/Terminal/TerminalController.swift index d43479c..d9fe7b4 100644 --- a/ShhShell/Views/Terminal/TerminalController.swift +++ b/ShhShell/Views/Terminal/TerminalController.swift @@ -19,6 +19,9 @@ struct TerminalController: UIViewRepresentable { func makeUIView(context: Context) -> TerminalView { if let sessionID = handler.sessionID { if let existing = container.sessions[sessionID] { + Task { + await existing.terminalView.restoreScrollback() + } return existing.terminalView } }