module Pinboard.Api
(
getPostsRecent,
getPostsForDate,
getPostsAll,
getPostsDates,
getPostsMRUTime,
getSuggestedTags,
addPost,
deletePost,
getTags,
renameTag,
deleteTag,
getUserSecretRssKey,
getUserApiToken,
getNoteList,
getNote,
) where
import Prelude hiding (unwords)
import Pinboard.Client.Internal (pinboardJson)
import Pinboard.Client.Types (Pinboard, PinboardRequest (..), Param (..))
import Pinboard.Client.Util ((</>))
import Control.Applicative ((<$>))
import Data.Text (Text, unwords)
import Data.Time (UTCTime)
import Data.Maybe (catMaybes)
import Pinboard.ApiTypes
getPostsRecent
:: Maybe [Tag]
-> Maybe Count
-> Pinboard Posts
getPostsRecent tags count = pinboardJson (PinboardRequest path params)
where
path = "posts/recent"
params = catMaybes [ Tag . unwords <$> tags
, Count <$> count ]
getPostsAll
:: Maybe [Tag]
-> Maybe StartOffset
-> Maybe NumResults
-> Maybe FromDateTime
-> Maybe ToDateTime
-> Maybe Meta
-> Pinboard [Post]
getPostsAll tags start results fromdt todt meta =
pinboardJson (PinboardRequest path params)
where
path = "posts/all"
params = catMaybes [ Tag . unwords <$> tags
, Start <$> start
, Results <$> results
, FromDateTime <$> fromdt
, ToDateTime <$> todt
, Meta <$> meta
]
getPostsForDate
:: Maybe [Tag]
-> Maybe Date
-> Maybe Url
-> Pinboard Posts
getPostsForDate tags date url = pinboardJson (PinboardRequest path params)
where
path = "posts/get"
params = catMaybes [ Tag . unwords <$> tags
, Date <$> date
, Url <$> url ]
getPostsDates
:: Maybe [Tag]
-> Pinboard PostDates
getPostsDates tags = pinboardJson (PinboardRequest path params)
where
path = "posts/dates"
params = catMaybes [ Tag . unwords <$> tags ]
getPostsMRUTime :: Pinboard UTCTime
getPostsMRUTime = fromUpdateTime <$> pinboardJson (PinboardRequest path params)
where
path = "posts/update"
params = []
getSuggestedTags
:: Url
-> Pinboard [Suggested]
getSuggestedTags url = pinboardJson (PinboardRequest path params)
where
path = "posts/suggest"
params = [ Url url ]
deletePost
:: Url
-> Pinboard ()
deletePost url = fromDoneResult <$> pinboardJson (PinboardRequest path params)
where
path = "posts/delete"
params = [Url url]
addPost
:: Url
-> Description
-> Maybe Extended
-> Maybe [Tag]
-> Maybe DateTime
-> Maybe Replace
-> Maybe Shared
-> Maybe ToRead
-> Pinboard ()
addPost url descr ext tags ctime repl shared toread =
fromDoneResult <$> pinboardJson (PinboardRequest path params)
where
path = "posts/add"
params = catMaybes [ Just $ Url url
, Just $ Description descr
, Extended <$> ext
, Tags . unwords <$> tags
, DateTime <$> ctime
, Replace <$> repl
, Shared <$> shared
, ToRead <$> toread ]
getTags :: Pinboard TagMap
getTags = fromJsonTagMap <$> pinboardJson (PinboardRequest path params)
where
path = "tags/get"
params = []
deleteTag
:: Tag
-> Pinboard ()
deleteTag tag = fromDoneResult <$> pinboardJson (PinboardRequest path params)
where
path = "tags/delete"
params = [Tag tag]
renameTag
:: Old
-> New
-> Pinboard ()
renameTag old new = fromDoneResult <$> pinboardJson (PinboardRequest path params)
where
path = "tags/rename"
params = [Old old, New new]
getUserSecretRssKey :: Pinboard Text
getUserSecretRssKey = fromTextResult <$> pinboardJson (PinboardRequest path params)
where
path = "user/secret"
params = []
getUserApiToken :: Pinboard Text
getUserApiToken = fromTextResult <$> pinboardJson (PinboardRequest path params)
where
path = "user/api_token"
params = []
getNoteList :: Pinboard NoteList
getNoteList = pinboardJson (PinboardRequest path params)
where
path = "notes/list"
params = []
getNote
:: NoteId
-> Pinboard Note
getNote noteid = pinboardJson (PinboardRequest path params)
where
path = "notes" </> noteid
params = []