mirror of
https://github.com/neon443/ShhShell.git
synced 2026-03-11 21:36:17 +00:00
implement scrollback saving
implement a scrollback cap of 10MiB add prettyscrollback() to return kib, mib etc tried a different resuming thingy
This commit is contained in:
@@ -15,6 +15,7 @@ class SSHHandler: @unchecked Sendable, ObservableObject {
|
||||
private var channel: ssh_channel?
|
||||
|
||||
var scrollback: [String] = []
|
||||
var scrollbackSize = 0.0
|
||||
|
||||
@Published var title: String = ""
|
||||
@Published var state: SSHState = .idle
|
||||
@@ -133,6 +134,9 @@ class SSHHandler: @unchecked Sendable, ObservableObject {
|
||||
withAnimation { self.testSuceeded = nil }
|
||||
}
|
||||
|
||||
scrollback = []
|
||||
scrollbackSize = 0
|
||||
|
||||
//send eof if open
|
||||
if ssh_channel_is_open(channel) == 1 {
|
||||
ssh_channel_send_eof(channel)
|
||||
@@ -396,7 +400,12 @@ class SSHHandler: @unchecked Sendable, ObservableObject {
|
||||
// print(String(data: Data(bytes: buffer, count: Int(nbytes)), encoding: .utf8)!)
|
||||
#endif
|
||||
Task { @MainActor in
|
||||
scrollback.append(string)
|
||||
scrollback.append(string)
|
||||
if scrollbackSize/1024/1024 > 10 {
|
||||
scrollback.remove(at: 0)
|
||||
} else {
|
||||
scrollbackSize += Double(string.lengthOfBytes(using: .utf8))
|
||||
}
|
||||
}
|
||||
return string
|
||||
}
|
||||
@@ -429,6 +438,16 @@ class SSHHandler: @unchecked Sendable, ObservableObject {
|
||||
// print("resized tty to \(toRows)rows and \(toCols)cols")
|
||||
}
|
||||
|
||||
func prettyScrollbackSize() -> String {
|
||||
if (scrollbackSize/1024/1024) > 1 {
|
||||
return "\(scrollbackSize/1024/1024) MiB scrollback"
|
||||
} else if scrollbackSize/1024 > 1 {
|
||||
return "\(scrollbackSize/1024) KiB scrollback"
|
||||
} else {
|
||||
return "\(scrollbackSize) B scrollback"
|
||||
}
|
||||
}
|
||||
|
||||
private func logSshGetError() {
|
||||
guard var session = self.session else { return }
|
||||
logger.critical("\(String(cString: ssh_get_error(&session)))")
|
||||
|
||||
Reference in New Issue
Block a user