module Sound.HTagLib.Setter
( TagSetter
, setTags
, setTags'
, titleSetter
, artistSetter
, albumSetter
, commentSetter
, genreSetter
, yearSetter
, trackNumberSetter )
where
import Sound.HTagLib.Type
import qualified Sound.HTagLib.Internal as I
#if !MIN_VERSION_base(4,8,0)
import Data.Monoid
#endif
newtype TagSetter = TagSetter { runSetter :: I.FileId -> IO () }
instance Monoid TagSetter where
mempty = TagSetter $ const (return ())
x `mappend` y = TagSetter $ \fid ->
do runSetter x fid
runSetter y fid
setTags :: FilePath
-> Maybe I.ID3v2Encoding
-> TagSetter
-> IO ()
setTags path enc = execSetter path enc Nothing
setTags' :: FilePath
-> Maybe I.ID3v2Encoding
-> I.FileType
-> TagSetter
-> IO ()
setTags' path enc t = execSetter path enc (Just t)
execSetter :: FilePath
-> Maybe I.ID3v2Encoding
-> Maybe I.FileType
-> TagSetter
-> IO ()
execSetter path enc t s = I.withFile path t $ \fid -> do
case enc of
Nothing -> return ()
Just e -> I.id3v2SetEncoding e
runSetter s fid
I.saveFile path fid
titleSetter :: Title -> TagSetter
titleSetter = TagSetter . I.setTitle
artistSetter :: Artist -> TagSetter
artistSetter = TagSetter . I.setArtist
albumSetter :: Album -> TagSetter
albumSetter = TagSetter . I.setAlbum
commentSetter :: Comment -> TagSetter
commentSetter = TagSetter . I.setComment
genreSetter :: Genre -> TagSetter
genreSetter = TagSetter . I.setGenre
yearSetter :: Maybe Year -> TagSetter
yearSetter = TagSetter . I.setYear
trackNumberSetter :: Maybe TrackNumber -> TagSetter
trackNumberSetter = TagSetter . I.setTrackNumber