diff --git a/src/server/browser/browser_unix.rs b/src/browse/browse_unix.rs similarity index 98% rename from src/server/browser/browser_unix.rs rename to src/browse/browse_unix.rs index cafda7e..9975b48 100644 --- a/src/server/browser/browser_unix.rs +++ b/src/browse/browse_unix.rs @@ -8,6 +8,8 @@ use tokio::sync::mpsc; use users; use xdg; +pub async fn browse_url_impl(_url: &String) {} + pub async fn handle_browser_open_impl( messages: mpsc::Sender, ) -> Result<()> { diff --git a/src/server/browser.rs b/src/browse/mod.rs similarity index 56% rename from src/server/browser.rs rename to src/browse/mod.rs index ed05cf4..d8a17d2 100644 --- a/src/server/browser.rs +++ b/src/browse/mod.rs @@ -3,16 +3,20 @@ use anyhow::Result; use tokio::sync::mpsc; #[cfg(target_family = "unix")] -mod browser_unix; +mod browse_unix; #[cfg(target_family = "unix")] -use browser_unix::handle_browser_open_impl; +use browse_unix::{browse_url_impl, handle_browser_open_impl}; + +#[inline] +pub async fn browse_url(url: &String) { + browse_url_impl(url).await +} #[cfg(not(target_family = "unix"))] -async fn handle_browser_open_impl( - messages: mpsc::Sender, -) -> Result<()> { - std::future::pending().await +pub async fn browse_url_impl(url: &String) { + print!("Opening a browser is not supported on this platform\n"); + std::process::exit(1); } #[inline] @@ -21,3 +25,10 @@ pub async fn handle_browser_open( ) -> Result<()> { handle_browser_open_impl(messages).await } + +#[cfg(not(target_family = "unix"))] +async fn handle_browser_open_impl( + messages: mpsc::Sender, +) -> Result<()> { + std::future::pending().await +} diff --git a/src/lib.rs b/src/lib.rs index aaee794..5eaba0d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,8 @@ +mod browse; mod client; mod message; mod server; +pub use browse::browse_url; pub use client::run_client; pub use server::run_server; diff --git a/src/main.rs b/src/main.rs index 7a29d4b..ec31f5c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,15 +3,17 @@ #[tokio::main] async fn main() { let args: Vec = std::env::args().collect(); - if args.len() != 2 { - eprintln!("Usage: fwd "); - std::process::exit(1); - } - let remote = &args[1]; - if remote == "--server" { + if args.len() == 2 && &args[1] == "--server" { fwd::run_server().await; + } else if args.len() == 3 && args[1] == "browse" { + fwd::browse_url(&args[2]).await; } else { - fwd::run_client(remote).await; + if args.len() < 2 { + eprintln!("Usage: fwd "); + std::process::exit(1); + } + + fwd::run_client(&args[1]).await; } } diff --git a/src/server/mod.rs b/src/server/mod.rs index 07b171a..4a369e2 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,10 +1,10 @@ +use crate::browse::handle_browser_open; use crate::message::{Message, MessageReader, MessageWriter}; use anyhow::Result; use log::{error, warn}; use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt, BufReader, BufWriter}; use tokio::sync::mpsc; -mod browser; mod refresh; // We drive writes through an mpsc queue, because we not only handle requests @@ -82,7 +82,7 @@ async fn server_main< tokio::select! { _ = write_driver(&mut receiver, &mut writer) => Ok(()), r = server_loop(&mut reader, &mut sender) => r, - r = browser::handle_browser_open(browse_sender) => r, + r = handle_browser_open(browse_sender) => r, } }