packages feed

takedouble-0.0.1.1: app/Main.hs

module Main where

import Data.List (sort)
import System.Environment (getArgs, getProgName)
import Takedouble (File (..), checkFullDuplicates, findPossibleDuplicates, getFileNames)
import Text.Printf (printf)

main :: IO ()
main = do
  args <- getArgs
  case args of
    [dir] ->
      do
        putStrLn $ "reading " <> dir
        filenames <- getFileNames dir
        putStrLn $ "comparing " <> show (length filenames) <> " files"
        likelyDups <- findPossibleDuplicates filenames -- each element in the list is a list of files that are likely duplicates
        let fnamesOnly = (filepath <$>) `fmap` likelyDups -- convert to a nested list of FilePath
        dups <- mapM checkFullDuplicates fnamesOnly
        mapM_ (\x -> putStr "\n" >> mapM_ putStrLn x) (sort $ concat dups)
    _ -> do
      name <- getProgName
      printf "Something went wrong - please use ./%s <dir>\n" name