diff options
| author | Carlos Sosa <gnusosa@gnusosa.net> | 2020-04-18 20:08:00 -0700 |
|---|---|---|
| committer | Carlos Sosa <gnusosa@gnusosa.net> | 2020-04-23 09:21:02 -0700 |
| commit | c72953df05259b20a7fc87117aefbbe284a376a1 (patch) | |
| tree | 1a1515d0ada2adcc07e32095e841c8c2d4a0f982 /src/Sound/MusicDirTrans/Directory.hs | |
Diffstat (limited to 'src/Sound/MusicDirTrans/Directory.hs')
| -rwxr-xr-x | src/Sound/MusicDirTrans/Directory.hs | 63 |
1 files changed, 63 insertions, 0 deletions
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 + |
