urbit/pkg/arvo/app/metadata-push-hook.hoon

114 lines
2.7 KiB
Plaintext
Raw Normal View History

2021-01-13 07:50:37 +03:00
:: metadata-push-hook [landscape]:
::
2021-01-28 09:13:57 +03:00
/- *group, *invite-store, store=metadata-store
2021-01-13 07:50:37 +03:00
/+ default-agent, verb, dbug, grpl=group, push-hook,
resource, mdl=metadata, gral=graph
2021-01-13 07:50:37 +03:00
~% %group-hook-top ..part ~
|%
+$ card card:agent:gall
::
++ config
^- config:push-hook
:* %metadata-store
/all
2021-01-28 09:13:57 +03:00
update:store
2021-01-13 07:50:37 +03:00
%metadata-update
%metadata-pull-hook
==
::
+$ agent (push-hook:push-hook config)
--
::
::
%- agent:dbug
%+ verb |
^- agent:gall
%- (agent:push-hook config)
^- agent
|_ =bowl:gall
+* this .
def ~(. (default-agent this %|) bowl)
grp ~(. grpl bowl)
met ~(. mdl bowl)
gra ~(. gral bowl)
2021-01-13 07:50:37 +03:00
::
++ on-init on-init:def
++ on-save !>(~)
++ on-load on-load:def
++ on-poke
|= [=mark =vase]
?. ?=(%metadata-hook-update mark)
(on-poke:def mark vase)
2021-01-28 09:13:57 +03:00
=+ !<(=hook-update:store vase)
?. ?=(%req-preview -.hook-update)
(on-poke:def mark vase)
2021-01-28 09:13:57 +03:00
=* rid group.hook-update
|^
?> =(entity.rid our.bowl)
?> (can-join:grp rid src.bowl)
=/ members
~(wyt in (members:grp rid))
2021-01-28 09:13:57 +03:00
=/ =metadatum:store
%- need
%+ mate (peek-metadatum:met %groups rid)
(peek-metadatum:met %graph rid)
:_ this
=; =cage
[%pass / %agent [src.bowl %metadata-pull-hook] %poke cage]~
:- %metadata-hook-update
2021-01-28 09:13:57 +03:00
!> ^- hook-update:store
[%preview rid channels members channel-count metadatum]
::
++ channels
2021-01-28 09:13:57 +03:00
%- ~(gas by *associations:store)
%+ skim ~(tap by (app-metadata-for-group:met rid %graph))
2021-01-28 09:13:57 +03:00
|=([=md-resource:store group=resource =metadatum:store] preview.metadatum)
::
++ channel-count
~(wyt by (app-metadata-for-group:met rid %graph))
--
++ on-agent on-agent:def
++ on-watch on-watch:def
++ on-leave on-leave:def
2021-01-13 07:50:37 +03:00
++ on-peek on-peek:def
++ on-arvo on-arvo:def
++ on-fail on-fail:def
::
++ should-proxy-update
|= =vase
2021-01-28 09:13:57 +03:00
=+ !<(=update:store vase)
?. ?=(?(%add %remove) -.update)
2021-01-13 07:50:37 +03:00
%.n
=/ role=(unit (unit role-tag))
2021-01-28 09:13:57 +03:00
(role-for-ship:grp group.update src.bowl)
=/ =metadatum:store
2021-01-29 08:45:06 +03:00
(need (peek-metadatum:met %contacts group.update))
2021-01-13 07:50:37 +03:00
?~ role %.n
?^ u.role
?=(?(%admin %moderator) u.u.role)
2021-01-29 08:45:06 +03:00
?. ?=(%add -.update) %.n
?& =(src.bowl entity.resource.resource.update)
?=(%member-metadata vip.metadatum)
==
2021-01-13 07:50:37 +03:00
::
++ resource-for-update resource-for-update:met
2021-01-13 07:50:37 +03:00
++ take-update
|= =vase
^- [(list card) agent]
`this
::
++ initial-watch
|= [=path rid=resource]
^- vase
=/ group
(scry-group:grp rid)
2021-01-28 09:13:57 +03:00
=/ =associations:store
2021-01-13 07:50:37 +03:00
(metadata-for-group:met rid)
?> ?=(^ group)
?> (~(has in members.u.group) src.bowl)
2021-01-28 09:13:57 +03:00
!> ^- update:store
[%initial-group rid associations]
::
2021-01-13 07:50:37 +03:00
--