From e461aa962f5d129fcaf5c1e7477e3f4a9acc2a69 Mon Sep 17 00:00:00 2001 From: 17ms <79069176+17ms@users.noreply.github.com> Date: Mon, 29 May 2023 01:50:34 +0300 Subject: [PATCH] ctrl+c handler & ascii --- Cargo.toml | 2 +- docs/contego-dark.png | Bin 12216 -> 0 bytes docs/contego-light.png | Bin 11923 -> 0 bytes src/main.rs | 16 ++++++++++++---- src/util.rs | 36 ++++++++++-------------------------- 5 files changed, 23 insertions(+), 31 deletions(-) delete mode 100644 docs/contego-dark.png delete mode 100644 docs/contego-light.png diff --git a/Cargo.toml b/Cargo.toml index cdb424b..51d8ce6 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "contego" -description = "CLI tool for file transfer" +description = "CLI tool for quick file transfers" version = "0.3.0" edition = "2021" diff --git a/docs/contego-dark.png b/docs/contego-dark.png deleted file mode 100644 index d53b3f3326ae6b3144132bce0f7546a8a845559c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12216 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 nW1xNnk`eX)dH# Result<(), Box> { + ascii(); + env_logger::Builder::from_env(Env::default().default_filter_or("info")).init(); let cli = Cli::parse(); @@ -92,7 +94,13 @@ async fn main() -> Result<(), Box> { }; }); - handle_exit(tx).await?; + match signal::ctrl_c().await { + Ok(_) => { + tx.send(()).await?; + info!("Captured Ctrl+C, shutting down"); + } + Err(_) => error!("Failed to listen for a Ctrl+C event"), + }; } Commands::Connect { addr, out, key } => { let client = Client::new(addr, key, out); diff --git a/src/util.rs b/src/util.rs index d847247..062e2a8 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,15 +1,7 @@ -use std::{ - collections::HashMap, - env, - error::Error, - fs, - io::{stdin, Read}, - net::SocketAddr, - path::PathBuf, -}; +use std::{collections::HashMap, env, error::Error, fs, net::SocketAddr, path::PathBuf}; use log::{debug, info}; -use tokio::{fs::File, io::BufWriter, sync::mpsc::Sender}; +use tokio::{fs::File, io::BufWriter}; use crate::crypto; @@ -127,20 +119,12 @@ pub async fn new_file( Ok((BufWriter::new(handle), path)) } -pub async fn handle_exit(tx: Sender<()>) -> Result<(), Box> { - let mut stdin = stdin().lock().bytes(); - - loop { - let k = match stdin.next() { - None => continue, - Some(k) => k?, - }; - - if k == b'q' { - tx.send(()).await?; - break; - } - } - - Ok(()) +pub fn ascii() { + let ascii = " __ + _________ ____ / /____ ____ _____ + / ___/ __ \\/ __ \\/ __/ _ \\/ __ `/ __ \\ +/ /__/ /_/ / / / / /_/ __/ /_/ / /_/ / +\\___/\\____/_/ /_/\\__/\\___/\\__, /\\____/ + /____/ "; + println!("{}\n", ascii); }