added 7z and lzma support

This commit is contained in:
specCon18 2023-09-03 21:30:11 -04:00
parent b85719ed83
commit 6bd66a07e2
4 changed files with 258 additions and 36 deletions

229
Cargo.lock generated
View file

@ -84,6 +84,21 @@ version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
[[package]]
name = "bit-set"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
dependencies = [
"bit-vec",
]
[[package]]
name = "bit-vec"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
[[package]]
name = "bitflags"
version = "1.3.2"
@ -96,6 +111,15 @@ version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
[[package]]
name = "block-buffer"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
dependencies = [
"generic-array",
]
[[package]]
name = "block-buffer"
version = "0.10.4"
@ -105,6 +129,12 @@ dependencies = [
"generic-array",
]
[[package]]
name = "bumpalo"
version = "3.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
[[package]]
name = "byteorder"
version = "1.4.3"
@ -148,6 +178,15 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chrono"
version = "0.4.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95ed24df0632f708f5f6d8082675bef2596f7084dee3dd55f632290bf35bfe0f"
dependencies = [
"num-traits",
]
[[package]]
name = "cipher"
version = "0.4.4"
@ -228,6 +267,21 @@ dependencies = [
"libc",
]
[[package]]
name = "crc"
version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe"
dependencies = [
"crc-catalog",
]
[[package]]
name = "crc-catalog"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484"
[[package]]
name = "crc32fast"
version = "1.3.2"
@ -316,10 +370,13 @@ dependencies = [
]
[[package]]
name = "deranged"
version = "0.3.8"
name = "digest"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
dependencies = [
"generic-array",
]
[[package]]
name = "digest"
@ -327,7 +384,7 @@ version = "0.10.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"block-buffer 0.10.4",
"crypto-common",
"subtle",
]
@ -357,6 +414,7 @@ dependencies = [
"indicatif",
"rayon",
"rust-lzma",
"sevenz-rust",
"tar",
"unrar",
"zip",
@ -384,6 +442,17 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "filetime_creation"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3aea213d5ab4e6cd49f50c0688a4e20e5b75ff3bc07ff63f814778bd9b1dd42d"
dependencies = [
"cfg-if",
"filetime",
"windows-sys 0.48.0",
]
[[package]]
name = "flate2"
version = "1.0.27"
@ -431,7 +500,7 @@ version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
dependencies = [
"digest",
"digest 0.10.7",
]
[[package]]
@ -480,6 +549,15 @@ dependencies = [
"libc",
]
[[package]]
name = "js-sys"
version = "0.3.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
dependencies = [
"wasm-bindgen",
]
[[package]]
name = "lazy_static"
version = "1.4.0"
@ -508,6 +586,15 @@ version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]]
name = "lzma-rust"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d5dadd5fd2bcf0256ff0340310c47851ef4113d2cc803b606804cd26604d0e1"
dependencies = [
"byteorder",
]
[[package]]
name = "memchr"
version = "2.5.0"
@ -544,6 +631,25 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "nt-time"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7388539da3ff64e2ee5f23b310e2d46d78fbabf338bd35d410d59562ed188bd"
dependencies = [
"chrono",
"time",
]
[[package]]
name = "num-traits"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
dependencies = [
"autocfg",
]
[[package]]
name = "num_cpus"
version = "1.16.0"
@ -575,6 +681,12 @@ version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
[[package]]
name = "opaque-debug"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
[[package]]
name = "owo-colors"
version = "3.5.0"
@ -621,10 +733,10 @@ version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
dependencies = [
"digest",
"digest 0.10.7",
"hmac",
"password-hash",
"sha2",
"sha2 0.10.7",
]
[[package]]
@ -771,6 +883,23 @@ dependencies = [
"syn",
]
[[package]]
name = "sevenz-rust"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08f8f9506caeb765a103766f8d32d5a16ba11495e0e6ad44f29a3cd6b1dfe31b"
dependencies = [
"bit-set",
"byteorder",
"crc",
"filetime_creation",
"js-sys",
"lzma-rust",
"nt-time",
"sha2 0.9.9",
"wasm-bindgen",
]
[[package]]
name = "sha1"
version = "0.10.5"
@ -779,7 +908,20 @@ checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
"digest 0.10.7",
]
[[package]]
name = "sha2"
version = "0.9.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
dependencies = [
"block-buffer 0.9.0",
"cfg-if",
"cpufeatures",
"digest 0.9.0",
"opaque-debug",
]
[[package]]
@ -790,7 +932,7 @@ checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
"digest 0.10.7",
]
[[package]]
@ -893,13 +1035,13 @@ dependencies = [
[[package]]
name = "time"
version = "0.3.28"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48"
checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446"
dependencies = [
"deranged",
"serde",
"time-core",
"time-macros",
]
[[package]]
@ -908,6 +1050,15 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
[[package]]
name = "time-macros"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4"
dependencies = [
"time-core",
]
[[package]]
name = "tracing"
version = "0.1.37"
@ -1021,6 +1172,60 @@ version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
dependencies = [
"cfg-if",
"wasm-bindgen-macro",
]
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
dependencies = [
"bumpalo",
"log",
"once_cell",
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.87"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
[[package]]
name = "widestring"
version = "1.0.2"

View file

@ -15,6 +15,7 @@ flate2 = "1.0.27"
indicatif = "0.17.6"
rayon = "1.7.0"
rust-lzma = "0.6.0"
sevenz-rust = "0.5.2"
tar = "0.4.40"
unrar = "0.5.1"
zip = "0.6.6"

View file

@ -99,7 +99,7 @@ pub fn extract_tar(tar_file: &Path) -> io::Result<()> {
Ok(())
}
pub fn extract_xz(input_path: &Path, output_directory: &Path) -> Result<(), io::Error> {
pub fn extract_lzma(input_path: &Path, output_directory: &Path) -> Result<(), io::Error> {
// Open the input XZ file
let input_file = File::open(input_path)?;
@ -166,11 +166,15 @@ pub fn extract_bz2(input_path: &Path, output_directory: &Path) -> Result<(), io:
Ok(())
}
pub fn extract_7z(input_path: &Path, output_directory: &Path) -> Result<(), io::Error> {
sevenz_rust::decompress_file(input_path, output_directory).expect("complete");
Ok(())
}
// pub fn extract_tbz2(){}
// pub fn extract_tgz(){}
// pub fn extract_txz(){}
// pub fn extract_lzma(){}
// pub fn extract_7z(){}
// pub fn extract_arj(){}
// pub fn extract_cab(){}
// pub fn extract_chm(){}

View file

@ -17,7 +17,7 @@ use extractors::{
extract_zip,
extract_rar,
extract_tar,
extract_xz,
extract_lzma,
extract_bz2,
// extract_tbz2,
// extract_tgz,
@ -25,7 +25,7 @@ use extractors::{
// extract_lzma,
extract_gz,
// extract_z,
// extract_7z,
extract_7z,
// extract_arj,
// extract_cab,
// extract_chm,
@ -76,13 +76,17 @@ fn run() -> i32 {
println!("Error creating output directory: {}", err);
return 1;
}
if let Err(err) = extract_xz(&fname, &output_directory) {
if let Err(err) = extract_lzma(&fname, &output_directory) {
println!("Error extracting XZ: {}", err);
return 1;
}
}
"gz" => {
let output_directory = Path::new("output_directory"); // Change this to your desired output directory
if let Err(err) = fs::create_dir_all(&output_directory) {
println!("Error creating output directory: {}", err);
return 1;
}
if let Err(err) = extract_gz(&fname, &output_directory) {
println!("Error extracting GZ: {}", err);
return 1;
@ -90,11 +94,37 @@ fn run() -> i32 {
}
"bz2" => {
let output_directory = Path::new("output_directory"); // Change this to your desired output directory
if let Err(err) = fs::create_dir_all(&output_directory) {
println!("Error creating output directory: {}", err);
return 1;
}
if let Err(err) = extract_bz2(&fname, &output_directory) {
println!("Error extracting BZ2: {}", err);
return 1;
}
}
"lzma" => {
let output_directory = Path::new("output_directory"); // Change this to your desired output directory
if let Err(err) = fs::create_dir_all(&output_directory) {
println!("Error creating output directory: {}", err);
return 1;
}
if let Err(err) = extract_lzma(&fname, &output_directory) {
println!("Error extracting LZMA: {}", err);
return 1;
}
}
"7z" => {
let output_directory = Path::new("output_directory"); // Change this to your desired output directory
if let Err(err) = fs::create_dir_all(&output_directory) {
println!("Error creating output directory: {}", err);
return 1;
}
if let Err(err) = extract_7z(&fname, &output_directory) {
println!("Error extracting 7Z: {}", err);
return 1;
}
}
/*
"tbz2" => {
if let Err(err) = extract_tbz2(&fname) {
@ -114,24 +144,6 @@ fn run() -> i32 {
return 1;
}
}
"lzma" => {
if let Err(err) = extract_lzma(&fname) {
println!("Error extracting LZMA: {}", err);
return 1;
}
}
"z" => {
if let Err(err) = extract_z(&fname) {
println!("Error extracting Z: {}", err);
return 1;
}
}
"7z" => {
if let Err(err) = extract_7z(&fname) {
println!("Error extracting 7Z: {}", err);
return 1;
}
}
"arj" => {
if let Err(err) = extract_arj(&fname) {
println!("Error extracting ARJ: {}", err);