hzulip 0.2.0.2 → 0.2.0.3
raw patch · 3 files changed
+28/−18 lines, 3 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- HZulip: messageDisplayRecipient :: Message -> Either String [User]
- HZulip: Event :: String -> String -> Maybe Message -> Event
+ HZulip: Event :: String -> Int -> Maybe Message -> Event
- HZulip: Message :: String -> String -> String -> String -> Int -> Either String [User] -> User -> String -> String -> String -> [String] -> String -> Message
+ HZulip: Message :: Int -> String -> String -> String -> Int -> User -> String -> Int -> String -> [String] -> String -> Message
- HZulip: User :: String -> String -> String -> String -> String -> User
+ HZulip: User :: Int -> String -> String -> String -> String -> User
- HZulip: eventId :: Event -> String
+ HZulip: eventId :: Event -> Int
- HZulip: getEvents :: ZulipClient -> Queue -> Bool -> IO [Event]
+ HZulip: getEvents :: ZulipClient -> Queue -> Bool -> IO (Queue, [Event])
- HZulip: messageId :: Message -> String
+ HZulip: messageId :: Message -> Int
- HZulip: messageRecipientId :: Message -> String
+ HZulip: messageRecipientId :: Message -> Int
- HZulip: sendMessage :: ZulipClient -> String -> [String] -> String -> String -> IO String
+ HZulip: sendMessage :: ZulipClient -> String -> [String] -> String -> String -> IO Int
- HZulip: userId :: User -> String
+ HZulip: userId :: User -> Int
Files
- hzulip.cabal +1/−1
- src/HZulip.hs +15/−6
- src/HZulip/Types.hs +12/−11
hzulip.cabal view
@@ -1,5 +1,5 @@ name: hzulip-version: 0.2.0.2+version: 0.2.0.3 synopsis: A haskell wrapper for the Zulip API. description: This a Zulip API wrapper for Haskell. homepage: https://github.com/yamadapc/hzulip
src/HZulip.hs view
@@ -14,8 +14,9 @@ ) where +import Control.Concurrent+import Control.Exception import Control.Lens ((.~), (&), (^.))-import Control.Monad (forever) import qualified Data.ByteString.Char8 as BS (pack) import qualified Data.Text as T (pack) import Network.Wreq@@ -44,7 +45,7 @@ -- -- It takes the message `mtype`, `mrecipients`, `msubject` and `mcontent` -- and returns the created message's `id` in the `IO` monad.-sendMessage :: ZulipClient -> String -> [String] -> String -> String -> IO String+sendMessage :: ZulipClient -> String -> [String] -> String -> String -> IO Int sendMessage z mtype mrecipients msubject mcontent = do let form = [ "type" := mtype , "content" := mcontent@@ -83,7 +84,7 @@ -- | -- Fetches new set of events from a `Queue`.-getEvents :: ZulipClient -> Queue -> Bool -> IO [Event]+getEvents :: ZulipClient -> Queue -> Bool -> IO (Queue, [Event]) getEvents z q b = do let opts = (reqOptions z) { WT.params = [ ("queue_id", T.pack $ queueId q) , ("last_event_id", T.pack $ show $@@ -97,7 +98,10 @@ let body = r ^. responseBody if wasSuccessful body- then let Just evs = responseEvents body in return evs+ then let Just evs = responseEvents body+ -- Get the last event id and pass it back with the `Queue`+ lEvId = maximum $ map eventId evs in+ return (q { lastEventId = lEvId }, evs) else fail $ responseMsg body -- |@@ -105,8 +109,13 @@ -- events as they come in. Will loop forever onNewEvent :: ZulipClient -> Bool -> EventCallback -> IO () onNewEvent z b f = do- q <- registerQueue z [] b- forever $ getEvents z q b >>= mapM_ f+ q <- registerQueue z ["message"] b+ handle (tryAgain q) (loop q)+ where tryAgain :: Queue -> SomeException -> IO ()+ tryAgain q = const $ threadDelay 1000000 >> loop q+ loop q = getEvents z q False >>=+ \(q', evts) -> mapM_ f evts >>+ loop q' -- Private functions: -------------------------------------------------------------------------------
src/HZulip/Types.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE OverloadedStrings #-}+ module HZulip.Types where import Control.Applicative ((<$>), (<*>), pure)@@ -18,7 +19,7 @@ data Response = Response { responseResult :: ResponseResult , responseMsg :: String - , responseMessageId :: Maybe String+ , responseMessageId :: Maybe Int , responseQueueId :: Maybe String , responseLastEventId :: Maybe Int @@ -49,7 +50,7 @@ -- | -- Represents zulip events data Event = Event { eventType :: String- , eventId :: String+ , eventId :: Int , eventMessage :: Maybe Message } @@ -62,20 +63,20 @@ -- | -- Represents a Zulip Message-data Message = Message { messageId :: String+data Message = Message { messageId :: Int , messageType :: String , messageContent :: String , messageAvatarUrl :: String , messageTimestamp :: Int - , messageDisplayRecipient :: Either String [User]+ -- , messageDisplayRecipient :: Either String [User] , messageSender :: User , messageGravatarHash :: String - , messageRecipientId :: String+ , messageRecipientId :: Int , messageClient :: String , messageSubjectLinks :: [String] , messageSubject :: String@@ -90,14 +91,14 @@ o .: "avatar_url" <*> o .: "timestamp" <*> - o .: "display_recipient" <*>+ -- o .: "display_recipient" <*> (User <$>+ o .: "sender_id" <*> o .: "sender_full_name" <*> o .: "sender_domain" <*> o .: "sender_email" <*>- o .: "sender_short_name" <*>- o .: "sender_id"+ o .: "sender_short_name" ) <*> o .: "gravatar_hash" <*>@@ -111,7 +112,7 @@ -- | -- Represents a zulip user account - for both `display_recipient` and -- `message_sender` representations-data User = User { userId :: String+data User = User { userId :: Int , userFullName :: String , userEmail :: String , userDomain :: String@@ -120,11 +121,11 @@ instance FromJSON User where parseJSON (Object o) = User <$>+ o .: "id" <*> o .: "full_name" <*> o .: "domain" <*> o .: "email" <*>- o .: "short_name" <*>- o .: "id"+ o .: "short_name" parseJSON _ = mzero -- |