listenbrainz-client-1.0.0: A client library to the ListenBrainz project

Safe HaskellNone
LanguageHaskell2010

Web.ListenBrainz

Contents

Synopsis

Documentation

class Monad m => MonadListenBrainz m where Source #

The class of monads that can embed calls to the ListenBrainz API.

Minimal complete definition

liftListenBrainz

runListenBrainzEff :: (Member IO effs, Member (Exc ServantError) effs) => Manager -> Eff (ListenBrainzAPICall ': effs) a -> Eff effs a Source #

Eliminate ListenBrainzAPICall effects by performing HTTP calls.

This implementation uses extensible effects as provided by freer-effects.

runListenBrainzT :: ListenBrainzT m a -> Manager -> m a Source #

Run ListenBrainz calls using a traditional monad transformer stack.

API Calls

Submitting Listens

submitListens Source #

Arguments

:: MonadListenBrainz m 
=> UserToken

The private token of the user to submit a listen for.

-> SubmitListens 
-> m Value 

data SubmitListens Source #

A submission of listens to ListenBrainz.

The ListenBrainz documentation states:

Listens should be submitted for tracks when the user has listened to half the track or 4 minutes of the track, whichever is lower. If the user hasn’t listened to 4 minutes or half the track, it doesn’t fully count as a listen and should not be submitted.

Constructors

SingleListen ListenData

Submit a single track.

NowPlaying TrackMetadata

Submit now playing information.

Import [ListenData]

Submit a batch of listens as an import.

data ListenData Source #

Instances

Eq ListenData Source # 
Ord ListenData Source # 
Read ListenData Source # 
Show ListenData Source # 
Generic ListenData Source # 

Associated Types

type Rep ListenData :: * -> * #

ToJSON ListenData Source # 
FromJSON ListenData Source # 
type Rep ListenData Source # 
type Rep ListenData = D1 (MetaData "ListenData" "Web.ListenBrainz" "listenbrainz-client-1.0.0-18UnZjNFnlDiFHNUK1qLK" False) (C1 (MetaCons "ListenData" PrefixI True) ((:*:) (S1 (MetaSel (Just Symbol "listenListenedAt") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 UTCTime)) (S1 (MetaSel (Just Symbol "listenTrackMetadata") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 TrackMetadata))))

data TrackMetadata Source #

Constructors

TrackMetadata 

Instances

Eq TrackMetadata Source # 
Ord TrackMetadata Source # 
Read TrackMetadata Source # 
Show TrackMetadata Source # 
Generic TrackMetadata Source # 

Associated Types

type Rep TrackMetadata :: * -> * #

ToJSON TrackMetadata Source # 
FromJSON TrackMetadata Source # 
type Rep TrackMetadata Source # 
type Rep TrackMetadata = D1 (MetaData "TrackMetadata" "Web.ListenBrainz" "listenbrainz-client-1.0.0-18UnZjNFnlDiFHNUK1qLK" False) (C1 (MetaCons "TrackMetadata" PrefixI True) ((:*:) (S1 (MetaSel (Just Symbol "trackArtist") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Text)) (S1 (MetaSel (Just Symbol "trackName") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Text))))

Retrieving Listens

Retrieving Import Timestamps

getLatestImport Source #

Arguments

:: MonadListenBrainz m 
=> Text

The user name (not user token) of the user to find the latest import timestamp

-> m LatestImport 

Updating Import Timestamps

Types

newtype UserToken Source #

Constructors

UserToken Text 

Implementation Details

data ListenBrainzAPICall a where Source #

Possible API calls, tagged with their successful return value.

newtype ListenBrainzT m a Source #

A monad transformer to interpret ListenBrainz API calls as HTTP calls.

Constructors

ListenBrainzT (ReaderT Manager m a) 

type ListenBrainzAPI = (Header "Authorization" Authorization :> ("1" :> ("submit-listens" :> (ReqBody '[JSON] SubmitListens :> Post '[JSON] Value)))) :<|> (("1" :> ("latest-import" :> (QueryParam "user_name" UserName :> Get '[JSON] LatestImport))) :<|> ((Header "Authorization" Authorization :> ("1" :> ("latest-import" :> (ReqBody '[JSON] TimeStamp :> Post '[JSON] Value)))) :<|> ("1" :> ("user" :> (Capture "user-name" Text :> ("listens" :> (QueryParam "max_ts" Int :> (QueryParam "min_ts" Int :> (QueryParam "count" Int :> Get '[JSON] Listens))))))))) Source #