mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-09-20 23:18:00 +03:00
observe-hook + thread: remove metadata when leaving a group
This commit is contained in:
parent
1aa9337301
commit
a6bf3ca924
@ -11,11 +11,13 @@
|
||||
+$ versioned-state
|
||||
$% state-0
|
||||
state-1
|
||||
state-2
|
||||
==
|
||||
::
|
||||
+$ serial @uv
|
||||
+$ state-0 [%0 observers=(map serial observer:sur)]
|
||||
+$ state-1 [%1 observers=(map serial observer:sur)]
|
||||
+$ state-1 [%2 observers=(map serial observer:sur)]
|
||||
::
|
||||
++ got-by-val
|
||||
|= [a=(map serial observer:sur) b=observer:sur]
|
||||
@ -27,7 +29,7 @@
|
||||
--
|
||||
::
|
||||
%- agent:dbug
|
||||
=| state-1
|
||||
=| state-2
|
||||
=* state -
|
||||
::
|
||||
^- agent:gall
|
||||
@ -67,7 +69,14 @@
|
||||
^- (quip card _this)
|
||||
=/ old-state !<(versioned-state old-vase)
|
||||
?- -.old-state
|
||||
%1 `this(state old-state)
|
||||
%2 `this(state old-state)
|
||||
::
|
||||
%1
|
||||
=. state [%2 observers.old-state]
|
||||
%+ on-poke
|
||||
%observe-action
|
||||
!> ^- action:sur
|
||||
[%watch %group-store /groups %group-leave-metadata]
|
||||
::
|
||||
%0
|
||||
=. state [%1 observers.old-state]
|
||||
|
43
pkg/arvo/ted/group/leave-metadata.hoon
Normal file
43
pkg/arvo/ted/group/leave-metadata.hoon
Normal file
@ -0,0 +1,43 @@
|
||||
/- spider, grp=group-store, met=metadata-store, hook=metadata-hook
|
||||
/+ strandio, res=resource
|
||||
::
|
||||
=* strand strand:spider
|
||||
=* raw-poke raw-poke:strandio
|
||||
=* scry scry:strandio
|
||||
::
|
||||
^- thread:spider
|
||||
|= arg=vase
|
||||
=/ m (strand ,vase)
|
||||
^- form:m
|
||||
=+ !<([=update:grp ~] arg)
|
||||
?. ?=(%remove-group -.update)
|
||||
(pure:m !>(~))
|
||||
;< =bowl:spider bind:m get-bowl:strandio
|
||||
;< ~ bind:m
|
||||
%+ raw-poke
|
||||
[our.bowl %metadata-hook]
|
||||
:- %metadata-hook-action
|
||||
!> ^- metadata-hook-action:hook
|
||||
[%remove (en-path:res resource.update)]
|
||||
::
|
||||
:: get metadata associated with group and remove it
|
||||
;< =associations:met bind:m
|
||||
%+ scry associations:met
|
||||
;: weld
|
||||
/gx/metadata-store/group
|
||||
(en-path:res resource.update)
|
||||
/noun
|
||||
==
|
||||
=/ entries=(list [g=group-path:met m=md-resource:met])
|
||||
~(tap in ~(key by associations))
|
||||
|- ^- form:m
|
||||
=* loop $
|
||||
?~ entries
|
||||
(pure:m !>(~))
|
||||
;< ~ bind:m
|
||||
%+ raw-poke
|
||||
[our.bowl %metadata-store]
|
||||
:- %metadata-action
|
||||
!> ^- metadata-action:met
|
||||
[%remove g.i.entries m.i.entries]
|
||||
loop(entries t.entries)
|
Loading…
Reference in New Issue
Block a user