aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2017-05-09 01:21:57 +0200
committerTeddy Wing2017-05-09 01:21:57 +0200
commitf0d5da113c59f364ffea3e840a9e871882478051 (patch)
tree47dcfec5a2577bcbf3152cd0c129daa13981233e
parent0fe722bbc2e53278dad2bab9268a3cca52e19825 (diff)
downloadHearURL-f0d5da113c59f364ffea3e840a9e871882478051.tar.bz2
open_stream(): Don't terminate the TCP listener on error
Previously, errors would be returned immediately by the `?`/`try!`s. Handle errors directly instead of returning them. Otherwise, the stream listener would terminate, exiting the program, and forcing users to restart it in order to restore functionality.
-rw-r--r--src/main.rs30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/main.rs b/src/main.rs
index 40ff310..fcaca7a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -5,7 +5,6 @@ use getopts::Options;
use url::Url;
use std::env;
-use std::error::Error;
use std::io::{self, Write};
use std::io::prelude::*;
use std::net::TcpListener;
@@ -13,7 +12,7 @@ use std::process::Command;
const DEFAULT_PORT: u16 = 37705;
-fn open_stream(browser: String, port: u16) -> Result<(), Box<Error>> {
+fn open_stream(browser: String, port: u16) -> io::Result<()> {
let listener = TcpListener::bind(
format!("127.0.0.1:{}", port)
)?;
@@ -22,15 +21,24 @@ fn open_stream(browser: String, port: u16) -> Result<(), Box<Error>> {
match stream {
Ok(mut stream) => {
let mut url = String::new();
- stream.read_to_string(&mut url)?;
-
- let url = Url::parse(url.as_str())?;
-
- Command::new("open")
- .arg("-a")
- .arg(&browser)
- .arg(&url.as_str())
- .spawn()?;
+ match stream.read_to_string(&mut url) {
+ Ok(_) => {},
+ Err(e) => writeln!(io::stderr(), "{}", e)?,
+ };
+
+ match Url::parse(url.as_str()) {
+ Ok(url) => {
+ match Command::new("open")
+ .arg("-a")
+ .arg(&browser)
+ .arg(&url.as_str())
+ .spawn() {
+ Ok(_) => {},
+ Err(e) => writeln!(io::stderr(), "{}", e)?,
+ };
+ },
+ Err(e) => writeln!(io::stderr(), "{}", e)?,
+ };
}
Err(e) => {
writeln!(io::stderr(), "{}", e)?;