aboutsummaryrefslogtreecommitdiff
path: root/src/Sound/MusicDirTrans/Directory.hs
diff options
context:
space:
mode:
authorCarlos Sosa <gnusosa@gnusosa.net>2020-04-18 20:08:00 -0700
committerCarlos Sosa <gnusosa@gnusosa.net>2020-04-23 09:21:02 -0700
commitc72953df05259b20a7fc87117aefbbe284a376a1 (patch)
tree1a1515d0ada2adcc07e32095e841c8c2d4a0f982 /src/Sound/MusicDirTrans/Directory.hs
Initial commit v0.1.0HEADmaster
Diffstat (limited to 'src/Sound/MusicDirTrans/Directory.hs')
-rwxr-xr-xsrc/Sound/MusicDirTrans/Directory.hs63
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
+