packages feed

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 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  -- |