diff options
Diffstat (limited to 'pim/rc/pimup')
| -rwxr-xr-x | pim/rc/pimup | 71 |
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 |
