Scylla/src/Scylla/Messages.elm

49 lines
1.5 KiB
Elm
Raw Permalink Normal View History

module Scylla.Messages exposing (..)
2019-09-10 18:15:28 -07:00
import Scylla.Sync.Events exposing (RoomEvent, MessageEvent, toMessageEvent)
import Scylla.Login exposing (Username)
import Scylla.Route exposing (RoomId)
2019-09-11 00:52:42 -07:00
import Scylla.Room exposing (RoomData)
import Dict exposing (Dict)
type SendingMessageBody = TextMessage String
type alias SendingMessage =
{ body : SendingMessageBody
, id : Maybe String
}
type Message
= Sending SendingMessage
2019-09-10 18:15:28 -07:00
| Received MessageEvent
2019-09-12 15:56:21 -07:00
getUsername : Username -> Message -> Username
getUsername u msg = case msg of
2019-02-25 19:54:54 -08:00
Sending _ -> u
Received re -> re.sender
2019-09-12 15:56:21 -07:00
groupMessages : Username -> List Message -> List (Username, List Message)
groupMessages du xs =
let
initialState = (Nothing, [], [])
appendNamed mu ms msl = case mu of
Just u -> msl ++ [(u, ms)]
Nothing -> msl
foldFunction msg (pu, ms, msl) =
let
2019-09-12 15:56:21 -07:00
nu = Just <| getUsername du msg
in
if pu == nu then (pu, ms ++ [msg], msl) else (nu, [msg], appendNamed pu ms msl)
(fmu, fms, fmsl) = List.foldl foldFunction initialState xs
in
appendNamed fmu fms fmsl
2019-09-12 15:56:21 -07:00
getReceivedMessages : RoomData -> List Message
getReceivedMessages rd = rd.messages
2019-09-11 00:52:42 -07:00
|> List.filter (\e -> e.type_ == "m.room.message")
|> List.map Received
2019-09-12 15:56:21 -07:00
getSendingMessages : RoomId -> Dict Int (RoomId, SendingMessage) -> List Message
getSendingMessages rid ms = List.map (\(tid, (_, sm)) -> Sending sm)
<| List.filter (\(_, (nrid, _)) -> nrid == rid)
<| Dict.toList ms