feat: Recalculate digest if digest_type is set but digest_value is missing
This commit is contained in:
@@ -49,8 +49,8 @@ pub fn mode_update(
|
|||||||
let compression_type = CompressionType::from_str(&item.compression)?;
|
let compression_type = CompressionType::from_str(&item.compression)?;
|
||||||
let compression_engine = get_compression_engine(compression_type)
|
let compression_engine = get_compression_engine(compression_type)
|
||||||
.expect("Unable to get compression engine");
|
.expect("Unable to get compression engine");
|
||||||
let size = compression_engine.size(item_path)? as i64;
|
let size = compression_engine.size(item_path.clone())?;
|
||||||
item.size = Some(size);
|
item.size = Some(size as i64);
|
||||||
db::update_item(conn, item.clone())?;
|
db::update_item(conn, item.clone())?;
|
||||||
} else {
|
} else {
|
||||||
debug!(
|
debug!(
|
||||||
@@ -60,6 +60,36 @@ pub fn mode_update(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If digest is defined and not None, but digest_value is missing, recalculate it
|
||||||
|
if item.digest_type != "None" && item.digest_value.is_none() {
|
||||||
|
debug!("MAIN: Recalculating digest for item {:?}", item.id);
|
||||||
|
|
||||||
|
// Get the digest type
|
||||||
|
let digest_type = DigestType::from_str(&item.digest_type)?;
|
||||||
|
let mut digest_engine = get_digest_engine(digest_type);
|
||||||
|
|
||||||
|
// Read the file using the compression engine
|
||||||
|
let compression_type = CompressionType::from_str(&item.compression)?;
|
||||||
|
let compression_engine = get_compression_engine(compression_type)
|
||||||
|
.expect("Unable to get compression engine");
|
||||||
|
|
||||||
|
let mut reader = compression_engine.open(item_path.clone())?;
|
||||||
|
let mut buffer = [0; 4096];
|
||||||
|
|
||||||
|
loop {
|
||||||
|
let n = reader.read(&mut buffer)?;
|
||||||
|
if n == 0 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
digest_engine.update(&buffer[..n]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finalize the digest and update the item
|
||||||
|
let digest_value = digest_engine.finalize()?;
|
||||||
|
item.digest_value = Some(digest_value);
|
||||||
|
db::update_item(conn, item.clone())?;
|
||||||
|
}
|
||||||
|
|
||||||
if !args.item.meta.is_empty() {
|
if !args.item.meta.is_empty() {
|
||||||
debug!("MAIN: Updating item meta");
|
debug!("MAIN: Updating item meta");
|
||||||
for kv in args.item.meta.iter() {
|
for kv in args.item.meta.iter() {
|
||||||
|
|||||||
Reference in New Issue
Block a user