summaryrefslogtreecommitdiffstats
path: root/virtual-programs/programs.folk
blob: 135299c7046058ccb8db4602340e9853fc0e27b5 (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 eq "folk-beads" || $::thisNode eq "folk-convivial" || $::thisNode eq "localhost")} {
                # 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"
    }
}