mirror of
https://github.com/neon443/ShhShell.git
synced 2026-03-11 13:26:16 +00:00
Merge branch 'ervert'
# Conflicts: # ShhShell/Views/Terminal/SSHTerminalDelegate.swift
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user