Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Prelude ()
  2. import KS
  3. import System.IO.Unsafe
  4.  
  5. mainSeg = "Music"
  6. flacSeg = "Flacs"
  7. mp3Seg = "MusicMP3s"
  8. [musicDir, flacDir, mp3Dir, logFile] = map (unsafePerformIO . inHomeDir)
  9.     [mainSeg, flacSeg, mp3Seg, "Desktop/flactwist-noMP3"]
  10.  
  11. main = do
  12.     writeFile logFile ""
  13.     flacs <- listFlacs
  14.     mapM_ frobFlac flacs
  15.  
  16. listFlacs :: IO [FilePath]
  17. listFlacs = do
  18.     flacs <- lines $^ readProcess "find" [musicDir, "-name", "*.flac"] ""
  19.     mapM (canonicalizePath . encodeString) flacs
  20.  
  21. frobFlac :: FilePath -> IO ()
  22. frobFlac flac = do
  23.     move flac flac'
  24.    existsMP3 <- doesFileExist mp3
  25.    if existsMP3
  26.        then move mp3 mp3'
  27.         else record flac'
  28.  where
  29.    flac' = replaceDir flac mainSeg flacSeg
  30.     mp3  = replaceDir mp3' mainSeg mp3Seg
  31.    mp3' = replaceExtension flac "mp3"
  32.  
  33. move :: FilePath -> FilePath -> IO ()
  34. move src dest = do
  35.     createDirectoryIfMissing True . dropFileName $ dest
  36.     renameFile src dest
  37.  
  38. record :: String -> IO ()
  39. record = appendFile logFile . (++ "\n") . decodeString
  40.  
  41. replaceDir path seg rep = joinPath . map replace . splitDirectories $ path
  42.   where replace x = if x == seg then rep else x
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement