From 55e5a8b0212c4c07fdb2fd1b82e23d2ec8f0989b Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Tue, 16 Jun 2009 12:14:05 +0200 Subject: new version; supports pipeing to any command --- w3watch | 115 +++++++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 88 insertions(+), 27 deletions(-) (limited to 'w3watch') diff --git a/w3watch b/w3watch index 02d97e4..ba8f975 100755 --- a/w3watch +++ b/w3watch @@ -1,50 +1,111 @@ #!/bin/bash -mkdir -p ~/.w3watch/cache || exit 1 +ROOTDIR="${HOME}/.w3watch" +CACHEDIR="${ROOTDIR}/cache" +LOCKFILE="${ROOTDIR}/lock" +CONFIGFILE="${ROOTDIR}/config" +CONFIGSAMPLE='/usr/share/doc/w3watch/config.sample' -if [ ! -f ~/.w3watch/urls ]; then - echo "~/.w3watch/urls not found!" + +if [ ! -d "${ROOTDIR}" ]; then + install -D "${CONFIGSAMPLE}" "${CONFIGFILE}" + mkdir -p "${CACHEDIR}" + eval "${EDITOR} ${CONFIGFILE}" + exit $? +fi + +if [ ! -r "${CONFIGFILE}" ]; then + echo "${CONFIGFILE} not found!" exit 1 fi -if [ -f ~/.w3watch/lock ]; then - echo "w3watch already running" +if [ ! -d "${CACHEDIR}" ]; then + mkdir -p "${CACHEDIR}" +fi + +if [ -r "${LOCKFILE}" ]; then + echo "w3watch is locked by ${LOCKFILE}" exit 1 fi -touch ~/.w3watch/lock || exit 1 +if [ "${1}" == "e" ]; then + eval "${EDITOR} ${CONFIGFILE}" + exit $? +fi +if [ "${1}" == "l" ]; then + cat "${CONFIGFILE}" + exit $? +fi + +if [ "${1}" == "d" ]; then + DUMP=true +else + DUMP=false -for i in $(cat ~/.w3watch/urls); do - dump=$(lynx -dump "$i") - if [ $? -ne 0 ]; then - rm -f ~/.w3watch/lock - exit 1 + if [ "${1}" != "c" ]; then + echo "Usage: ${0} [e|l|d|c]" + echo -e "\te:\tedit config" + echo -e "\tl:\tlist config" + echo -e "\td:\tdump output and discard any changes" + echo -e "\tc:\tcheck for updates" + exit -1 fi +fi - sum=$(echo "$i" | sha1sum | awk '{print $1;}') - cachefile=~/.w3watch/cache/${sum} - if [ -f "$cachefile" ]; then - echo "$dump" | diff -u --label "$i" "$cachefile" - - fi +touch "${LOCKFILE}" - echo "$dump" > "$cachefile" -done + +while read line; do + if echo "${line}" | grep -q -v '^#'; then + data=(${line}) + url="${data[0]}" + filter="${data[@]:1}" + + dump=$(lynx -dump "$url") + if [ $? -ne 0 ]; then + rm -f "${LOCKFILE}" + exit 1 + fi + + if [ "${filter}" != "" ]; then + dump=$(echo "${dump}" | eval "${filter}") + fi + + if $DUMP; then + echo "$dump" + else + sum=$(echo "${line}" | sha1sum | awk '{print $1;}') + cachefile="${CACHEDIR}/${sum}" + + if [ -f "$cachefile" ]; then + echo "$dump" | diff -u \ + --label "local copy from $(/usr/bin/stat --printf='%y' ${cachefile})" "$cachefile" \ + --label "${url}" - \ + || echo + fi + + echo "$dump" > "$cachefile" + fi + fi +done < "${CONFIGFILE}" # remove old cache entries -for i in ~/.w3watch/cache/*; do - sumi=$(basename "$i") +for cacheEntry in "${CACHEDIR}/"*; do + cacheSum=$(basename "$cacheEntry") - for j in $(cat ~/.w3watch/urls); do - sumj=$(echo "$j" | sha1sum | awk '{print $1;}') + while read configEntry; do + if echo "${configEntry}" | grep -q -v '^#'; then + configSum=$(echo "$configEntry" | sha1sum | awk '{print $1;}') - if [ "$sumi" == "$sumj" ]; then - continue 2 + if [ "$cacheSum" == "$configSum" ]; then + continue 2 + fi fi - done + done < "${CONFIGFILE}" - rm -f $i + rm -f $cacheEntry done -rm -f touch ~/.w3watch/lock \ No newline at end of file +rm -f touch "${LOCKFILE}" \ No newline at end of file -- cgit v1.2.3-24-g4f1b