Try to improve hashing and progress

This commit is contained in:
Jan Bader 2023-12-06 16:07:24 +01:00
parent f4f827b3e4
commit fc2d1c0cb5
2 changed files with 20 additions and 22 deletions

View File

@ -54,21 +54,15 @@ func calculateImageHash(path string) (uint64, error) {
} }
defer f.Close() defer f.Close()
fmt.Println("jh:", path, err)
img, _, err := image.Decode(f) img, _, err := image.Decode(f)
fmt.Println("oh:", path, err)
if err != nil { if err != nil {
fmt.Println("kh:", path, err)
return 0, err return 0, err
} }
fmt.Println("lh:", path, err)
hash, err := goimagehash.DifferenceHash(img) hash, err := goimagehash.DifferenceHash(img)
if err != nil { if err != nil {
fmt.Println("mh:", path, err)
return 0, err return 0, err
} }
fmt.Println("nh:", path, err)
fmt.Println(path, hash.ToString()) fmt.Println(path, hash.ToString())
return hash.GetHash(), nil return hash.GetHash(), nil
} }

View File

@ -55,6 +55,8 @@ func (fm *FilesMap) FileHashingWorker(wg *sync.WaitGroup) {
} }
hash, err := calculateFileHash(file.path) hash, err := calculateFileHash(file.path)
fm.hashingBar.IncrInt64(file.size)
fm.FilesHashed <- file
if err != nil { if err != nil {
log.Printf("Error calculating Hash file for %s: %v\n", file.path, err) log.Printf("Error calculating Hash file for %s: %v\n", file.path, err)
@ -62,8 +64,6 @@ func (fm *FilesMap) FileHashingWorker(wg *sync.WaitGroup) {
} }
file.hash = hash file.hash = hash
fm.hashingBar.IncrInt64(file.size)
fm.FilesHashed <- file
} }
wg.Done() wg.Done()
} }
@ -75,6 +75,9 @@ func (fm *FilesMap) ImageHashingWorker(wg *sync.WaitGroup) {
} }
hash, err := calculateImageHash(file.path) hash, err := calculateImageHash(file.path)
fm.hashingBar.IncrInt64(file.size)
fm.ImagesHashed <- file
if err != nil { if err != nil {
log.Printf("Error calculating Hash for image %s: %v\n", file.path, err) log.Printf("Error calculating Hash for image %s: %v\n", file.path, err)
continue continue
@ -101,8 +104,8 @@ func (fm *FilesMap) HashedWorker(done chan bool) {
done <- true done <- true
} }
func (fm *FilesMap) WalkDirectories() int { func (fm *FilesMap) WalkDirectories() int64 {
countFiles := 0 var countFiles int64 = 0
sumSize := int64(0) sumSize := int64(0)
for _, path := range flag.Args() { for _, path := range flag.Args() {
filepath.Walk(path, func(path string, info os.FileInfo, err error) error { filepath.Walk(path, func(path string, info os.FileInfo, err error) error {
@ -115,14 +118,13 @@ func (fm *FilesMap) WalkDirectories() int {
return nil return nil
} }
fmt.Println("Walked past", path) fm.hashImage(path, size)
count := fm.hashFile(path, size)
sumSize += size sumSize += size * count
countFiles++ countFiles += count
fm.incomingBar.SetTotal(int64(countFiles), false) fm.incomingBar.SetTotal(int64(countFiles), false)
fm.hashingBar.SetTotal(int64(sumSize), false) fm.hashingBar.SetTotal(int64(sumSize), false)
fm.hashFile(path, size) fmt.Printf("count: %d, size: %d\n", countFiles, sumSize)
fm.hashImage(path, size)
return nil return nil
}) })
} }
@ -132,15 +134,11 @@ func (fm *FilesMap) WalkDirectories() int {
return countFiles return countFiles
} }
func (fm *FilesMap) hashFile(path string, size int64) { func (fm *FilesMap) hashFile(path string, size int64) int64 {
prevFile, ok := fm.FilesBySize[size] prevFile, ok := fm.FilesBySize[size]
if !ok { if !ok {
fm.FilesBySize[size] = path fm.FilesBySize[size] = path
return return 0
}
if prevFile != "" {
fm.FilesHashing <- fileEntry{prevFile, size, ""}
} }
fm.FilesBySize[size] = "" fm.FilesBySize[size] = ""
@ -150,6 +148,12 @@ func (fm *FilesMap) hashFile(path string, size int64) {
} }
fm.FilesHashing <- fileEntry{path, size, ""} fm.FilesHashing <- fileEntry{path, size, ""}
if prevFile != "" {
fm.FilesHashing <- fileEntry{prevFile, size, ""}
return 2
}
return 1
} }
func (fm *FilesMap) hashImage(path string, size int64) { func (fm *FilesMap) hashImage(path string, size int64) {