Use fresh implicit sessions and raw live terminal output
This commit is contained in:
+7
-14
@@ -80,7 +80,7 @@ async fn main() -> Result<()> {
|
||||
return run_update(&config);
|
||||
}
|
||||
let server = args.server.unwrap_or(config.server);
|
||||
let session = select_session(args.session.as_deref(), args.new, &config.default_session);
|
||||
let session = select_session(args.session.as_deref(), args.new);
|
||||
let mode = if args.view_only || config.view_only {
|
||||
"view-only"
|
||||
} else {
|
||||
@@ -288,14 +288,11 @@ fn log_debug(verbose: u8, level: u8, message: &str) {
|
||||
}
|
||||
}
|
||||
|
||||
fn select_session(requested: Option<&str>, force_new: bool, configured_default: &str) -> String {
|
||||
fn select_session(requested: Option<&str>, _force_new: bool) -> String {
|
||||
if let Some(session) = requested {
|
||||
return session.to_string();
|
||||
}
|
||||
if force_new || configured_default == "new" || configured_default.is_empty() {
|
||||
return unique_session_name();
|
||||
}
|
||||
configured_default.to_string()
|
||||
unique_session_name()
|
||||
}
|
||||
|
||||
fn unique_session_name() -> String {
|
||||
@@ -342,14 +339,10 @@ fn ssh_bootstrap(
|
||||
.arg(ssh_auth_command)
|
||||
.arg("--protocol")
|
||||
.arg("1")
|
||||
.arg("--nonce")
|
||||
.arg(nonce_b64)
|
||||
.arg("--session")
|
||||
.arg(session)
|
||||
.arg("--mode")
|
||||
.arg(mode)
|
||||
.arg("--size")
|
||||
.arg(size)
|
||||
.arg(format!("--nonce={nonce_b64}"))
|
||||
.arg(format!("--session={session}"))
|
||||
.arg(format!("--mode={mode}"))
|
||||
.arg(format!("--size={size}"))
|
||||
.output()
|
||||
.context("run ssh dosh-auth")?;
|
||||
if !output.status.success() {
|
||||
|
||||
+3
-11
@@ -638,20 +638,12 @@ async fn broadcast_output(
|
||||
for (client_id, client) in session.clients.iter_mut() {
|
||||
client.send_seq += 1;
|
||||
let current_screen = session.parser.screen().clone();
|
||||
let mut snapshot = false;
|
||||
let mut bytes = if client.pending.len() >= retransmit_window {
|
||||
let (bytes, snapshot) = if client.pending.len() >= retransmit_window {
|
||||
client.pending.clear();
|
||||
snapshot = true;
|
||||
current_screen.state_formatted()
|
||||
} else if let Some(prev) = &client.last_screen {
|
||||
current_screen.state_diff(prev)
|
||||
(current_screen.state_formatted(), true)
|
||||
} else {
|
||||
snapshot = true;
|
||||
current_screen.state_formatted()
|
||||
(output.bytes.clone(), false)
|
||||
};
|
||||
if bytes.is_empty() {
|
||||
bytes = output.bytes.clone();
|
||||
}
|
||||
let frame = Frame {
|
||||
session: output.session.clone(),
|
||||
output_seq,
|
||||
|
||||
Reference in New Issue
Block a user