From c72953df05259b20a7fc87117aefbbe284a376a1 Mon Sep 17 00:00:00 2001 From: Carlos Sosa Date: Sat, 18 Apr 2020 20:08:00 -0700 Subject: Initial commit v0.1.0 --- src/Sound/MusicDirTrans/Directory.hs | 63 ++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100755 src/Sound/MusicDirTrans/Directory.hs (limited to 'src/Sound/MusicDirTrans/Directory.hs') diff --git a/src/Sound/MusicDirTrans/Directory.hs b/src/Sound/MusicDirTrans/Directory.hs new file mode 100755 index 0000000..0cc1b8f --- /dev/null +++ b/src/Sound/MusicDirTrans/Directory.hs @@ -0,0 +1,63 @@ +{-# LANGUAGE OverloadedStrings #-} +module Sound.MusicDirTrans.Directory + ( copyToNewPath + , getTracksInDir + , genArtistPathFromTracks + , mkNewDirs + , mkRevertFile + , mkRevertArtistPath + , revertFile + ) +where +import Data.Monoid +import Data.List +import Data.Text ( Text + , append + , pack + ) +import Control.Monad.IO.Class +import Distribution.Simple.Utils +import Distribution.Verbosity +import Sound.MusicDirTrans.File +import Sound.MusicDirTrans.Type +import Sound.HTagLib +import System.Directory +import System.FilePath.Glob +import System.FilePath.Posix + + + +revertFile :: FilePath +revertFile = "dir.orig.name.txt" + +getTracksInDir :: FilePath -> IO [AudioTrack] +getTracksInDir path = + map AudioTrack <$> (concat <$> globDir trackFilePatterns path) + +mkNewDirs :: ArtistPath -> IO () +mkNewDirs (ArtistPath _ p c) = + createDirectoryIfMissing False p + >> createDirectoryIfMissing False (p ++ "/" ++ c) + +genArtistPathFromTracks :: FilePath -> IO ArtistPath +genArtistPathFromTracks path = do + ats <- getTracksInDir path + metadata <- mapM (getMetadata . currentPath) ats + return $ mkArtistPath path metadata + +copyToNewPath :: ArtistPath -> IO () +copyToNewPath ap = copyDirectoryRecursive verbosity (rootPath ap) (newPath ap) + where verbosity = normal + +mkRevertFile :: ArtistPath -> IO () +mkRevertFile ap = writeFile filePath fileContent + where + filePath = newPath ap ++ revertFile + fileContent = last $ splitDirectories $ rootPath ap + +mkRevertArtistPath :: FilePath -> FilePath -> ArtistPath +mkRevertArtistPath p op = ArtistPath p "" rp + where + rrp = intercalate "/" . init $ splitDirectories p + rp = rrp ++ "/" ++ op + -- cgit v1.3-2-g0d8e