#!@zsh@/bin/zsh logTag=${0:t} exec 1> >(logger -t "$logTag" -p news.notice) exec 2> >(logger -t "$logTag" -p news.error) debug() { logger -t "$logTag" -p news.debug } function notmuch { msg1=1 while true; do result=$(env NOTMUCH_CONFIG=${HOME}/.notmuch-rss-config @notmuch@/bin/notmuch $@) if ! [[ "$result" =~ "already locked" ]]; then echo -nE "$result" return else [[ $msg1 == "1" ]] && echo "Already locked" >&2 msg1=0 fi sleep 2 done } urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } force=0 if [[ "$1" == "-f" ]]; then shift force=1 if [[ -n "$1" && "$1" -eq "$1" ]] 2>/dev/null; then force="$1" shift fi fi # print $force msg=1 typeset -a checkedIds checkedIds=() typeset -a ids ids=() while { results=$(notmuch search --sort=oldest-first --output=messages "( tag:inbox AND is:cached AND is:media ) AND NOT ( tag:killed OR tag:failed OR tag:tv )") ids=("${(f)results}") for i in $checkedIds; do ids=(${ids#$i}) done checkedIds=($checkedIds $ids) } && [[ -n "${ids}" ]]; do url="" for id ($ids); do message=$(notmuch search --output=files --duplicate=1 ${id}) ( flock -sn 9 || { printf "Could not lock ā€˜%sā€™\n" ${id} | debug; exit 0 } url=$(notmuch show ${id} | sed -r '/]+href="http:\/\/odin\.asgard\.yggdrasil\//!d; s!^.*]+href="(http://odin\.asgard\.yggdrasil/[^"]+)".*$!\1!; s|http://([^/]+)/|/srv/media/|; q' | urldecode) printf "Found ā€˜%sā€™\n" "${url}" | debug if [[ -z "${url}" || ! -e "${url}" ]]; then echo "thread ${id} not associated with any file or url, tagging for retry" >&2 # notmuch search --output=files --format=text ${(q)id} \ # | xargs -n 1 basename \ # | xargs -I '{}' -- sed -i "/{}/d" .youtube-cache notmuch tag -cached -- ${id} continue fi typeset -a args args=("${url}") if [[ "${force}" -gt 0 ]]; then args=(-f $args) force=$(($force - 1)) fi queue.@remoteNode@ $args && notmuch tag -unread -inbox -- ${(q)id} ) 9<>"${message}" done done [[ -z "${checkedIds}" ]] && queue.@remoteNode@