Add flag for silent mode

This commit is contained in:
Vincent Flyson 2019-08-25 11:41:30 -04:00
parent fddc059291
commit 2b96f9a32a
5 changed files with 25 additions and 8 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "monolith" name = "monolith"
version = "2.0.13" version = "2.0.14"
authors = [ authors = [
"Sunshine <sunshine@uberspace.net>", "Sunshine <sunshine@uberspace.net>",
"Mahdi Robatipoor <mahdi.robatipoor@gmail.com>", "Mahdi Robatipoor <mahdi.robatipoor@gmail.com>",

View File

@ -25,6 +25,7 @@ If compared to saving websites with `wget -mpk`, `monolith` embeds all assets as
### Options ### Options
- `-i`: Remove images - `-i`: Remove images
- `-j`: Exclude JavaScript - `-j`: Exclude JavaScript
- `-s`: Silent mode
- `-u`: Specify custom User-Agent - `-u`: Specify custom User-Agent
### License ### License

View File

@ -69,6 +69,7 @@ pub fn walk_and_embed_assets(
opt_no_js: bool, opt_no_js: bool,
opt_no_images: bool, opt_no_images: bool,
opt_user_agent: &str, opt_user_agent: &str,
opt_silent: bool,
) { ) {
match node.data { match node.data {
NodeData::Document => { NodeData::Document => {
@ -79,6 +80,7 @@ pub fn walk_and_embed_assets(
opt_no_js, opt_no_js,
opt_no_images, opt_no_images,
opt_user_agent, opt_user_agent,
opt_silent,
); );
} }
} }
@ -130,6 +132,7 @@ pub fn walk_and_embed_assets(
true, true,
"", "",
opt_user_agent, opt_user_agent,
opt_silent,
).unwrap_or(EMPTY_STRING.clone()); ).unwrap_or(EMPTY_STRING.clone());
attr.value.clear(); attr.value.clear();
attr.value.push_slice(favicon_datauri.as_str()); attr.value.push_slice(favicon_datauri.as_str());
@ -149,6 +152,7 @@ pub fn walk_and_embed_assets(
true, true,
"text/css", "text/css",
opt_user_agent, opt_user_agent,
opt_silent,
).unwrap_or(EMPTY_STRING.clone()); ).unwrap_or(EMPTY_STRING.clone());
attr.value.clear(); attr.value.clear();
attr.value.push_slice(css_datauri.as_str()); attr.value.push_slice(css_datauri.as_str());
@ -185,6 +189,7 @@ pub fn walk_and_embed_assets(
true, true,
"", "",
opt_user_agent, opt_user_agent,
opt_silent,
).unwrap_or(EMPTY_STRING.clone()); ).unwrap_or(EMPTY_STRING.clone());
attr.value.clear(); attr.value.clear();
attr.value.push_slice(img_datauri.as_str()); attr.value.push_slice(img_datauri.as_str());
@ -210,6 +215,7 @@ pub fn walk_and_embed_assets(
true, true,
"", "",
opt_user_agent, opt_user_agent,
opt_silent,
).unwrap_or(EMPTY_STRING.clone()); ).unwrap_or(EMPTY_STRING.clone());
attr.value.clear(); attr.value.clear();
attr.value.push_slice(source_datauri.as_str()); attr.value.push_slice(source_datauri.as_str());
@ -255,6 +261,7 @@ pub fn walk_and_embed_assets(
true, true,
"application/javascript", "application/javascript",
opt_user_agent, opt_user_agent,
opt_silent,
).unwrap_or(EMPTY_STRING.clone()); ).unwrap_or(EMPTY_STRING.clone());
attr.value.clear(); attr.value.clear();
attr.value.push_slice(js_datauri.as_str()); attr.value.push_slice(js_datauri.as_str());
@ -287,6 +294,7 @@ pub fn walk_and_embed_assets(
false, false,
"text/html", "text/html",
opt_user_agent, opt_user_agent,
opt_silent,
).unwrap_or(EMPTY_STRING.clone()); ).unwrap_or(EMPTY_STRING.clone());
let dom = html_to_dom(&iframe_data); let dom = html_to_dom(&iframe_data);
walk_and_embed_assets( walk_and_embed_assets(
@ -295,6 +303,7 @@ pub fn walk_and_embed_assets(
opt_no_js, opt_no_js,
opt_no_images, opt_no_images,
opt_user_agent, opt_user_agent,
opt_silent,
); );
let mut buf: Vec<u8> = Vec::new(); let mut buf: Vec<u8> = Vec::new();
serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap(); serialize(&mut buf, &dom.document, SerializeOpts::default()).unwrap();
@ -324,6 +333,7 @@ pub fn walk_and_embed_assets(
opt_no_js, opt_no_js,
opt_no_images, opt_no_images,
opt_user_agent, opt_user_agent,
opt_silent,
); );
} }
} }

