summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorArjan Scherpenisse <arjan@scherpenisse.net>2021-02-19 13:03:24 +0100
committerArjan Scherpenisse <arjan@scherpenisse.net>2021-02-20 09:08:56 +0100
commita946555b69a584f74455e5124d4d2597bc5114c7 (patch)
tree92895ec3228fef5a6d80626fc9ccab7a16ec5b42 /lib
parentMove defmodule out of client test so each test can be run individually (diff)
Handle ephemeral events (e.g. for typing indicator)
Diffstat (limited to 'lib')
-rw-r--r--lib/polyjuice/client/sync.ex40
1 files changed, 17 insertions, 23 deletions
diff --git a/lib/polyjuice/client/sync.ex b/lib/polyjuice/client/sync.ex
index c315e90..7b995b4 100644
--- a/lib/polyjuice/client/sync.ex
+++ b/lib/polyjuice/client/sync.ex
@@ -414,37 +414,31 @@ defmodule Polyjuice.Client.Sync do
room
|> Map.get("state", %{})
|> Map.get("events", [])
- |> Enum.each(&process_event(&1, roomname, state))
+ |> Enum.each(&process_event(&1, roomname, nil, state))
- timeline
+ room
+ |> Map.get("ephemeral", %{})
|> Map.get("events", [])
- |> Enum.each(&process_event(&1, roomname, state))
- end
+ |> Enum.each(&process_event(&1, roomname, :ephemeral, state))
- defp process_event(
- %{
- "state_key" => _state_key
- } = event,
- roomname,
- state
- ) do
- Polyjuice.Client.Handler.handle(state.handler, :state, {roomname, event})
-
- state
+ timeline
+ |> Map.get("events", [])
+ |> Enum.each(&process_event(&1, roomname, nil, state))
end
- defp process_event(
- %{} = event,
- roomname,
- state
- ) do
- Polyjuice.Client.Handler.handle(state.handler, :message, {roomname, event})
+ defp process_event(%{} = event, roomname, type, state) do
+ type =
+ type ||
+ case event do
+ %{"state_key" => _} -> :state
+ _ -> :message
+ end
- state
+ Polyjuice.Client.Handler.handle(state.handler, type, {roomname, event})
end
- defp process_event(_, _, state) do
- state
+ defp process_event(_, _, _, _state) do
+ :ok
end
defp process_invite(roomname, room, state) do