diff --git a/filesmap.go b/filesmap.go index e5c5350..190ad8f 100644 --- a/filesmap.go +++ b/filesmap.go @@ -20,8 +20,6 @@ type FilesMap struct { FilesHashing chan fileEntry - FilesIncoming chan fileEntry - FilesHashed chan fileEntry progress *mpb.Progress @@ -33,39 +31,14 @@ type FilesMap struct { func newFilesMap() *FilesMap { return &FilesMap{ - FilesBySize: map[int64]string{}, - FilesByHash: map[string][]string{}, - FilesHashed: make(chan fileEntry), - FilesIncoming: make(chan fileEntry, 100000), - FilesHashing: make(chan fileEntry), - progress: mpb.New(mpb.WithWidth(64)), + FilesBySize: map[int64]string{}, + FilesByHash: map[string][]string{}, + FilesHashed: make(chan fileEntry, 100000), + FilesHashing: make(chan fileEntry), + progress: mpb.New(mpb.WithWidth(64)), } } -func (fm *FilesMap) IncomingWorker() { - for file := range fm.FilesIncoming { - fm.incomingBar.Increment() - if *verbose { - fmt.Println("Incoming", file.path) - } - - prevFile, ok := fm.FilesBySize[file.size] - if !ok { - fm.FilesBySize[file.size] = file.path - continue - } - - if prevFile != "" { - fm.FilesHashing <- fileEntry{prevFile, file.size, ""} - } - - fm.FilesBySize[file.size] = "" - - fm.FilesHashing <- file - } - close(fm.FilesHashing) -} - func (fm *FilesMap) HashingWorker(wg *sync.WaitGroup) { for file := range fm.FilesHashing { if *verbose { @@ -117,19 +90,37 @@ func (fm *FilesMap) WalkDirectories() int { return nil } - if *minSize > info.Size() { + size := info.Size() + if *minSize > size { return nil } - fm.FilesIncoming <- fileEntry{path, info.Size(), ""} + fm.incomingBar.Increment() countFiles++ fm.incomingBar.SetTotal(int64(countFiles), false) + if *verbose { + fmt.Println("Incoming", path) + } + + prevFile, ok := fm.FilesBySize[size] + if !ok { + fm.FilesBySize[size] = path + return nil + } + + if prevFile != "" { + fm.FilesHashing <- fileEntry{prevFile, size, ""} + } + + fm.FilesBySize[size] = "" + + fm.FilesHashing <- fileEntry{path, info.Size(), ""} return nil }) } fm.incomingBar.SetTotal(int64(countFiles), true) - close(fm.FilesIncoming) + close(fm.FilesHashing) return countFiles } diff --git a/main.go b/main.go index 0c53c66..99ef5fd 100644 --- a/main.go +++ b/main.go @@ -58,8 +58,6 @@ func main() { go filesMap.HashingWorker(&wg) } - go filesMap.IncomingWorker() - go filesMap.HashedWorker(done) countFiles = filesMap.WalkDirectories()