{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Lastfm.Library
( addAlbum, albumItem, addArtist, artistItem, addTrack
, getAlbums, getArtists, getTracks
, removeAlbum, removeArtist, removeScrobble, removeTrack
) where
#if __GLASGOW_HASKELL__ < 710
import Control.Applicative
#endif
import Data.List.NonEmpty (NonEmpty)
import qualified Data.List.NonEmpty as N
import Lastfm.Internal (absorbQuery, indexedWith, wrap)
import Lastfm.Request
addAlbum :: NonEmpty (Request f LibraryAlbum) -> Request f (APIKey -> SessionKey -> Sign)
addAlbum batch = api "library.addAlbum" <* items <* post
where
items = absorbQuery (N.zipWith indexedWith (N.fromList [0..]) batch)
albumItem :: Request f (Artist -> Album -> LibraryAlbum)
albumItem = wrap id
addArtist :: NonEmpty (Request f LibraryArtist) -> Request f (APIKey -> SessionKey -> Sign)
addArtist batch = api "library.addArtist" <* items <* post
where
items = absorbQuery (N.zipWith indexedWith (N.fromList [0..]) batch)
artistItem :: Request f (Artist -> LibraryArtist)
artistItem = wrap id
addTrack :: Request f (Artist -> Track -> APIKey -> SessionKey -> Sign)
addTrack = api "library.addTrack" <* post
getAlbums :: Request f (User -> APIKey -> Ready)
getAlbums = api "library.getAlbums"
getArtists :: Request f (User -> APIKey -> Ready)
getArtists = api "library.getArtists"
getTracks :: Request f (User -> APIKey -> Ready)
getTracks = api "library.getTracks"
removeAlbum :: Request f (Artist -> Album -> APIKey -> SessionKey -> Sign)
removeAlbum = api "library.removeAlbum" <* post
removeArtist :: Request f (Artist -> APIKey -> SessionKey -> Sign)
removeArtist = api "library.removeArtist" <* post
removeScrobble :: Request f (Artist -> Track -> Timestamp -> APIKey -> SessionKey -> Sign)
removeScrobble = api "library.removeScrobble" <* post
removeTrack :: Request f (Artist -> Track -> APIKey -> SessionKey -> Sign)
removeTrack = api "library.removeTrack" <* post