@ -568,16 +568,13 @@ impl DuplicateFinder {
let name = file_entry . path . to_string_lossy ( ) . to_string ( ) ;
if ! loaded_hash_map2 . contains_key ( & name ) {
// If loaded data doesn't contains current image info
non_cached_files_to_check . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) ;
non_cached_files_to_check . get_mut ( & file_entry . size ) . unwrap ( ) . push ( file_entry . clone ( ) ) ;
non_cached_files_to_check . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) . push ( file_entry . clone ( ) ) ;
} else if file_entry . size ! = loaded_hash_map2 . get ( & name ) . unwrap ( ) . size | | file_entry . modified_date ! = loaded_hash_map2 . get ( & name ) . unwrap ( ) . modified_date {
// When size or modification date of image changed, then it is clear that is different image
non_cached_files_to_check . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) ;
non_cached_files_to_check . get_mut ( & file_entry . size ) . unwrap ( ) . push ( file_entry . clone ( ) ) ;
non_cached_files_to_check . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) . push ( file_entry . clone ( ) ) ;
} else {
// Checking may be omitted when already there is entry with same size and modification date
records_already_cached . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) ;
records_already_cached . get_mut ( & file_entry . size ) . unwrap ( ) . push ( file_entry . clone ( ) ) ;
records_already_cached . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) . push ( file_entry . clone ( ) ) ;
}
}
}
@ -602,8 +599,7 @@ impl DuplicateFinder {
}
match hash_calculation ( & mut buffer , file_entry , & check_type , 0 ) {
Ok ( hash_string ) = > {
hashmap_with_hash . entry ( hash_string . clone ( ) ) . or_insert_with ( Vec ::new ) ;
hashmap_with_hash . get_mut ( hash_string . as_str ( ) ) . unwrap ( ) . push ( file_entry . clone ( ) ) ;
hashmap_with_hash . entry ( hash_string . clone ( ) ) . or_insert_with ( Vec ::new ) . push ( file_entry . clone ( ) ) ;
}
Err ( s ) = > errors . push ( s ) ,
}
@ -624,8 +620,7 @@ impl DuplicateFinder {
// Add data from cache
for ( size , vec_file_entry ) in & records_already_cached {
pre_checked_map . entry ( * size ) . or_insert_with ( Vec ::new ) ;
pre_checked_map . get_mut ( size ) . unwrap ( ) . append ( & mut vec_file_entry . clone ( ) ) ;
pre_checked_map . entry ( * size ) . or_insert_with ( Vec ::new ) . append ( & mut vec_file_entry . clone ( ) ) ;
}
// Check results
@ -633,8 +628,7 @@ impl DuplicateFinder {
self . text_messages . warnings . append ( & mut errors . clone ( ) ) ;
for vec_file_entry in hash_map . values ( ) {
if vec_file_entry . len ( ) > 1 {
pre_checked_map . entry ( * size ) . or_insert_with ( Vec ::new ) ;
pre_checked_map . get_mut ( size ) . unwrap ( ) . append ( & mut vec_file_entry . clone ( ) ) ;
pre_checked_map . entry ( * size ) . or_insert_with ( Vec ::new ) . append ( & mut vec_file_entry . clone ( ) ) ;
}
}
}
@ -732,16 +726,14 @@ impl DuplicateFinder {
let mut found : bool = false ;
for loaded_file_entry in loaded_vec_file_entry {
if file_entry . path = = loaded_file_entry . path & & file_entry . modified_date = = loaded_file_entry . modified_date {
records_already_cached . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) ;
records_already_cached . get_mut ( & file_entry . size ) . unwrap ( ) . push ( loaded_file_entry . clone ( ) ) ;
records_already_cached . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) . push ( loaded_file_entry . clone ( ) ) ;
found = true ;
break ;
}
}
if ! found {
non_cached_files_to_check . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) ;
non_cached_files_to_check . get_mut ( & file_entry . size ) . unwrap ( ) . push ( file_entry ) ;
non_cached_files_to_check . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) . push ( file_entry ) ;
}
}
}
@ -768,8 +760,7 @@ impl DuplicateFinder {
match hash_calculation ( & mut buffer , & file_entry , & check_type , u64 ::MAX ) {
Ok ( hash_string ) = > {
file_entry . hash = hash_string . clone ( ) ;
hashmap_with_hash . entry ( hash_string . clone ( ) ) . or_insert_with ( Vec ::new ) ;
hashmap_with_hash . get_mut ( hash_string . as_str ( ) ) . unwrap ( ) . push ( file_entry ) ;
hashmap_with_hash . entry ( hash_string . clone ( ) ) . or_insert_with ( Vec ::new ) . push ( file_entry ) ;
}
Err ( s ) = > errors . push ( s ) ,
}
@ -785,8 +776,7 @@ impl DuplicateFinder {
for ( full_size , full_hashmap , _errors ) in & mut full_hash_results {
if size = = * full_size {
for file_entry in vec_file_entry {
full_hashmap . entry ( file_entry . hash . clone ( ) ) . or_insert_with ( Vec ::new ) ;
full_hashmap . get_mut ( & file_entry . hash ) . unwrap ( ) . push ( file_entry ) ;
full_hashmap . entry ( file_entry . hash . clone ( ) ) . or_insert_with ( Vec ::new ) . push ( file_entry ) ;
}
continue 'main ;
}
@ -794,8 +784,7 @@ impl DuplicateFinder {
// Size doesn't exists add results to files
let mut temp_hashmap : BTreeMap < String , Vec < FileEntry > > = Default ::default ( ) ;
for file_entry in vec_file_entry {
temp_hashmap . entry ( file_entry . hash . clone ( ) ) . or_insert_with ( Vec ::new ) ;
temp_hashmap . get_mut ( & file_entry . hash ) . unwrap ( ) . push ( file_entry ) ;
temp_hashmap . entry ( file_entry . hash . clone ( ) ) . or_insert_with ( Vec ::new ) . push ( file_entry ) ;
}
full_hash_results . push ( ( size , temp_hashmap , Vec ::new ( ) ) ) ;
}
@ -830,8 +819,7 @@ impl DuplicateFinder {
self . text_messages . warnings . append ( & mut errors ) ;
for ( _hash , vec_file_entry ) in hash_map {
if vec_file_entry . len ( ) > 1 {
self . files_with_identical_hashes . entry ( size ) . or_insert_with ( Vec ::new ) ;
self . files_with_identical_hashes . get_mut ( & size ) . unwrap ( ) . push ( vec_file_entry ) ;
self . files_with_identical_hashes . entry ( size ) . or_insert_with ( Vec ::new ) . push ( vec_file_entry ) ;
}
}
}
@ -1374,8 +1362,7 @@ pub fn load_hashes_from_file(text_messages: &mut Messages, delete_outdated_cache
hash : uuu [ 3 ] . to_string ( ) ,
symlink_info : None ,
} ;
hashmap_loaded_entries . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) ;
hashmap_loaded_entries . get_mut ( & file_entry . size ) . unwrap ( ) . push ( file_entry ) ;
hashmap_loaded_entries . entry ( file_entry . size ) . or_insert_with ( Vec ::new ) . push ( file_entry ) ;
}
}