:: metadata-hook [landscape]: :: :: allow syncing foreign metadata :: :: watch paths: :: /group/%group-path all updates related to this group :: /- *metadata-store, *metadata-hook /+ default-agent, dbug, verb, grpl=group, *migrate, resource ~% %metadata-hook-top ..part ~ |% +$ card card:agent:gall +$ versioned-state $% state-zero state-one state-two == :: +$ state-zero $: %0 synced=(map path ship) == +$ state-one $: %1 synced=(map path ship) == +$ state-two [%2 ~] -- =| state-two =* state - %- agent:dbug %+ verb | ^- agent:gall |_ =bowl:gall +* this . def ~(. (default-agent this %|) bowl) ++ on-init on-init:def ++ on-save !>(state) ++ on-load |= =vase =/ m-old=(unit versioned-state) (mole |.(!<(versioned-state vase))) ?~ m-old `this =* old u.m-old |^ ?: ?=(%2 -.old) `this :_ this %+ murn ~(tap by synced.old) |= [group=path =ship] %+ bind (de-path-soft:resource group) |= rid=resource ?: =(our.bowl ship) (push-metadata rid) (pull-metadata rid ship) :: ++ poke-our |= [app=term =cage] ^- card [%pass / %agent [our.bowl app] %poke cage] :: ++ push-metadata |= rid=resource ^- card (poke-our %metadata-push-hook push-hook-action+!>([%add rid])) :: ++ pull-metadata |= [rid=resource =ship] ^- card (poke-our %metadata-pull-hook pull-hook-action+!>([%add ship rid])) -- :: ++ on-poke on-poke:def ++ on-watch on-watch:def ++ on-peek on-peek:def ++ on-leave on-leave:def ++ on-agent on-agent:def ++ on-arvo on-arvo:def ++ on-fail on-fail:def --