summaryrefslogtreecommitdiffstats
path: root/virtual-programs/programs.folk
blob: b853ee310a19b456a4b60c45379f02a1109a28a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
When (non-capturing) /type/ /obj/ has a program {
    puts "Added $type $obj"
    On unmatch { puts "Removed $type $obj" }

    try {
        if {[file exists "$::env(HOME)/folk-printed-programs/$obj.folk.temp"]} {
            set fd [open "$::env(HOME)/folk-printed-programs/$obj.folk.temp" r]
        } else {
            # HACK: localhost is folk-live for now. idk why.
            if {![file exists "$::env(HOME)/folk-printed-programs/$obj.folk"] &&
                ($::thisNode in [list "folk-beads" "folk-convivial" "localhost" "gadget-red" "gadget-blue"])} {
                # HACK: 'Page fault' to folk0, try getting page from
                # there. Ideally we would have some general (Avahi?)
                # way of finding the 'authoritative' node on the local
                # network, or broadcasting out, and getting pages from
                # there.
                exec curl --output "$::env(HOME)/folk-printed-programs/$obj.folk" \
                    "http://folk0.local:4273/printed-programs/$obj.folk"
            }
            set fd [open "$::env(HOME)/folk-printed-programs/$obj.folk" r]
        }
        set code [read $fd]
        close $fd

        Claim $obj has program code $code
    } on error error {
        puts stderr "No code for $type $obj"
    }
}