@@ -128,7 +128,7 @@ defmodule M51.MatrixClient.Poller do
128128 end )
129129 end
130130
131- defp well_formed_event? ( event , irc_state , write ) do
131+ defp well_formed_event? ( is_backlog , event , irc_state , write ) do
132132 case event do
133133 % {
134134 "content" => % { } ,
@@ -138,6 +138,9 @@ defmodule M51.MatrixClient.Poller do
138138 when is_binary ( sender ) and is_binary ( type ) ->
139139 true
140140
141+ _ when is_backlog ->
142+ nil
143+
141144 _ ->
142145 nick = M51.IrcConn.State . nick ( irc_state )
143146
@@ -162,7 +165,7 @@ defmodule M51.MatrixClient.Poller do
162165 room_event
163166 |> Map . get ( "state" , % { } )
164167 |> Map . get ( "events" , [ ] )
165- |> Enum . filter ( fn event -> well_formed_event? ( event , irc_state , write ) end )
168+ |> Enum . filter ( fn event -> well_formed_event? ( is_backlog , event , irc_state , write ) end )
166169 # oldest first
167170 |> Enum . map ( fn event ->
168171 event_id = Map . get ( event , "event_id" )
@@ -203,7 +206,7 @@ defmodule M51.MatrixClient.Poller do
203206 room_event
204207 |> Map . get ( "timeline" , % { } )
205208 |> Map . get ( "events" , [ ] )
206- |> Enum . filter ( fn event -> well_formed_event? ( event , irc_state , write ) end )
209+ |> Enum . filter ( fn event -> well_formed_event? ( is_backlog , event , irc_state , write ) end )
207210 # oldest first
208211 |> Enum . map ( fn event ->
209212 event_id = Map . get ( event , "event_id" )
@@ -279,11 +282,21 @@ defmodule M51.MatrixClient.Poller do
279282 end
280283 end
281284
285+ def handle_event (
286+ _sup_pid ,
287+ _room_id ,
288+ _sender ,
289+ true ,
290+ _write ,
291+ % { "type" => "m.room.join_rules" }
292+ ) do
293+ end
294+
282295 def handle_event (
283296 sup_pid ,
284297 room_id ,
285298 sender ,
286- is_backlog ,
299+ false ,
287300 write ,
288301 % {
289302 "type" => "m.room.join_rules" ,
@@ -295,24 +308,22 @@ defmodule M51.MatrixClient.Poller do
295308 channel = M51.MatrixClient.State . room_irc_channel ( state , room_id )
296309 send = make_send_function ( sup_pid , event , write )
297310
298- if ! is_backlog do
299- mode =
300- case join_rule do
301- "public" -> "-i"
302- "knock" -> "+i"
303- "invite" -> "+i"
304- "private" -> "+i"
305- _ -> nil
306- end
307-
308- if mode != nil do
309- send . ( % M51.Irc.Command {
310- tags: % { "account" => sender } ,
311- source: nick2nuh ( sender ) ,
312- command: "MODE" ,
313- params: [ channel , mode ]
314- } )
311+ mode =
312+ case join_rule do
313+ "public" -> "-i"
314+ "knock" -> "+i"
315+ "invite" -> "+i"
316+ "private" -> "+i"
317+ _ -> nil
315318 end
319+
320+ if mode != nil do
321+ send . ( % M51.Irc.Command {
322+ tags: % { "account" => sender } ,
323+ source: nick2nuh ( sender ) ,
324+ command: "MODE" ,
325+ params: [ channel , mode ]
326+ } )
316327 end
317328
318329 nil
@@ -435,11 +446,23 @@ defmodule M51.MatrixClient.Poller do
435446 nil
436447 end
437448
449+ def handle_event (
450+ _sup_pid ,
451+ _room_id ,
452+ _sender ,
453+ true ,
454+ _write ,
455+ % { "type" => "m.room.message" }
456+ ) do
457+ # do not show messages from the backlog
458+ nil
459+ end
460+
438461 def handle_event (
439462 sup_pid ,
440463 room_id ,
441464 sender ,
442- _is_backlog ,
465+ false ,
443466 write ,
444467 % { "type" => "m.room.message" , "content" => % { } } = event
445468 ) do
@@ -669,11 +692,22 @@ defmodule M51.MatrixClient.Poller do
669692 nil
670693 end
671694
695+ def handle_event (
696+ _sup_pid ,
697+ _room_id ,
698+ _sender ,
699+ true ,
700+ _write ,
701+ % { "type" => "m.reaction" }
702+ ) do
703+ nil
704+ end
705+
672706 def handle_event (
673707 sup_pid ,
674708 room_id ,
675709 sender ,
676- _is_backlog ,
710+ false ,
677711 write ,
678712 % { "type" => "m.reaction" , "content" => % { } } = event
679713 ) do
@@ -726,11 +760,22 @@ defmodule M51.MatrixClient.Poller do
726760 end
727761 end
728762
763+ def handle_event (
764+ _sup_pid ,
765+ _room_id ,
766+ _sender ,
767+ true ,
768+ _write ,
769+ % { "type" => "m.sticker" }
770+ ) do
771+ nil
772+ end
773+
729774 def handle_event (
730775 sup_pid ,
731776 room_id ,
732777 sender ,
733- _is_backlog ,
778+ false ,
734779 write ,
735780 % { "type" => "m.sticker" , "content" => % { } } = event
736781 ) do
@@ -781,11 +826,22 @@ defmodule M51.MatrixClient.Poller do
781826 end
782827 end
783828
829+ def handle_event (
830+ _sup_pid ,
831+ _room_id ,
832+ _sender ,
833+ true ,
834+ _write ,
835+ % { "type" => "m.room.redaction" , "content" => % { } }
836+ ) do
837+ nil
838+ end
839+
784840 def handle_event (
785841 sup_pid ,
786842 room_id ,
787843 sender ,
788- _is_backlog ,
844+ false ,
789845 write ,
790846 % { "type" => "m.room.redaction" , "content" => % { } } = event
791847 ) do
@@ -828,11 +884,22 @@ defmodule M51.MatrixClient.Poller do
828884 } )
829885 end
830886
887+ def handle_event (
888+ _sup_pid ,
889+ _room_id ,
890+ _sender ,
891+ true ,
892+ _write ,
893+ % { "type" => "m.room.encrypted" }
894+ ) do
895+ nil
896+ end
897+
831898 def handle_event (
832899 sup_pid ,
833900 room_id ,
834901 sender ,
835- _is_backlog ,
902+ false ,
836903 write ,
837904 % { "type" => "m.room.encrypted" , "content" => % { } } = event
838905 ) do
@@ -954,7 +1021,11 @@ defmodule M51.MatrixClient.Poller do
9541021 # ignore these
9551022 end
9561023
957- def handle_event ( sup_pid , room_id , _sender , _is_backlog , write , event ) do
1024+ def handle_event ( _sup_pid , _room_id , _sender , true , _write , _event ) do
1025+ # Unknown or malformed event in the backlog
1026+ end
1027+
1028+ def handle_event ( sup_pid , room_id , _sender , false , write , event ) do
9581029 state = M51.IrcConn.Supervisor . matrix_state ( sup_pid )
9591030 channel = M51.MatrixClient.State . room_irc_channel ( state , room_id )
9601031 send = make_send_function ( sup_pid , event , write )
@@ -988,7 +1059,7 @@ defmodule M51.MatrixClient.Poller do
9881059 # TODO
9891060 end
9901061
991- defp handle_invited_room ( sup_pid , _is_backlog , handled_event_ids , room_id , write , room_event ) do
1062+ defp handle_invited_room ( sup_pid , is_backlog , handled_event_ids , room_id , write , room_event ) do
9921063 irc_state = M51.IrcConn.Supervisor . state ( sup_pid )
9931064 state = M51.IrcConn.Supervisor . matrix_state ( sup_pid )
9941065 nick = M51.IrcConn.State . nick ( irc_state )
@@ -997,7 +1068,7 @@ defmodule M51.MatrixClient.Poller do
9971068 room_event
9981069 |> Map . get ( "invite_state" , % { } )
9991070 |> Map . get ( "events" , [ ] )
1000- |> Enum . filter ( fn event -> well_formed_event? ( event , irc_state , write ) end )
1071+ |> Enum . filter ( fn event -> well_formed_event? ( is_backlog , event , irc_state , write ) end )
10011072 # oldest first
10021073 |> Enum . map ( fn event ->
10031074 event_id = Map . get ( event , "event_id" )
0 commit comments