listenbrainz-client 1.0.1 → 1.1.1
raw patch · 3 files changed
+48/−8 lines, 3 filesdep ~base
Dependency ranges changed: base
Files
- ChangeLog.md +20/−0
- listenbrainz-client.cabal +2/−2
- src/Web/ListenBrainz.hs +26/−6
ChangeLog.md view
@@ -1,6 +1,26 @@+# 1.1.1++## Other Changes++* Increased upper bound of `base` to allow 4.10.++# 1.1.0++## Breaking Changes++* `ListenData` no longer has an `Ord` instance. This is due to `TrackMetadata` losing its `Ord` instance.+* `TrackMetadata` has gained `trackReleaseName` and `trackAdditionalInfo` fields.+* `TrackMetadata` no longer has an `Ord` instance, as `trackAdditionalInfo` is an Aeson `Object` that lacks `Ord`.++## Other Changes++* Documentation!++ # 1.0.1 Export a few more symbols+ # 1.0.0
listenbrainz-client.cabal view
@@ -1,5 +1,5 @@ name: listenbrainz-client-version: 1.0.1+version: 1.1.1 synopsis: A client library to the ListenBrainz project homepage: https://github.com/ocharles/listenbrainz-client license: BSD3@@ -14,7 +14,7 @@ library exposed-modules: Web.ListenBrainz build-depends: aeson >= 1.0.2.1,- base >=4.9 && <4.10,+ base >=4.9 && <4.11, free >= 4.12.4, freer-effects >= 0.3.0.1, http-client >= 0.5.7.0,
src/Web/ListenBrainz.hs view
@@ -10,6 +10,7 @@ {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeOperators #-} +-- | A basic client to interact with ListenBrainz. module Web.ListenBrainz ( MonadListenBrainz(..) , runListenBrainzEff@@ -55,8 +56,9 @@ import Control.Monad.Freer.Exception import Control.Monad.IO.Class import Control.Monad.Trans.Reader-import Data.Aeson (FromJSON(..), ToJSON(..), (.=), (.:))+import Data.Aeson (Object, FromJSON(..), ToJSON(..), (.=), (.:), (.:?)) import qualified Data.Aeson as JSON+import Data.Foldable (fold) import Data.Functor.Coyoneda import Data.Monoid import Data.Proxy (Proxy(..))@@ -108,10 +110,13 @@ ] +-- | Information about a single listen at a point in time. data ListenData = ListenData { listenListenedAt :: UTCTime+ -- ^ When this listen was recorded. , listenTrackMetadata :: TrackMetadata- } deriving (Eq, Ord, Read, Show, Generic)+ -- ^ Information about the track that was listened to.+ } deriving (Eq, Read, Show, Generic) instance ToJSON ListenData where@@ -134,18 +139,27 @@ pure ListenData{..} +-- | Metadata about a track that was listened to. data TrackMetadata = TrackMetadata { trackArtist :: Text , trackName :: Text- } deriving (Eq, Ord, Read, Show, Generic)+ , trackReleaseName :: Maybe Text+ -- ^ The name of the release this recording was played from.+ , trackAdditionalInfo :: Object+ -- ^ Arbitrary and unstructured extra information. For more information, see the [ListenBrainz documentation](https://listenbrainz.readthedocs.io/en/production/dev/json.html#payload-json-details).+ } deriving (Eq, Read, Show, Generic) instance ToJSON TrackMetadata where toJSON TrackMetadata {..} = JSON.object- [ "artist_name" .= trackArtist- , "track_name" .= trackName- ]+ (concat+ [ [ "artist_name" .= trackArtist+ , "track_name" .= trackName+ , "additional_info" .= trackAdditionalInfo+ ]+ , foldMap (pure . ("release_name" .=)) trackReleaseName+ ]) instance FromJSON TrackMetadata where@@ -156,6 +170,12 @@ trackName <- o .: "track_name"++ trackReleaseName <-+ o .:? "release_name"++ trackAdditionalInfo <-+ fmap fold (o .:? "additional_info") pure TrackMetadata{..}