diff --git a/src/cmd_download.rs b/src/cmd_download.rs index 71b6762..c39bdb2 100644 --- a/src/cmd_download.rs +++ b/src/cmd_download.rs @@ -1,7 +1,7 @@ use std::fs; use std::collections::HashSet; use clap::{ Arg, ArgMatches, SubCommand, App, }; -use url::Url; +use url::{ Url, Host, }; use crate::cmd::{ Command, CommandError, }; use crate::har::*; @@ -81,18 +81,38 @@ impl Command for CommandDownload { } fn _resolve_name(_base: &str, url: &str) -> String { - let ret = String::with_capacity(url.len()); - let url = match Url::parse(url) { + let _url_to_path = _normalize_url_to_path(url); + "".into() +} + +fn _normalize_url_to_path(url: &str) -> Vec { + let mut ret = vec![]; + let parsed_url = match Url::parse(url) { Ok(u) => u, Err(e) => { warn!("Url: {}, parse failed: {}", url, e); - return url.chars() - .filter(|c| (*c >= 'a' && *c <= 'z') - || (*c >= 'A' && *c <= 'Z') - || (*c >= '0' && *c <= '9') - || *c == '_' || *c == '-' - ) - .collect::(); + return vec![url.chars() + .filter(|c| (*c >= 'a' && *c <= 'z') + || (*c >= 'A' && *c <= 'Z') + || (*c >= '0' && *c <= '9') + || *c == '_' || *c == '-' + ) + .collect::()]; }, }; + let host = match parsed_url.host() { + None => "".to_owned(), + Some(h) => match h { + Host::Domain(d) => d.to_owned(), + Host::Ipv4(ipv4) => ipv4.to_string(), + Host::Ipv6(ipv6) => ipv6.to_string(), + }, + }; + ret.push(host); + if let Some(segments) = parsed_url.path_segments() { + for seg in segments { + ret.push(seg.into()); + } + } + ret }