mirror of
https://github.com/eza-community/eza
synced 2024-10-01 13:43:56 +00:00
feat: Decode com.apple.ResourceFork extended attributes
This commit is contained in:
parent
582603b3cc
commit
6c921e7b3c
49
Cargo.lock
generated
49
Cargo.lock
generated
|
@ -247,6 +247,21 @@ version = "0.8.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
|
||||
|
||||
[[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.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
|
||||
|
||||
[[package]]
|
||||
name = "criterion"
|
||||
version = "0.5.1"
|
||||
|
@ -397,6 +412,7 @@ dependencies = [
|
|||
"libc",
|
||||
"locale",
|
||||
"log",
|
||||
"macbinary",
|
||||
"natord",
|
||||
"num_cpus",
|
||||
"number_prefix",
|
||||
|
@ -654,6 +670,19 @@ version = "0.4.20"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
|
||||
|
||||
[[package]]
|
||||
name = "macbinary"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2f3b20f06e85c883de160086c2e2b45524ff19888271eccd593c8956d1fc1687"
|
||||
dependencies = [
|
||||
"crc",
|
||||
"serde",
|
||||
"serde-wasm-bindgen",
|
||||
"serde_bytes",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "matches"
|
||||
version = "0.1.8"
|
||||
|
@ -1061,6 +1090,26 @@ dependencies = [
|
|||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde-wasm-bindgen"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
|
||||
dependencies = [
|
||||
"js-sys",
|
||||
"serde",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_bytes"
|
||||
version = "0.11.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.188"
|
||||
|
|
|
@ -109,6 +109,9 @@ windows-sys = { version = "0.52.0", features = [
|
|||
"Win32_Foundation",
|
||||
] }
|
||||
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
macbinary = { version = "0.2.1" }
|
||||
|
||||
[build-dependencies]
|
||||
chrono = { version = "0.4.31", default-features = false, features = ["clock"] }
|
||||
|
||||
|
|
|
@ -580,6 +580,10 @@ const ATTRIBUTE_DISPLAYS: &[AttributeDisplay] = &[
|
|||
attribute: "com.apple.macl",
|
||||
display: display_macl,
|
||||
},
|
||||
AttributeDisplay {
|
||||
attribute: "com.apple.ResourceFork",
|
||||
display: display_resource_fork,
|
||||
},
|
||||
];
|
||||
|
||||
#[cfg(not(target_os = "macos"))]
|
||||
|
@ -659,6 +663,31 @@ fn display_macl(attribute: &Attribute) -> Option<String> {
|
|||
})
|
||||
}
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
fn display_resource_fork(attribute: &Attribute) -> Option<String> {
|
||||
attribute.value.as_ref().and_then(|v| {
|
||||
let rsrc = macbinary::ResourceFork::new(v).ok()?;
|
||||
let mut resources = Vec::new();
|
||||
for item in rsrc.resource_types() {
|
||||
resources.extend(rsrc.resources(item).map(|resource| match resource.name() {
|
||||
None => format!(
|
||||
r#"{{"type": {:?}, "id": {}, "length": {}}}"#,
|
||||
item.resource_type(),
|
||||
resource.id(),
|
||||
resource.data().len()
|
||||
),
|
||||
Some(name) => format!(
|
||||
r#"{{"type": {:?}, "name": {name:?}, "id": {}, "length": {}}}"#,
|
||||
item.resource_type(),
|
||||
resource.id(),
|
||||
resource.data().len()
|
||||
),
|
||||
}));
|
||||
}
|
||||
(!resources.is_empty()).then(|| format!("[{}]", resources.join(", ")))
|
||||
})
|
||||
}
|
||||
|
||||
// plist::XmlWriter takes the writer instead of borrowing it. This is a
|
||||
// wrapper around a borrowed vector that just forwards the Write trait
|
||||
// calls to the borrowed vector.
|
||||
|
|
Loading…
Reference in a new issue