91 lines
3.2 KiB
Rust
91 lines
3.2 KiB
Rust
#![allow(dead_code)]
|
|
|
|
use indicatif::{ProgressBar, ProgressStyle};
|
|
use rand::{distributions::Alphanumeric, thread_rng, Rng};
|
|
|
|
pub mod colormap256;
|
|
pub mod names;
|
|
mod quantizer;
|
|
|
|
pub use colormap256::*;
|
|
pub use names::*;
|
|
pub use quantizer::Quantizer;
|
|
|
|
pub(crate) const CHECK_MARK: &str = "✅";
|
|
pub(crate) const CROSS_MARK: &str = "❌";
|
|
pub(crate) const SAFE_CROSS_MARK: &str = "❎";
|
|
pub(crate) const NETWORK_PREFIXES: &[&str] = &[
|
|
"http://", "https://", "ftp://", "ftps://", "sftp://", "rtsp://", "mms://", "mmsh://",
|
|
"rtmp://", "rtmps://", "file://",
|
|
];
|
|
pub(crate) const IMAGE_EXTENSIONS: &[&str] = &["jpg", "jpeg", "png", "gif", "bmp", "tiff", "webp"];
|
|
pub(crate) const VIDEO_EXTENSIONS: &[&str] = &[
|
|
"mp4", "avi", "mkv", "mov", "wmv", "flv", "webm", "mpeg", "mpg", "m4v", "m4p",
|
|
];
|
|
pub(crate) const AUDIO_EXTENSIONS: &[&str] = &["mp3", "wav", "flac", "aac", "ogg", "wma"];
|
|
pub(crate) const STREAM_PROTOCOLS: &[&str] = &[
|
|
"rtsp://", "rtsps://", "rtspu://", "rtmp://", "rtmps://", "hls://", "http://", "https://",
|
|
];
|
|
pub(crate) const PROGRESS_BAR_STYLE_CYAN: &str =
|
|
"{prefix:.cyan.bold} {msg} {human_pos}/{human_len} |{bar}| {elapsed_precise}";
|
|
pub(crate) const PROGRESS_BAR_STYLE_GREEN: &str =
|
|
"{prefix:.green.bold} {msg} {human_pos}/{human_len} |{bar}| {elapsed_precise}";
|
|
pub(crate) const PROGRESS_BAR_STYLE_CYAN_2: &str =
|
|
"{prefix:.cyan.bold} {human_pos}/{human_len} |{bar}| {msg}";
|
|
pub(crate) const PROGRESS_BAR_STYLE_CYAN_3: &str =
|
|
"{prefix:.cyan.bold} |{bar}| {human_pos}/{human_len} {msg}";
|
|
pub(crate) const PROGRESS_BAR_STYLE_GREEN_2: &str =
|
|
"{prefix:.green.bold} {human_pos}/{human_len} |{bar}| {elapsed_precise}";
|
|
pub(crate) const PROGRESS_BAR_STYLE_FINISH: &str =
|
|
"{prefix:.green.bold} {msg} for {human_len} iterations in {elapsed}";
|
|
pub(crate) const PROGRESS_BAR_STYLE_FINISH_2: &str =
|
|
"{prefix:.green.bold} {msg} x{human_len} in {elapsed}";
|
|
pub(crate) const PROGRESS_BAR_STYLE_FINISH_3: &str =
|
|
"{prefix:.green.bold} {msg} ({binary_total_bytes}) in {elapsed}";
|
|
pub(crate) const PROGRESS_BAR_STYLE_FINISH_4: &str = "{prefix:.green.bold} {msg} in {elapsed}";
|
|
|
|
pub fn human_bytes(size: f64) -> String {
|
|
let units = ["B", "KB", "MB", "GB", "TB", "PB", "EB"];
|
|
let mut size = size;
|
|
let mut unit_index = 0;
|
|
let k = 1024.;
|
|
|
|
while size >= k && unit_index < units.len() - 1 {
|
|
size /= k;
|
|
unit_index += 1;
|
|
}
|
|
|
|
format!("{:.1} {}", size, units[unit_index])
|
|
}
|
|
|
|
pub(crate) fn string_random(n: usize) -> String {
|
|
thread_rng()
|
|
.sample_iter(&Alphanumeric)
|
|
.take(n)
|
|
.map(char::from)
|
|
.collect()
|
|
}
|
|
|
|
pub(crate) fn string_now(delimiter: &str) -> String {
|
|
let t_now = chrono::Local::now();
|
|
let fmt = format!(
|
|
"%Y{}%m{}%d{}%H{}%M{}%S{}%f",
|
|
delimiter, delimiter, delimiter, delimiter, delimiter, delimiter
|
|
);
|
|
t_now.format(&fmt).to_string()
|
|
}
|
|
|
|
pub fn build_progress_bar(
|
|
n: u64,
|
|
prefix: &str,
|
|
msg: Option<&str>,
|
|
style_temp: &str,
|
|
) -> anyhow::Result<ProgressBar> {
|
|
let pb = ProgressBar::new(n);
|
|
pb.set_style(ProgressStyle::with_template(style_temp)?.progress_chars("██ "));
|
|
pb.set_prefix(prefix.to_string());
|
|
pb.set_message(msg.unwrap_or_default().to_string());
|
|
|
|
Ok(pb)
|
|
}
|