summaryrefslogtreecommitdiff
path: root/pim/rc/pimup
diff options
context:
space:
mode:
Diffstat (limited to 'pim/rc/pimup')
-rwxr-xr-xpim/rc/pimup71
1 files changed, 71 insertions, 0 deletions
diff --git a/pim/rc/pimup b/pim/rc/pimup
new file mode 100755
index 0000000..1d7b2de
--- /dev/null
+++ b/pim/rc/pimup
@@ -0,0 +1,71 @@
+#!/bin/rc
+# pimup -- bring up mail and the calendars, and mount them here.
+#
+# Safe to run twice: anything already posted in /srv is reused rather
+# than started again. Run it from riostart so every window inherits the
+# mounts, since a mount only exists in the namespace that made it.
+rfork e
+
+cald=/usr/glenda/lib/cal
+log=/tmp/pimup.log
+>$log
+
+# Wait for a server to announce itself and echo the name it posted.
+# rc has no return, so this loops on a condition rather than bailing out.
+fn waitsrv {
+ s=()
+ i=0
+ while(~ $#s 0 && test $i -lt 40){
+ s=`{sed -n 's|.*serving /srv/||p' $1}
+ if(~ $#s 0){
+ sleep 1
+ i=`{echo $i + 1 | bc}
+ }
+ }
+ echo $"s
+}
+
+# ---- mail
+if(! test -e /srv/upasfs.$user)
+ upas/fs -s -f /imaps/imap.fastmail.com/calvin@pobox.com \
+ </dev/null >/dev/null >>[2]$log &
+sleep 2
+if(test -e /srv/upasfs.$user)
+ mount /srv/upasfs.$user /mail/fs >>[2]$log
+
+# ---- mount points for the calendars
+if(! test -e /srv/pimroot)
+ mntgen -s pimroot /mnt/pim </dev/null >/dev/null >[2]/dev/null &
+sleep 1
+mount /srv/pimroot /mnt/pim >[2]/dev/null
+ls -d /mnt/pim/calendars >/dev/null >[2]/dev/null
+if(! test -e /srv/pimcals)
+ mntgen -s pimcals /mnt/pim/calendars </dev/null >/dev/null >[2]/dev/null &
+sleep 1
+mount /srv/pimcals /mnt/pim/calendars >[2]/dev/null
+
+# ---- calendars. Go's getpid() on plan9 is a thread id, so the name rc
+# knows as $apid is not the one in /srv: read it out of the log.
+fn cal {
+ name=$1
+ l=$2
+ shift
+ shift
+ if(! test -f /mnt/pim/calendars/$name/ctl){
+ >$l
+ $* >[2]$l </dev/null >/dev/null &
+ s=`{waitsrv $l}
+ if(~ $#s 0)
+ echo 'pimup: '^$name^' did not start, see '^$l >>$log
+ if(! ~ $#s 0)
+ mount /srv/^$"s /mnt/pim/calendars/$name >>[2]$log
+ }
+}
+
+cal work /tmp/work.log ical/fs -N work -d $cald
+cal local /tmp/local.log ical/fs -N local -d /tmp/callocal
+if(test -f $cald/fastmail.pw)
+ cal fastmail /tmp/dav.log caldav/fs -e https://caldav.fastmail.com/dav/ \
+ -u calvin@pobox.com -p $cald/fastmail.pw -C Calendar -N fastmail
+
+exit 0