From 07fc2644a237187dd4c5680e88f4adadbf533603 Mon Sep 17 00:00:00 2001 From: Cody Hiar Date: Wed, 12 Aug 2015 12:06:23 -0600 Subject: Initial commit of the working files --- segments/mailcount.sh | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100755 segments/mailcount.sh (limited to 'segments/mailcount.sh') diff --git a/segments/mailcount.sh b/segments/mailcount.sh new file mode 100755 index 0000000..68029aa --- /dev/null +++ b/segments/mailcount.sh @@ -0,0 +1,204 @@ +# Report mail count for your mailbox type + +TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX_DEFAULT="$HOME/.mail/inbox/new" +TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX_DEFAULT="${MAIL}" +TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC_DEFAULT="${HOME}/.mailcheckrc" +TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER_DEFAULT="gmail.com" +TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL_DEFAULT="5" + + +generate_segmentrc() { + read -d '' rccontents << EORC +# Mailbox type to use. Can be any of {apple_mail, gmail, maildir, mbox, mailcheck} +export TMUX_POWERLINE_SEG_MAILCOUNT_MAILBOX_TYPE="" + +## Gmail +# Enter your Gmail username here WITH OUT @gmail.com.( OR @domain) +export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_USERNAME="" +# Google password. Recomenned to use application specific password (https://accounts.google.com/b/0/IssuedAuthSubTokens) Leave this empty to get password from OS X keychain. +# For OSX users : MAKE SURE that you add a key to the keychain in the format as follows +# Keychain Item name : http:// +# Account name : @ +# Password : Your password ( Once again, try to use 2 step-verification and application-specific password) +# See http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833 for more info. +export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_PASSWORD="" +# Domain name that will complete your email. For normal GMail users it probably is "gmail.com but can be "foo.tld" for Google Apps users. +export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER="${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER_DEFAULT}" +# How often in minutes to check for new mails. +export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL="${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL_DEFAULT}" + +## Maildir +# Path to the maildir to check. +export TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX="${TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX_DEFAULT}" + +## mbox +# Path to the mbox to check. +export TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX="${TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX_DEFAULT}" + +## mailcheck +# Optional path to mailcheckrc +export TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC="${TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC_DEFAULT}" +EORC + echo "${rccontents}" +} + +__process_settings() { + if [ -z "$TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER" ]; then + export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER="${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER_DEFAULT}" + fi + if [ -z "$TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL" ]; then + export TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL="${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL_DEFAULT}" + fi + + eval TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX="$TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX" + if [ -z "$TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX" ]; then + export TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX="${TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX_DEFAULT}" + fi + + eval TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX="$TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX" + if [ -z "${TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX}" ]; then + export TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX="${TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX_DEFAULT}" + fi + + eval TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC="$TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC" + if [ -z "${TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC}" ]; then + export TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC="${TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC_DEFAULT}" + fi + +} + +run_segment() { + __process_settings + + if [ -z "$TMUX_POWERLINE_SEG_MAILCOUNT_MAILBOX_TYPE" ]; then + return 2 + fi + + local count + case "$TMUX_POWERLINE_SEG_MAILCOUNT_MAILBOX_TYPE" in + "apple_mail") count=$(__count_apple_mail) ;; + "gmail") count=$(__count_gmail) ;; + "maildir") count=$(__count_maildir) ;; + "mbox") count=$(__count_mbox) ;; + "mailcheck") count=$(__count_mailcheck) ;; + *) + echo "Unknown mailbox type [${TMUX_POWERLINE_SEG_MAILCOUNT_MAILBOX_TYPE}]"; + return 1 + esac + local exitcode="$?" + if [ "$exitcode" -ne 0 ]; then + return $exitcode + fi + + if [[ -n "$count" && "$count" -gt 0 ]]; then + echo "✉ ${count}" + fi + + return 0 +} + + +__count_apple_mail() { + count=$(${TMUX_POWERLINE_DIR_SEGMENTS}/mailcount_apple_mail.script) + echo "$count" +} + +__count_gmail() { + local tmp_file="${TMUX_POWERLINE_DIR_TEMPORARY}/gmail_count.txt" + local tmp_wgetrc="${TMUX_POWERLINE_DIR_TEMPORARY}/tmp_wgetrc.txt" + local override_passget="false" # When true a force reloaded will be done. + + # Create the cache file if it doesn't exist. + if [ ! -f "$tmp_file" ]; then + touch $tmp_file + override_passget=true + fi + + # Refresh mail count if the tempfile is older than $interval minutes. + let interval=60*$TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_INTERVAL + if shell_is_osx || shell_is_bsd; then + last_update=$(stat -f "%m" ${tmp_file}) + elif shell_is_linux; then + last_update=$(stat -c "%Y" ${tmp_file}) + fi + if [ "$(( $(date +"%s") - ${last_update} ))" -gt "$interval" ] || [ "$override_passget" == true ]; then + if [ -z "$TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_PASSWORD" ]; then # Get password from keychain if it isn't already set. + if shell_is_osx; then + __mac_keychain_get_pass "${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_USERNAME}@${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER}" "$TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER" + else + echo "Implement your own sexy password fetching mechanism here." + return 1 + fi + fi + + # Check for wget before proceeding. + which wget 2>&1 > /dev/null + if [ $? -ne 0 ]; then + echo "This script requires wget." 1>&2 + return 1 + fi + + # Hide password from command line (visible with e.g. ps(1)). + echo -e "user=${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_USERNAME}@${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER}\npassword=${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_PASSWORD}" > "$tmp_wgetrc" + mail=$(wget -q -O - https://mail.google.com/a/${TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_SERVER}/feed/atom --config "$tmp_wgetrc" | grep fullcount | sed 's/<[^0-9]*>//g') + rm "$tmp_wgetrc" + + if [ "$mail" != "" ]; then + echo $mail > $tmp_file + else + return 1 + fi + fi + + count=$(cat $tmp_file) + echo "$count" + return 0; +} + +__count_maildir() { + if [ ! -d "$TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX" ]; then + return 1 + fi + + count=$(ls "$TMUX_POWERLINE_SEG_MAILCOUNT_MAILDIR_INBOX" | wc -l) + + # Fix for mac, otherwise whitespace is left in output + if shell_is_osx; then + count=$(echo "$count" | sed -e "s/^[ \t]*//") + fi + + echo "$count" + return 0; +} + +__count_mbox() { + if [ ! -f "${TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX}" ]; then + return 1 + fi + + # This matches the From_ line (see man 5 mbox) e.g. + # From noreply@github.com Sun Dec 2 03:52:25 2012 + # See https://github.com/erikw/tmux-powerline/pull/91#issuecomment-10926053 for discussion. + count=$(grep -c '^From [^[:space:]]\+ ... ... .. ..:..:.. ....$' ${TMUX_POWERLINE_SEG_MAILCOUNT_MBOX_INBOX}) + + echo "$count" + return 0; +} + +__mac_keychain_get_pass() { + result="$(security 2>&1 > /dev/null find-internet-password -ga $1 -s $2)" + if [ $? -eq 0 ]; then + TMUX_POWERLINE_SEG_MAILCOUNT_GMAIL_PASSWORD=$(echo "$result" | sed -e 's/password: \"\(.*\)\"/\1/g') + return 0 + fi + return 1 +} + +__count_mailcheck() { + count=$(mailcheck -f ${TMUX_POWERLINE_SEG_MAILCOUNT_MAILCHECKRC} | awk '{ if (/new/) { print $3; exit } else { print 0; exit } }') + if [ $? -eq 0 ]; then + echo "$count" + return 0 + fi + return 1; +} -- cgit v1.2.3