View File

@ -36,6 +36,7 @@ pub fn retrieve_asset(
as_dataurl: bool, as_dataurl: bool,
as_mime: &str, as_mime: &str,
opt_user_agent: &str, opt_user_agent: &str,
opt_silent: bool
) -> Result<String, reqwest::Error> { ) -> Result<String, reqwest::Error> {
if is_data_url(&url).unwrap() { if is_data_url(&url).unwrap() {
Ok(url.to_string()) Ok(url.to_string())
@ -49,10 +50,12 @@ pub fn retrieve_asset(
.send()?; .send()?;
let final_url = response.url().as_str(); let final_url = response.url().as_str();
if url == final_url { if !opt_silent {
eprintln!("[ {} ]", &url); if url == final_url {
} else { eprintln!("[ {} ]", &url);
eprintln!("[ {} -> {} ]", &url, &final_url); } else {
eprintln!("[ {} -> {} ]", &url, &final_url);
}
} }
if as_dataurl { if as_dataurl {

View File

@ -21,19 +21,21 @@ fn main() {
.index(1) .index(1)
.help("URL to download"), .help("URL to download"),
) )
.args_from_usage("-j, --no-js 'Excludes JavaScript'")
.args_from_usage("-i, --no-images 'Removes images'") .args_from_usage("-i, --no-images 'Removes images'")
.args_from_usage("-j, --no-js 'Excludes JavaScript'")
.args_from_usage("-s, --silent 'Suppress verbosity'")
.args_from_usage("-u, --user-agent=[Iceweasel] 'Custom User-Agent string'") .args_from_usage("-u, --user-agent=[Iceweasel] 'Custom User-Agent string'")
.get_matches(); .get_matches();
// Process the command // Process the command
let arg_target = command.value_of("url").unwrap(); let arg_target = command.value_of("url").unwrap();
let opt_no_js = command.is_present("no-js");
let opt_no_images = command.is_present("no-images"); let opt_no_images = command.is_present("no-images");
let opt_no_js = command.is_present("no-js");
let opt_silent = command.is_present("silent");
let opt_user_agent = command.value_of("user-agent").unwrap_or(DEFAULT_USER_AGENT); let opt_user_agent = command.value_of("user-agent").unwrap_or(DEFAULT_USER_AGENT);
if is_valid_url(arg_target) { if is_valid_url(arg_target) {
let data = retrieve_asset(&arg_target, false, "", opt_user_agent).unwrap(); let data = retrieve_asset(&arg_target, false, "", opt_user_agent, opt_silent).unwrap();
let dom = html_to_dom(&data); let dom = html_to_dom(&data);
walk_and_embed_assets( walk_and_embed_assets(
@ -42,6 +44,7 @@ fn main() {
opt_no_js, opt_no_js,
opt_no_images, opt_no_images,
opt_user_agent, opt_user_agent,
opt_silent,
); );
print_dom(&dom.document); print_dom(&dom.document);