96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
set -e
 | 
						|
CWD=$(dirname $0)
 | 
						|
if [[ ! -f ~/.private/config/email.conf ]]; then
 | 
						|
    >&2 echo "Couldn't load account settings"
 | 
						|
    exit 1
 | 
						|
fi
 | 
						|
 | 
						|
. $HOME/.private/config/email.conf
 | 
						|
. $CWD/../panel-config
 | 
						|
 | 
						|
get_mail() {
 | 
						|
    local maildatatmp=/tmp/mail-data-"$1"
 | 
						|
    local mailtmp=/tmp/mail-count-"$1"
 | 
						|
 | 
						|
    if curl -u "$1:$2" --silent https://mail.google.com/mail/feed/atom > "$maildatatmp"; then
 | 
						|
        [[ -f "$mailtmp" ]] || echo "0" >"$mailtmp"
 | 
						|
 | 
						|
        local feed=$(<"$maildatatmp")
 | 
						|
        if [[ "${feed//\<fullcount\>/}" != "$feed" ]]; then
 | 
						|
            local lastnum=$(<"$mailtmp")
 | 
						|
            local total=$(echo "$feed" | grep -o "<entry>" | wc -l)
 | 
						|
            local new=0
 | 
						|
 | 
						|
            echo "$total" > "$mailtmp"
 | 
						|
            if [[ $total > $lastnum ]]; then
 | 
						|
                new=$(( $total - $lastnum ))
 | 
						|
                NOTIFY=1
 | 
						|
            fi
 | 
						|
 | 
						|
            parse_xml "$new" <<<"$feed"
 | 
						|
            echo $total
 | 
						|
            return
 | 
						|
        fi
 | 
						|
        >&2 echo "lemon/mail: malformed input ($1)"
 | 
						|
    else
 | 
						|
        >&2 echo "lemon/mail: failed to connect ($1)"
 | 
						|
    fi
 | 
						|
    ERROR=!
 | 
						|
    echo 0
 | 
						|
}
 | 
						|
 | 
						|
# Oh man. I really did this in bash. Don't try this at home.
 | 
						|
parse_xml() {
 | 
						|
    [[ $1 == 0 ]] && return
 | 
						|
    echo 1 > /tmp/notify
 | 
						|
    local n="${1:-1}"
 | 
						|
    tr '<>' '\n' | sed -e '/^\(?xml \|feed \|\/\|link rel=\|$\)/d;s/^entry$/----/;s/^author$/====/' | \
 | 
						|
    {
 | 
						|
        while read line; do
 | 
						|
            [[ $line == "----" ]] && break
 | 
						|
        done
 | 
						|
        while [[ $n > 0 ]] && read line; do
 | 
						|
            case $line in
 | 
						|
                name)  read name  ;;
 | 
						|
                email) read email ;;
 | 
						|
                title) read title ;;
 | 
						|
            esac
 | 
						|
            if [[ $title && $name && $email ]]; then
 | 
						|
                let n--
 | 
						|
                notify-send --icon="mail-message-new" "$name\n<${email/-/_}>" "$title"
 | 
						|
                title=
 | 
						|
                name=
 | 
						|
                email=
 | 
						|
            fi
 | 
						|
        done
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
#
 | 
						|
a=$(get_mail "${MAIL1_USER}" "${MAIL1_PASS}")
 | 
						|
b=$(get_mail "${MAIL2_USER}" "${MAIL2_PASS}")
 | 
						|
c=$(get_mail "${MAIL3_USER}" "${MAIL3_PASS}")
 | 
						|
total=$(( $a + $b + $c ))
 | 
						|
 | 
						|
icon="${ICON_MAIL}"
 | 
						|
color="${COLOR_FG}"
 | 
						|
case $total in
 | 
						|
    [1-9]*)
 | 
						|
        icon="$icon $total"
 | 
						|
        if [[ -f /tmp/notify ]]; then
 | 
						|
            aplay -N -q /usr/share/sounds/ding.wav
 | 
						|
            rm -f /tmp/notify
 | 
						|
        fi
 | 
						|
        ;;
 | 
						|
    0)  color="${COLOR_DIM}"
 | 
						|
        ;;
 | 
						|
esac
 | 
						|
 | 
						|
[[ $ERROR ]] && color=${COLOR_1}
 | 
						|
 | 
						|
echo "M%{F$color}$icon%{F-}"
 | 
						|
 | 
						|
# vim:set ft=sh:
 |