Filter useless state events on the server side.

This means that presence events appear in the timeline, which is
something we DO want.
This commit is contained in:
Danila Fedorin 2018-12-27 22:33:48 -08:00
parent b0e796ee16
commit cf05f9dc4a
2 changed files with 16 additions and 11 deletions

View File

@ -5,12 +5,25 @@ import Scylla.Route exposing (RoomId)
import Scylla.Sync exposing (syncResponseDecoder, historyResponseDecoder) import Scylla.Sync exposing (syncResponseDecoder, historyResponseDecoder)
import Scylla.Login exposing (loginResponseDecoder, Username, Password) import Scylla.Login exposing (loginResponseDecoder, Username, Password)
import Scylla.UserData exposing (userDataDecoder, UserData) import Scylla.UserData exposing (userDataDecoder, UserData)
import Json.Encode exposing (object, string, int, bool) import Url.Builder
import Json.Encode exposing (object, string, int, bool, list)
import Http exposing (request, emptyBody, jsonBody, fileBody, expectJson, expectWhatever) import Http exposing (request, emptyBody, jsonBody, fileBody, expectJson, expectWhatever)
import File exposing (File, name, mime) import File exposing (File, name, mime)
import Url.Builder as Builder import Url.Builder as Builder
import Json.Decode import Json.Decode
firstSyncFilter : Json.Decode.Value
firstSyncFilter = object
[ ("room", object
[ ("state", object
[ ("types", list string [ "m.room.name" ])
])
])
]
firstSyncFilterString : String
firstSyncFilterString = Json.Encode.encode 0 firstSyncFilter
fullClientUrl : ApiUrl -> ApiUrl fullClientUrl : ApiUrl -> ApiUrl
fullClientUrl s = s ++ "/_matrix/client/r0" fullClientUrl s = s ++ "/_matrix/client/r0"
@ -22,7 +35,7 @@ firstSync : ApiUrl -> ApiToken -> Cmd Msg
firstSync apiUrl token = request firstSync apiUrl token = request
{ method = "GET" { method = "GET"
, headers = authenticatedHeaders token , headers = authenticatedHeaders token
, url = (fullClientUrl apiUrl) ++ "/sync" , url = Url.Builder.crossOrigin (fullClientUrl apiUrl) [ "sync" ] [ Url.Builder.string "filter" firstSyncFilterString ]
, body = emptyBody , body = emptyBody
, expect = expectJson ReceiveFirstSyncResponse syncResponseDecoder , expect = expectJson ReceiveFirstSyncResponse syncResponseDecoder
, timeout = Nothing , timeout = Nothing

View File

@ -392,19 +392,11 @@ mergeRooms r1 r2 =
} }
mergeSyncResponse : SyncResponse -> SyncResponse -> SyncResponse mergeSyncResponse : SyncResponse -> SyncResponse -> SyncResponse
mergeSyncResponse l r = filterUselessState <| mergeSyncResponse l r =
{ r | rooms = mergeMaybe mergeRooms l.rooms r.rooms { r | rooms = mergeMaybe mergeRooms l.rooms r.rooms
, accountData = mergeMaybe mergeAccountData l.accountData r.accountData , accountData = mergeMaybe mergeAccountData l.accountData r.accountData
} }
filterUselessState : SyncResponse -> SyncResponse
filterUselessState sr =
let
filterUselessRoomState _ r = { r | state = Maybe.map (\s -> { s | events = Maybe.map (List.filter (((==) "m.room.name") << .type_)) s.events }) r.state }
filterUselessRoomsState rs = { rs | join = Maybe.map (Dict.map filterUselessRoomState) rs.join }
in
{ sr | rooms = Maybe.map (filterUselessRoomsState) sr.rooms }
appendRoomHistoryResponse : JoinedRoom -> HistoryResponse -> JoinedRoom appendRoomHistoryResponse : JoinedRoom -> HistoryResponse -> JoinedRoom
appendRoomHistoryResponse jr hr = appendRoomHistoryResponse jr hr =
let let