mattermost-api 50200.15.0 → 90000.0.0
raw patch · 5 files changed
+39/−4 lines, 5 filesdep +crypton-connectionPVP ok
version bump matches the API change (PVP)
Dependencies added: crypton-connection
API changes (from Hackage documentation)
+ Network.Mattermost.Lenses: wepChannelTimesL :: Lens' WEData (Maybe (HashMap ChannelId ServerTime))
+ Network.Mattermost.WebSocket.Types: WMMultipleChannelsViewed :: WebsocketEventType
+ Network.Mattermost.WebSocket.Types: [wepChannelTimes] :: WEData -> Maybe (HashMap ChannelId ServerTime)
- Network.Mattermost.Types: ChannelMember :: Integer -> UserId -> Text -> Int -> ServerTime -> ChannelId -> ServerTime -> ChannelNotifyProps -> ChannelMember
+ Network.Mattermost.Types: ChannelMember :: Int -> UserId -> Text -> Int -> ServerTime -> ChannelId -> ServerTime -> ChannelNotifyProps -> ChannelMember
- Network.Mattermost.Types: [channelMemberMsgCount] :: ChannelMember -> Integer
+ Network.Mattermost.Types: [channelMemberMsgCount] :: ChannelMember -> Int
- Network.Mattermost.WebSocket.Types: WEData :: Maybe ChannelId -> Maybe TeamId -> Maybe Text -> Maybe UserId -> Maybe PostId -> Maybe User -> Maybe Text -> Maybe Post -> Maybe Text -> Maybe Reaction -> Maybe (Set UserId) -> Maybe (Seq Preference) -> Maybe ChannelMember -> WEData
+ Network.Mattermost.WebSocket.Types: WEData :: Maybe ChannelId -> Maybe TeamId -> Maybe Text -> Maybe UserId -> Maybe PostId -> Maybe User -> Maybe Text -> Maybe Post -> Maybe Text -> Maybe Reaction -> Maybe (Set UserId) -> Maybe (Seq Preference) -> Maybe ChannelMember -> Maybe (HashMap ChannelId ServerTime) -> WEData
Files
- CHANGELOG.md +14/−0
- examples/GetPosts.hs +1/−1
- mattermost-api.cabal +2/−2
- src/Network/Mattermost/Types.hs +1/−1
- src/Network/Mattermost/WebSocket/Types.hs +21/−0
CHANGELOG.md view
@@ -1,4 +1,18 @@ +90000.0.0+=========++Package changes:+* Updated the package to use `crypton-connection` since `connection` is+ now unmaintained.++API changes:+* Updated the `ChannelMember` type's `channelMemberMsgCount` field to+ have type `Int`, not `Integer`, to match all other numeric types in+ the API.+* Added support for `multiple_channels_viewed` websocket event added in+ Mattermost 9.0.+ 50200.15.0 ==========
examples/GetPosts.hs view
@@ -117,7 +117,7 @@ pPrint teams forM_ teams $ \t -> do when (teamName t == configTeam config) $ do- users <- mmGetUsers (defaultUserQuery { userQueryInTeam = Just (getId t), userQueryPerPage = Just 1000 }) session+ users <- mmGetUsers (defaultUserQuery { userQueryInTeam = Just (getId t), userQueryPerPage = Just 200 }) session let userMap = HM.fromList [ (getId u, u) | u <- toList users ] when (optVerbose opts) $ do pPrint userMap
mattermost-api.cabal view
@@ -1,5 +1,5 @@ name: mattermost-api-version: 50200.15.0+version: 90000.0.0 synopsis: Client API for Mattermost chat system description: Client API for Mattermost chat system. Mattermost is a@@ -50,7 +50,7 @@ , websockets >= 0.11.0.0 , stm , aeson >= 2.0.1.0 && < 2.2.0.0- , connection+ , crypton-connection , memory , resource-pool >= 0.2.3 -- To prevent broken websockets versions from using
src/Network/Mattermost/Types.hs view
@@ -1483,7 +1483,7 @@ ] data ChannelMember = ChannelMember- { channelMemberMsgCount :: Integer+ { channelMemberMsgCount :: Int , channelMemberUserId :: UserId , channelMemberRoles :: Text , channelMemberMentionCount :: Int
src/Network/Mattermost/WebSocket/Types.hs view
@@ -15,6 +15,7 @@ import Control.Applicative import Control.Exception ( throw )+import Control.Monad ( forM ) import Data.Aeson ( FromJSON(..) , ToJSON(..) , (.:)@@ -22,6 +23,8 @@ , (.=) ) import qualified Data.Aeson as A+import qualified Data.Aeson.Key as A+import qualified Data.Aeson.KeyMap as A import qualified Data.Aeson.Types as A #if !MIN_VERSION_base(4,11,0) import Data.Monoid ( (<>) )@@ -69,6 +72,7 @@ | WMReactionAdded | WMReactionRemoved | WMChannelViewed+ | WMMultipleChannelsViewed | WMChannelUpdated | WMChannelMemberUpdated | WMEmojiAdded@@ -107,6 +111,7 @@ "authentication_challenge" -> return WMAuthenticationChallenge "preferences_deleted" -> return WMPreferenceDeleted "channel_viewed" -> return WMChannelViewed+ "multiple_channels_viewed" -> return WMMultipleChannelsViewed "channel_updated" -> return WMChannelUpdated "channel_member_updated" -> return WMChannelMemberUpdated "emoji_added" -> return WMEmojiAdded@@ -143,6 +148,7 @@ toJSON WMWebRTC = "webrtc" toJSON WMAuthenticationChallenge = "authentication_challenge" toJSON WMChannelViewed = "channel_viewed"+ toJSON WMMultipleChannelsViewed = "multiple_channels_viewed" toJSON WMChannelUpdated = "channel_updated" toJSON WMChannelMemberUpdated = "channel_member_updated" toJSON WMEmojiAdded = "emoji_added"@@ -163,6 +169,14 @@ Right v -> return v Left err -> throw (JSONDecodeException err (T.unpack s)) +fromChannelTimesMap :: A.Value -> A.Parser (HM.HashMap ChannelId ServerTime)+fromChannelTimesMap = A.withObject "Channel times map" $ \o -> do+ pairs <- forM (A.toList o) $ \(k, v) -> do+ t <- timeFromServer <$> A.parseJSON v+ return (fromId $ Id $ T.pack $ A.toString k, t)++ return $ HM.fromList pairs+ -- data WebsocketEvent = WebsocketEvent@@ -212,6 +226,7 @@ , wepMentions :: Maybe (Set UserId) , wepPreferences :: Maybe (Seq Preference) , wepChannelMember :: Maybe ChannelMember+ , wepChannelTimes :: Maybe (HM.HashMap ChannelId ServerTime) } deriving (Read, Show, Eq) instance FromJSON WEData where@@ -229,6 +244,7 @@ wepMentions <- mapM fromValueString =<< o .:? "mentions" wepPreferences <- mapM fromValueString =<< o .:? "preferences" wepChannelMember <- mapM fromValueString =<< o .:? "channelMember"+ wepChannelTimes <- mapM fromChannelTimesMap =<< o .:? "channel_times" return WEData { .. } instance ToJSON WEData where@@ -244,6 +260,11 @@ , "mentions" .= toValueString wepMentions , "preferences" .= toValueString wepPreferences , "channelMember" .= toValueString wepChannelMember+ , "channelTimes" .= do+ m <- wepChannelTimes+ let pairs = HM.toList m+ mkEntry (cId, t) = (A.fromString $ T.unpack $ unId $ toId cId, timeToServer t)+ return $ A.fromList $ mkEntry <$> pairs ] --