aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorTeddy Wing2017-05-09 01:21:57 +0200
committerTeddy Wing2017-05-09 01:21:57 +0200
commitf0d5da113c59f364ffea3e840a9e871882478051 (patch)
tree47dcfec5a2577bcbf3152cd0c129daa13981233e /src/main.rs
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.
Diffstat (limited to 'src/main.rs')
-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)?;