From 0f21d318e395ab976f29c3ae18fe2139c22511bf Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Tue, 21 Nov 2023 13:02:43 -0500 Subject: programs: Expose web printed-programs/; fault to folk0 --- virtual-programs/programs.folk | 32 +++++++++++++++++++----------- virtual-programs/web-printed-programs.folk | 9 +++++++++ 2 files changed, 29 insertions(+), 12 deletions(-) create mode 100644 virtual-programs/web-printed-programs.folk (limited to 'virtual-programs') diff --git a/virtual-programs/programs.folk b/virtual-programs/programs.folk index f42e1360..7c98632b 100644 --- a/virtual-programs/programs.folk +++ b/virtual-programs/programs.folk @@ -5,18 +5,26 @@ When (non-capturing) /type/ /obj/ has a program { On unmatch { puts "Removed $type $obj" } try { - set tempPath "$::env(HOME)/folk-printed-programs/$obj.folk.temp" + if {[file exists "$::env(HOME)/folk-printed-programs/$obj.folk.temp"]} { + set fd [open "$::env(HOME)/folk-printed-programs/$obj.folk.temp" r] + } else { + if {![file exists "$::env(HOME)/folk-printed-programs/$obj.folk"] && + ($::thisNode eq "folk-beads" || $::thisNode eq "folk-convivial")} { + # 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 - if {[file exists $tempPath]} { - set path [open "$::env(HOME)/folk-printed-programs/$obj.folk.temp" r] - } else { - set path [open "$::env(HOME)/folk-printed-programs/$obj.folk" r] + Claim $obj has program code $code + } on error error { + puts stderr "No code for $type $obj" } - set code [read $path] - close $path - - Claim $obj has program code $code - } on error error { - puts stderr "No code for $type $obj" - } } diff --git a/virtual-programs/web-printed-programs.folk b/virtual-programs/web-printed-programs.folk new file mode 100644 index 00000000..8c90db73 --- /dev/null +++ b/virtual-programs/web-printed-programs.folk @@ -0,0 +1,9 @@ +Wish the web server handles route {/printed-programs/(\d+)\.folk$} with handler { + regexp {/printed-programs/(\d+)\.folk$} $path -> id + set filename "../folk-printed-programs/$id.folk" + set fp [open $filename r] + set data [read $fp] + close $fp + + dict create statusAndHeaders "HTTP/1.1 200 OK\nConnection: close\nContent-Type: text/plain; charset=utf-8\n\n" body $data +} -- cgit v1.2.3