mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-15 18:12:47 +03:00
2048f7ab9e
This resolves a number of issues that were keeping communications with foreign ships from working. - there was no link-update mark - there was no +on-arvo handling in link-listen-hook - link-listen-hook was subscribing to the non-existent "link-hook" - link-proxy-hook permission check was looking at a wrong path Also makes link-listen-hook aware that subscriptions might get rejected because of permissions, so that it ignores failed subscriptions instead of being loud about it.
173 lines
4.0 KiB
Plaintext
173 lines
4.0 KiB
Plaintext
:: link: social bookmarking
|
|
::
|
|
:: the paths under which links are submitted are generally expected to
|
|
:: correspond to existing group paths. for strictly-local collections of
|
|
:: links, arbitrary paths are probably fair game, but could trip up
|
|
:: primitive ui implementations.
|
|
::
|
|
:: scry and subscription paths:
|
|
::
|
|
:: /local-pages/[some-group] all pages we saved by recency
|
|
:: /submissions/[some-group] all submissions by recency
|
|
::
|
|
/+ *link, default-agent, verb
|
|
::
|
|
|%
|
|
+$ state-0
|
|
$: %0
|
|
by-group=(map path links)
|
|
by-site=(map site (list [path submission]))
|
|
==
|
|
::
|
|
+$ links
|
|
$: ::NOTE all lists by recency
|
|
=submissions
|
|
ours=pages
|
|
==
|
|
::
|
|
+$ card card:agent:gall
|
|
--
|
|
::
|
|
=| state-0
|
|
=* state -
|
|
::
|
|
%+ verb |
|
|
^- agent:gall
|
|
=<
|
|
|_ =bowl:gall
|
|
+* this .
|
|
do ~(. +> bowl)
|
|
def ~(. (default-agent this %|) bowl)
|
|
::
|
|
++ on-init on-init:def
|
|
++ on-save !>(state)
|
|
++ on-load
|
|
|= old=vase
|
|
^- (quip card _this)
|
|
[~ this(state !<(state-0 old))]
|
|
::
|
|
++ on-poke
|
|
|= [=mark =vase]
|
|
^- (quip card _this)
|
|
?> (team:title [our src]:bowl) ::TODO /lib/store
|
|
=^ cards state
|
|
?+ mark (on-poke:def mark vase)
|
|
::TODO move json conversion into mark once mark performance improves
|
|
%json (do-action:do (action:de-json !<(json vase)))
|
|
%link-action (do-action:do !<(action vase))
|
|
==
|
|
[cards this]
|
|
::
|
|
++ on-peek
|
|
|= =path
|
|
^- (unit (unit cage))
|
|
?+ path (on-peek:def path)
|
|
[%y ?(%local-pages %submissions) ~]
|
|
``noun+!>(~(key by by-group))
|
|
::
|
|
[%x %local-pages ^]
|
|
``noun+!>((get-local-pages:do t.t.path))
|
|
::
|
|
[%x %submissions ^]
|
|
``noun+!>((get-submissions:do t.t.path))
|
|
==
|
|
::
|
|
++ on-watch
|
|
|= =path
|
|
^- (quip card _this)
|
|
?> (team:title [our src]:bowl) ::TODO /lib/store
|
|
:_ this
|
|
|^ ?+ path (on-watch:def path)
|
|
[%local-pages ^]
|
|
%+ give %link-update
|
|
[%local-pages t.path (get-local-pages:do t.path)]
|
|
::
|
|
[%submissions ^]
|
|
%+ give %link-update
|
|
[%submissions t.path (get-submissions:do t.path)]
|
|
==
|
|
::
|
|
++ give
|
|
|* [=mark =noun]
|
|
^- (list card)
|
|
[%give %fact ~ mark !>(noun)]~
|
|
--
|
|
::
|
|
++ on-leave on-leave:def
|
|
++ on-agent on-agent:def
|
|
++ on-arvo on-arvo:def
|
|
++ on-fail on-fail:def
|
|
--
|
|
::
|
|
|_ =bowl:gall
|
|
::
|
|
:: writing
|
|
::
|
|
++ do-action
|
|
|= =action
|
|
^- (quip card _state)
|
|
?- -.action
|
|
%add (add-page +.action)
|
|
%hear (hear-submission +.action)
|
|
==
|
|
:: +add-page: save a page ourselves
|
|
::
|
|
++ add-page
|
|
|= [=path title=@t =url]
|
|
^- (quip card _state)
|
|
?< =(~ path)
|
|
:: add page to group ours
|
|
::
|
|
=/ =links (~(gut by by-group) path *links)
|
|
=/ =page [title url now.bowl]
|
|
=. ours.links [page ours.links]
|
|
=. by-group (~(put by by-group) path links)
|
|
:: do generic submission logic
|
|
::
|
|
=^ cards state
|
|
(hear-submission path [our.bowl page])
|
|
:: send updates to subscribers
|
|
::
|
|
:_ state
|
|
:_ cards
|
|
:+ %give %fact
|
|
:+ `[%local-pages path]
|
|
%link-update
|
|
!>([%local-pages path [page]~])
|
|
:: +hear-submission: record page someone else saved
|
|
::
|
|
++ hear-submission
|
|
|= [=path =submission]
|
|
^- (quip card _state)
|
|
?< =(~ path)
|
|
:: add link to group submissions
|
|
::
|
|
=/ =links (~(gut by by-group) path *links)
|
|
=. submissions.links [submission submissions.links]
|
|
=. by-group (~(put by by-group) path links)
|
|
:: add submission to global sites
|
|
::
|
|
=/ =site (site-from-url url.submission)
|
|
=. by-site (~(add ja by-site) site [path submission])
|
|
:: send updates to subscribers
|
|
::
|
|
:_ state
|
|
:_ ~
|
|
:+ %give %fact
|
|
:+ `[%submissions path]
|
|
%link-update
|
|
!>([%submissions path [submission]~])
|
|
::
|
|
:: reading
|
|
::
|
|
++ get-local-pages
|
|
|= =path
|
|
^- pages
|
|
ours:(~(gut by by-group) path *links)
|
|
::
|
|
++ get-submissions
|
|
|= =path
|
|
^- submissions
|
|
submissions:(~(gut by by-group) path *links)
|
|
--
|