summaryrefslogtreecommitdiff
path: root/lib/polyjuice/client/sync.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/polyjuice/client/sync.ex')
-rw-r--r--lib/polyjuice/client/sync.ex64
1 files changed, 36 insertions, 28 deletions
diff --git a/lib/polyjuice/client/sync.ex b/lib/polyjuice/client/sync.ex
index 1f4c2f8..fe4dd1a 100644
--- a/lib/polyjuice/client/sync.ex
+++ b/lib/polyjuice/client/sync.ex
@@ -40,7 +40,7 @@ defmodule Polyjuice.Client.Sync do
query_params: "",
backoff: nil,
set_filter: nil,
- initial_done: false,
+ initial_done: false
]
@sync_path "_matrix/client/r0/sync"
@@ -165,11 +165,15 @@ defmodule Polyjuice.Client.Sync do
case status_code do
200 ->
{:ok, body} = :hackney.body(client_ref)
+
with {:ok, %{} = json_body} <- Poison.decode(body),
filter_id = Map.get(json_body, "filter_id") do
Logger.debug("got filter id #{filter_id}")
+
Polyjuice.Client.Storage.set_filter_id(
- state.storage, state.set_filter, filter_id
+ state.storage,
+ state.set_filter,
+ filter_id
)
do_sync(%{
@@ -228,14 +232,17 @@ defmodule Polyjuice.Client.Sync do
case status_code do
200 ->
{:ok, body} = :hackney.body(client_ref)
+
with {:ok, json_body} <- Poison.decode(body),
%{"next_batch" => next_batch} <- json_body do
if state.backoff, do: Logger.info("Sync resumed")
process_body(json_body, state)
Polyjuice.Client.Storage.set_sync_token(state.storage, next_batch)
+
if not state.initial_done do
send(state.listener, {:initial_sync_completed})
end
+
do_sync(%{state | since: next_batch, backoff: nil, initial_done: true})
else
_ ->
@@ -284,12 +291,10 @@ defmodule Polyjuice.Client.Sync do
rooms
|> Map.get("leave", [])
- |> Enum.each(
- fn {k, v} ->
- process_room(k, v, state)
- send(state.listener, {:left, k})
- end
- )
+ |> Enum.each(fn {k, v} ->
+ process_room(k, v, state)
+ send(state.listener, {:left, k})
+ end)
end
defp process_room(roomname, room, state) do
@@ -346,29 +351,32 @@ defmodule Polyjuice.Client.Sync do
defp process_invite(roomname, room, state) do
Logger.debug("invite received #{inspect(room)}")
# The invite state is a map from state type to state key to event.
- invite_state = Enum.reduce(
- Map.get(room, "invite_state", %{}) |> Map.get("events", []),
- %{},
- fn
- %{
- "type" => type,
- "state_key" => state_key
- } = val, acc ->
- Map.get(acc, type, %{})
- |> Map.put(state_key, val)
- |> (&Map.put(acc, type, &1)).()
-
- _, acc ->
- acc
- end
- )
+ invite_state =
+ Enum.reduce(
+ Map.get(room, "invite_state", %{}) |> Map.get("events", []),
+ %{},
+ fn
+ %{
+ "type" => type,
+ "state_key" => state_key
+ } = val,
+ acc ->
+ Map.get(acc, type, %{})
+ |> Map.put(state_key, val)
+ |> (&Map.put(acc, type, &1)).()
+
+ _, acc ->
+ acc
+ end
+ )
Logger.debug("state #{inspect(invite_state)}")
- inviter = invite_state
- |> Map.get("m.room.member", %{})
- |> Map.get(state.user_id, %{})
- |> Map.get("sender")
+ inviter =
+ invite_state
+ |> Map.get("m.room.member", %{})
+ |> Map.get(state.user_id, %{})
+ |> Map.get("sender")
if inviter do
send(