cursed broken code for links on genhtml
This commit is contained in:
parent
aadb338d75
commit
f67a9ebc3b
7
Cargo.lock
generated
7
Cargo.lock
generated
|
@ -616,6 +616,7 @@ dependencies = [
|
|||
"taglib",
|
||||
"tempfile",
|
||||
"thiserror",
|
||||
"urlencoding",
|
||||
"walkdir",
|
||||
]
|
||||
|
||||
|
@ -959,6 +960,12 @@ version = "0.2.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c1e5fa573d8ac5f1a856f8d7be41d390ee973daf97c806b2c1a465e4e1406e68"
|
||||
|
||||
[[package]]
|
||||
name = "urlencoding"
|
||||
version = "2.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9"
|
||||
|
||||
[[package]]
|
||||
name = "utf8-width"
|
||||
version = "0.1.6"
|
||||
|
|
|
@ -38,6 +38,8 @@ taglib = { path = "./modules/taglib", optional = true }
|
|||
|
||||
# for genhtml command
|
||||
html-escape = "0.2.11"
|
||||
urlencoding = "2.1.2"
|
||||
|
||||
|
||||
# error handling
|
||||
thiserror = "1.0"
|
||||
|
|
|
@ -38,6 +38,8 @@ pub struct GenHTMLCommandArgs {
|
|||
pub title: String,
|
||||
#[clap(long, default_value = "generated by musicutil")]
|
||||
pub description: String,
|
||||
#[clap(long)]
|
||||
pub link_base: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Args)]
|
||||
|
|
|
@ -4,23 +4,31 @@ use crate::types::File;
|
|||
use crate::utils::formats::get_format_handler;
|
||||
use crate::utils::scan_for_music;
|
||||
use std::cmp::Ordering;
|
||||
use std::ffi::OsStr;
|
||||
use std::io::Write;
|
||||
|
||||
use html_escape::encode_text;
|
||||
use urlencoding::encode as url_encode;
|
||||
|
||||
fn table_for_files(files: Vec<File>, includes_path: bool) -> String {
|
||||
fn table_for_files(files: Vec<File>, includes_path: bool, link_base: Option<String>) -> String {
|
||||
let mut html_content = String::new();
|
||||
let mut path_head = String::new();
|
||||
if includes_path {
|
||||
path_head.push_str("<th>Path</th>")
|
||||
}
|
||||
|
||||
let mut link_head = String::new();
|
||||
if link_base.is_some() {
|
||||
link_head.push_str("<th>Link</th>")
|
||||
}
|
||||
|
||||
html_content.push_str(
|
||||
format!(
|
||||
"
|
||||
<table class=\"pure-table pure-table-horizontal\">
|
||||
<thead>
|
||||
<tr>
|
||||
{}
|
||||
{}
|
||||
<th>Title</th>
|
||||
<th>Artist</th>
|
||||
|
@ -29,7 +37,7 @@ fn table_for_files(files: Vec<File>, includes_path: bool) -> String {
|
|||
</thead>
|
||||
<tbody>
|
||||
",
|
||||
path_head
|
||||
link_head, path_head
|
||||
)
|
||||
.as_str(),
|
||||
);
|
||||
|
@ -57,17 +65,39 @@ fn table_for_files(files: Vec<File>, includes_path: bool) -> String {
|
|||
|
||||
path_data.push_str(format!("<td>{}</td>", encode_text(&file_directory)).as_str());
|
||||
}
|
||||
|
||||
let mut url_data = String::new();
|
||||
if link_base.is_some() {
|
||||
let mut url = String::new();
|
||||
let link_base_str = link_base.as_ref().unwrap().clone();
|
||||
url.push_str(link_base_str.as_str());
|
||||
url.push('/');
|
||||
|
||||
let file_path = file.join_path_from_source();
|
||||
let file_path: Vec<&OsStr> = file_path.iter().collect();
|
||||
for i in 0..(file_path.len()) {
|
||||
url.push_str(url_encode(file_path.get(i).unwrap().to_str().unwrap()).to_string().as_str());
|
||||
if i != file_path.len()-1 {
|
||||
url.push('/');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
url_data.push_str(format!("<td><a href=\"{}\">🔗</a></td>", url).as_str());
|
||||
}
|
||||
|
||||
html_content.push_str(
|
||||
format!(
|
||||
"
|
||||
<tr class=\"{}\">
|
||||
{}
|
||||
{}
|
||||
<td>{}</td>
|
||||
<td>{}</td>
|
||||
<td>{}</td>
|
||||
</tr>
|
||||
",
|
||||
td_class, path_data, data_title, data_artist, data_format
|
||||
td_class, url_data, path_data, data_title, data_artist, data_format
|
||||
)
|
||||
.as_str(),
|
||||
);
|
||||
|
@ -138,7 +168,7 @@ pub fn genhtml_command(
|
|||
.as_str(),
|
||||
);
|
||||
|
||||
html_content.push_str(&table_for_files(files, true));
|
||||
html_content.push_str(&table_for_files(files, true, genhtml_args.link_base.clone()));
|
||||
html_content.push_str("</body></html>");
|
||||
|
||||
let file_path = std::path::PathBuf::from(genhtml_args.dest.as_str()).join("index.html");
|
||||
|
|
Loading…
Reference in a new issue