mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-29 09:53:13 +03:00
chat-hook: fix synced map getting out of sync with outgoing subscriptions
This commit is contained in:
parent
3ab634a788
commit
f8320b3de1
@ -21,8 +21,10 @@
|
||||
state-4
|
||||
state-5
|
||||
state-6
|
||||
state-7
|
||||
==
|
||||
::
|
||||
+$ state-7 [%7 state-base]
|
||||
+$ state-6 [%6 state-base]
|
||||
+$ state-5 [%5 state-base]
|
||||
+$ state-4 [%4 state-base]
|
||||
@ -52,7 +54,7 @@
|
||||
$% [%chat-update update:store]
|
||||
==
|
||||
--
|
||||
=| state-6
|
||||
=| state-7
|
||||
=* state -
|
||||
::
|
||||
%- agent:dbug
|
||||
@ -81,8 +83,14 @@
|
||||
=/ old !<(versioned-state old-vase)
|
||||
=| cards=(list card)
|
||||
|-
|
||||
?: ?=(%6 -.old)
|
||||
?: ?=(%7 -.old)
|
||||
[cards this(state old)]
|
||||
?: ?=(%6 -.old)
|
||||
=. cards
|
||||
%+ weld cards
|
||||
^- (list card)
|
||||
[%pass /s %agent [our.bol %chat-hook] %poke %noun !>(%fix-out-of-sync)]~
|
||||
$(-.old %7)
|
||||
?: ?=(?(%3 %4 %5) -.old)
|
||||
=. cards
|
||||
%+ weld cards
|
||||
@ -327,7 +335,7 @@
|
||||
?+ mark (on-poke:def mark vase)
|
||||
%json (poke-json:cc !<(json vase))
|
||||
%chat-action (poke-chat-action:cc !<(action:store vase))
|
||||
%noun (poke-fix-dms:cc %fix-dms)
|
||||
%noun (poke-noun:cc !<(?(%fix-dm %fix-out-of-sync) vase))
|
||||
::
|
||||
%chat-hook-action
|
||||
(poke-chat-hook-action:cc !<(action:hook vase))
|
||||
@ -389,51 +397,80 @@
|
||||
|_ bol=bowl:gall
|
||||
++ grp ~(. grpl bol)
|
||||
::
|
||||
++ poke-fix-dms
|
||||
|= a=%fix-dms
|
||||
++ poke-noun
|
||||
|= a=?(%fix-dm %fix-out-of-sync)
|
||||
^- (quip card _state)
|
||||
|^
|
||||
:_ state
|
||||
%- zing
|
||||
%+ turn
|
||||
~(tap by synced)
|
||||
|= [=path host=ship]
|
||||
^- (list card)
|
||||
?> ?=([@ @ *] path)
|
||||
=/ =ship (slav %p i.path)
|
||||
?: =(ship our.bol)
|
||||
:: local dm, no need to do cleanup
|
||||
~
|
||||
?: ?=(^ (groups-of-chat path))
|
||||
:: correctly initialized, no need to do cleanup
|
||||
::
|
||||
~
|
||||
?. =((end 3 4 i.t.path) 'dm--')
|
||||
~
|
||||
:- =- [%pass /fixdm %agent [our.bol %chat-view] %poke %chat-view-action -]
|
||||
!> ^- action:view
|
||||
[%delete path]
|
||||
=/ new-dm /(scot %p our.bol)/(crip (weld "dm--" (trip (scot %p ship))))
|
||||
=/ mailbox=(unit mailbox:store) (chat-scry path)
|
||||
?~ mailbox
|
||||
~
|
||||
:~ =- [%pass /fixdm %agent [our.bol %chat-view] %poke %chat-view-action -]
|
||||
!> ^- action:view
|
||||
:* %create
|
||||
%- crip
|
||||
(zing [(trip (scot %p our.bol)) " <-> " (trip (scot %p ship)) ~])
|
||||
''
|
||||
new-dm
|
||||
ship+new-dm
|
||||
[%invite (silt ~[ship])]
|
||||
(silt ~[ship])
|
||||
%.y
|
||||
%.n
|
||||
==
|
||||
::
|
||||
=- [%pass /fixdm %agent [our.bol %chat-store] %poke %chat-action -]
|
||||
!> ^- action:store
|
||||
[%messages new-dm envelopes.u.mailbox]
|
||||
?- a
|
||||
%fix-dm (fix-dm %fix-dm)
|
||||
%fix-out-of-sync (fix-out-of-sync %fix-out-of-sync)
|
||||
==
|
||||
::
|
||||
++ fix-out-of-sync
|
||||
|= b=%fix-out-of-sync
|
||||
^- (list card)
|
||||
%- zing
|
||||
%+ turn ~(tap by synced)
|
||||
|= [=path host=ship]
|
||||
^- (list card)
|
||||
?: =(host our.bol) ~
|
||||
?> ?=([@ @ ~] path)
|
||||
=/ =ship (slav %p i.path)
|
||||
:~ =- [%pass / %agent [our.bol %chat-hook] %poke %chat-hook-action -]
|
||||
!> ^- action:hook
|
||||
[%remove path]
|
||||
::
|
||||
=- [%pass / %agent [our.bol %chat-hook] %poke %chat-hook-action -]
|
||||
!> ^- action:hook
|
||||
[%add-synced ship path %.y]
|
||||
==
|
||||
::
|
||||
++ fix-dm
|
||||
|= b=%fix-dm
|
||||
^- (list card)
|
||||
%- zing
|
||||
%+ turn
|
||||
~(tap by synced)
|
||||
|= [=path host=ship]
|
||||
^- (list card)
|
||||
?> ?=([@ @ *] path)
|
||||
=/ =ship (slav %p i.path)
|
||||
?: =(ship our.bol)
|
||||
:: local dm, no need to do cleanup
|
||||
~
|
||||
?: ?=(^ (groups-of-chat path))
|
||||
:: correctly initialized, no need to do cleanup
|
||||
::
|
||||
~
|
||||
?. =((end 3 4 i.t.path) 'dm--')
|
||||
~
|
||||
:- =- [%pass /fixdm %agent [our.bol %chat-view] %poke %chat-view-action -]
|
||||
!> ^- action:view
|
||||
[%delete path]
|
||||
=/ new-dm /(scot %p our.bol)/(crip (weld "dm--" (trip (scot %p ship))))
|
||||
=/ mailbox=(unit mailbox:store) (chat-scry path)
|
||||
?~ mailbox
|
||||
~
|
||||
:~ =- [%pass /fixdm %agent [our.bol %chat-view] %poke %chat-view-action -]
|
||||
!> ^- action:view
|
||||
:* %create
|
||||
%- crip
|
||||
(zing [(trip (scot %p our.bol)) " <-> " (trip (scot %p ship)) ~])
|
||||
''
|
||||
new-dm
|
||||
ship+new-dm
|
||||
[%invite (silt ~[ship])]
|
||||
(silt ~[ship])
|
||||
%.y
|
||||
%.n
|
||||
==
|
||||
::
|
||||
=- [%pass /fixdm %agent [our.bol %chat-store] %poke %chat-action -]
|
||||
!> ^- action:store
|
||||
[%messages new-dm envelopes.u.mailbox]
|
||||
==
|
||||
--
|
||||
::
|
||||
++ poke-json
|
||||
|= jon=json
|
||||
|
Loading…
Reference in New Issue
Block a user