fb 0.15.0 → 0.15.1
raw patch · 3 files changed
+99/−1 lines, 3 files
Files
- fb.cabal +2/−1
- src/Facebook.hs +6/−0
- src/Facebook/Object/FriendList.hs +91/−0
fb.cabal view
@@ -1,5 +1,5 @@ name: fb-version: 0.15.0+version: 0.15.1 license: BSD3 license-file: LICENSE author: Felipe Lessa@@ -54,6 +54,7 @@ Facebook.Pager Facebook.Graph Facebook.Object.Action+ Facebook.Object.FriendList Facebook.Object.Checkin Facebook.Object.User Facebook.Object.Page
src/Facebook.hs view
@@ -45,6 +45,7 @@ , getUserCheckins , Friend(..) , getUserFriends+ , getUserFriendLists -- ** Page , Page(..) , getPage@@ -63,6 +64,10 @@ , OrderApplication , OrderStatus , getOrder+ -- ** Friend list+ , FriendList(..)+ , FriendListType(..)+ , getFriendListMembers -- * Facebook's Graph API basic functionality -- ** Simple types@@ -138,6 +143,7 @@ import Facebook.Object.Action import Facebook.Object.Checkin import Facebook.Object.Order+import Facebook.Object.FriendList import Facebook.RealTime import Facebook.FQL import Facebook.TestUsers
+ src/Facebook/Object/FriendList.hs view
@@ -0,0 +1,91 @@+{-# LANGUAGE DeriveDataTypeable, FlexibleContexts, OverloadedStrings #-}+module Facebook.Object.FriendList+ ( FriendList(..)+ , FriendListType(..)+ , getUserFriendLists+ , getFriendListMembers+ ) where++import Control.Applicative+import Control.Monad (mzero)+import Control.Monad.Trans.Control (MonadBaseControl)+import Data.Aeson ((.:))+import Data.Text (Text)+import Data.Typeable (Typeable)++-- import qualified Control.Exception.Lifted as E+import qualified Data.Aeson as A+import qualified Data.Conduit as C+++import Facebook.Types+import Facebook.Monad+import Facebook.Graph+import Facebook.Pager+import Facebook.Object.User++-- | A friend list for a 'User'.+data FriendList =+ FriendList { friendListId :: Id+ , friendListName :: Text+ , friendListType :: FriendListType+ }+ deriving (Eq, Ord, Show, Read, Typeable)++instance A.FromJSON FriendList where+ parseJSON (A.Object v) =+ FriendList <$> v .: "id"+ <*> v .: "name"+ <*> v .: "list_type"+ parseJSON _ = mzero++data FriendListType = CloseFriendsList | AcquaintancesList | RestrictedList+ | UserCreatedList | EducationList | WorkList | CurrentCityList | FamilyList+ deriving (Eq, Ord, Show, Read, Enum, Typeable)++instance A.FromJSON FriendListType where+ parseJSON (A.String "close_friends") = return CloseFriendsList+ parseJSON (A.String "acquaintances") = return AcquaintancesList+ parseJSON (A.String "restricted") = return RestrictedList+ parseJSON (A.String "user_created") = return UserCreatedList+ parseJSON (A.String "education") = return EducationList+ parseJSON (A.String "work") = return WorkList+ parseJSON (A.String "current_city") = return CurrentCityList+ parseJSON (A.String "family") = return FamilyList+ parseJSON _ = mzero++instance A.ToJSON FriendListType where+ toJSON = A.toJSON . toText+ where+ toText :: FriendListType -> Text+ toText CloseFriendsList = "close_friends"+ toText AcquaintancesList = "aquaintances"+ toText RestrictedList = "restricted"+ toText UserCreatedList = "user_created"+ toText EducationList = "education"+ toText WorkList = "work"+ toText CurrentCityList = "current_city"+ toText FamilyList = "family"++-- close_friends, acquaintances, restricted, user_created, education, work, current_city, family++-- | Get the friend lists of the given user.+getUserFriendLists ::+ (C.MonadResource m, MonadBaseControl IO m) =>+ UserId -- ^ User ID or @\"me\"@.+ -> [Argument] -- ^ Arguments to be passed to Facebook.+ -> UserAccessToken -- ^ User access token.+ -> FacebookT anyAuth m (Pager FriendList)+getUserFriendLists id_ query token =+ getObject ("/" <> idCode id_ <> "/friendlists") query (Just token)++-- | Get the members of a friend list.+getFriendListMembers ::+ (C.MonadResource m, MonadBaseControl IO m) =>+ Id -- ^ List ID.+ -> [Argument] -- ^ Arguments to be passed to Facebook.+ -> UserAccessToken -- ^ User access token.+ -> FacebookT anyAuth m (Pager Friend)+getFriendListMembers id_ query token =+ getObject ("/" <> idCode id_ <> "/members") query (Just token)+