Merge branch 'ervert'

# Conflicts:
#	ShhShell/Views/Terminal/SSHTerminalDelegate.swift
This commit is contained in:
neon443
2025-07-04 17:08:26 +01:00
2 changed files with 25 additions and 17 deletions

View File

@@ -19,11 +19,33 @@ 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 }
await startFeedLoop()
}
}
func restoreScrollback() async {
guard let scrollback = handler?.scrollback else { return }
guard !scrollback.isEmpty else { return }
try? await Task.sleep(nanoseconds: 10_000_000)
await MainActor.run {
self.getTerminal().resetToInitialState()
for line in scrollback {
self.feed(text: line)
}
self.setNeedsLayout()
self.setNeedsDisplay()
}
}
func startFeedLoop() async {
guard let handler else { return }
while handler.connected {
if let read = handler.readFromChannel() {
await MainActor.run {
@@ -35,23 +57,6 @@ final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency Termina
}
handler.disconnect()
}
}
}
func restoreScrollback() {
guard let scrollback = handler?.scrollback else { return }
guard !scrollback.isEmpty else { return }
DispatchQueue.main.asyncAfter(deadline: .now()+0.01) {
self.getTerminal().resetToInitialState()
for line in scrollback {
print("scrollbak \(line)")
self.feed(text: line)
}
self.setNeedsLayout()
self.setNeedsDisplay()
}
}
func applySelectedTheme() {
guard let hostsManager else { return }

View File

@@ -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
}
}