#!/bin/bash # Scripted by ARB. # Contact at www.gab.com/KiteX3. TIMETRACKER_FILE=~/Documents/notes/timetracker.txt PRINT_TIMETRACK_GENERAL(){ START_TIME=$1 ROWS=$2 TAGS=$(( $(tput cols) / 32 * $ROWS )) cat $TIMETRACKER_FILE <((date +"%s.%N %F")) | awk -v TODAY=$START_TIME '$1 > TODAY' | sed 's:[/+]: :g' | awk -M '{if(NR>1 && n != "End"){print (4*3600 < $1-t ? 1800 : $1 - t),n;}; t=$1; delete labels; for(i=2;i<=NF;i++){labels[$i]=1;}; first=1; for (i in labels){if(first == 1){n=i; first=0}else{n=n " " i}}; }' | sort -k2 | awk '{for(i=2;i<=NF;i++){ if($i !~ /^@.*/ && $i != "and"){arr[$i]+=$1} }; } END {for (i in arr) {printf "\033[1;36m%02d:%02d:%02d:%02d \033[1;33m%s\033[0m\n",int(arr[i]/86400) ,int(arr[i]/3600)%24, int(arr[i]/60)%60, int(arr[i]%60), substr(i,1,19)}}' | sort -n -r | head -n $TAGS | column } PRINT_TIMETRACK_CATEGORIES(){ START_TIME=$1] ROWS=$2 TAGS=$(( $(tput cols) / 32 * $ROWS )) cat $TIMETRACKER_FILE <((date +"%s.%N %F")) | awk -v TODAY=$START_TIME '$1 > TODAY' | sed 's:[/+]: :g' | awk -M '{if(NR>1 && n != "End"){print (4*3600 < $1-t ? 1800 : $1 - t),n;}; t=$1; delete labels; for(i=2;i<=NF;i++){labels[$i]=1;}; first=1; for (i in labels){if(first == 1){n=i; first=0}else{n=n " " i}}; }' | sort -k2 | awk '{for(i=2;i<=NF;i++){ if($i ~ /^@.*/){arr[$i]+=$1} }; } END {for (i in arr) {printf "\033[1;36m%02d:%02d:%02d:%02d \033[1;33m%s\033[0m\n",int(arr[i]/86400) ,int(arr[i]/3600)%24, int(arr[i]/60)%60, int(arr[i]%60), substr(i,1,19)}}' | sort -n -r | head -n $TAGS | column } PRINT_TIMETRACK_RECENT(){ START_TIME=$1 cat $TIMETRACKER_FILE <((date +"%s.%N %F")) | awk -v TODAY=$START_TIME '$1 > TODAY' | awk -M '{if(NR>1 && n != "End"){print (4*3600 < $1-t ? 1800 : $1 - t),n;}; t=$1; delete labels; for(i=2;i<=NF;i++){labels[$i]=1;}; first=1; for (i in labels){if(first == 1){n=i; first=0}else{n=n " " i}}; }' | sort -k2 | awk '{for(i=2;i<=NF;i++){ arr[$i]+=$1 }; } END {for (i in arr) {printf "\033[1;36m%02d:%02d:%02d \033[1;33m%s\033[0m\n" ,int(arr[i]/3600)%24, int(arr[i]/60)%60, int(arr[i]%60), i}}' | sort -n -r } PRINT_TIMETRACK_MOBILE(){ START_TIME=$1 cat $TIMETRACKER_FILE <((date +"%s.%N %F")) | awk -v TODAY=$START_TIME '$1 > TODAY' | # sed 's:[/+]: :g' | awk '{if(NR>1 && n != "End"){print (4*3600 < $1-t ? 1800 : $1 - t),n;}; t=$1; delete labels; for(i=2;i<=NF;i++){labels[$i]=1;}; first=1; for (i in labels){if(first == 1){n=i; first=0}else{n=n " " i}}; }' | sort -k2 | awk '{for(i=2;i<=NF;i++){ if($i !~ /^@.*/ && $i != "and"){arr[$i]+=$1} }; } END {for (i in arr) {printf "\033[1;36m%02d:%02d:%02d:%02d \033[1;33m%s\033[0m\n",int(arr[i]/86400) ,int(arr[i]/3600)%24, int(arr[i]/60)%60, int(arr[i]%60), i}}' | sort -n -r | head -n 20 } SORT_TIMETRACK(){ LEN_TIMETRACKER=$(wc -l $TIMETRACKER_FILE) TIMETRACKER_BACKUP=$(mktemp) echo $TIMETRACKER_BACKUP cat $TIMETRACKER_FILE > $TIMETRACKER_BACKUP cat $TIMETRACKER_BACKUP | sort -n > $TIMETRACKER_FILE diff -c $TIMETRACKER_BACKUP $TIMETRACKER_FILE } WRITE_TIMETRACK(){ [ $# -lt 2 ] && { echo "WRITE_TIMETRACK called with no time!" ; return ;} echo $@ >> $TIMETRACKER_FILE } usage(){ echo "timetrack" echo "Put some info here plox" } ALLTIME=0 YEARLY=1 MONTHLY=1 WEEKLY=1 MOBILE=0 TIME_TO_ENTER=$(date +%s.%N) LAST_DATE=$( tail -n 1 $TIMETRACKER_FILE | awk '{print $1}') while true ; do case "$1" in -A ) ALLTIME=1 YEARLY=1 MONTHLY=1 WEEKLY=1 MOBILE=0 shift ;; -Y ) ALLTIME=0 YEARLY=1 MONTHLY=1 WEEKLY=1 MOBILE=0 shift ;; -M ) ALLTIME=0 YEARLY=0 MONTHLY=1 WEEKLY=1 MOBILE=0 shift ;; -W ) ALLTIME=0 YEARLY=0 MONTHLY=0 WEEKLY=1 MOBILE=0 shift ;; -m ) ALLTIME=0 YEARLY=0 MONTHLY=0 WEEKLY=0 MOBILE=1 TIME_TO_ENTER=$(date +%s.000000000) shift ;; -d ) [ $MOBILE -eq 0 ] && { TIME_TO_ENTER=$(date -d "$2" +%s.%N) ;} [ $MOBILE -eq 1 ] && { TIME_TO_ENTER=$(date +%s.000000000) ;} shift 2 ;; -S ) echo "Sorting $TIMETRACKER_FILE ..." SORT_TIMETRACK exit 0 ;; -h ) usage exit 1 ;; -* ) echo "Unrecognized tag. Printing usage and exiting." usage exit 1 ;; *) break ;; esac done; # Check for errors in TIME_TO_ENTER echo $TIME_TO_ENTER | grep -e '[0-9]\{9,11\}\.[0-9]\{9\}' > /dev/null || { echo -e "Invalid TIME_TO_ENTER:\n( $TIME_TO_ENTER ).\nCheck validity of '-d' flag." ; exit 2 ; } [ $(echo "$TIME_TO_ENTER > $LAST_DATE" | bc -l) -eq 0 ] && { echo -e "TIME_TO_ENTER ( $TIME_TO_ENTER ) precedes last timetracker entry."; date -d "@$(echo $TIME_TO_ENTER | grep -o '^[0-9]*')"; echo -e "Are you sure you wish to enter?\n[y/N]"; read choice; case $choice in y*) echo -e "Forcing entry into timetracker.\nSorting records afterwards with 'timetrack -S' is recommended." ;; *) exit 3; ;; esac } if [ $# -gt 0 ] then #echo "$(date +%s.%N) $@" >> $TIMETRACKER_FILE [ $MOBILE -eq 0 ] && { WRITE_TIMETRACK $TIME_TO_ENTER "$@" ;} [ $MOBILE -eq 1 ] && { WRITE_TIMETRACK $TIME_TO_ENTER "$@" ;} fi cat $TIMETRACKER_FILE | tail -n 5 echo -e '' # ALLTIME ACTIVITY TRACKER if [ $ALLTIME -eq 1 ] then # KEYWORD TRACKER echo -e "\033[1;34m---ALLTIME ACTIVITY BY KEYWORD---\033[0m" PRINT_TIMETRACK_GENERAL 0 3 # CATEGORICAL TRACKER echo -e "\033[1;34m---ALLTIME ACTIVITY BY CATEGORY---" PRINT_TIMETRACK_CATEGORIES 0 2 fi # YEAR ACTIVITY TRACKER if [ $YEARLY -eq 1 ] then echo -e "\033[1;34m---"$(date +%Y | tr '[:lower:]' '[:upper:]' )" ACTIVITY BY KEYWORD---" PRINT_TIMETRACK_GENERAL $(date -d "Jan 1" +%s.%N) 6 echo -e "\033[1;34m---"$(date +%Y | tr '[:lower:]' '[:upper:]' )" ACTIVITY BY CATEGORY---" PRINT_TIMETRACK_CATEGORIES $(date -d "Jan 1" +%s.%N) 2 fi # MONTHLY if [ $MONTHLY -eq 1 ] then echo -e "\033[1;34m---"$(date +%B | tr '[:lower:]' '[:upper:]' )" ACTIVITY BY KEYWORD---" PRINT_TIMETRACK_GENERAL $(date -d "12am $(date +%b) 1" +%s.%N) 6 echo -e "\033[1;34m---"$(date +%B | tr '[:lower:]' '[:upper:]' )" ACTIVITY BY CATEGORY---" PRINT_TIMETRACK_CATEGORIES $(date -d "12am $(date +%b) 1" +%s.%N) 2 fi # WEEKLY if [ $WEEKLY -eq 1 ] then echo -e "\033[1;34m---"$(echo $(date -d "last sunday" +"%b %d") " TO " $(date -d "sunday" +"%b %d") | tr '[:lower:]' '[:upper:]' )" WEEKLY ACTIVITY BY KEYWORD---" PRINT_TIMETRACK_GENERAL $(date -d "last sunday 11:59pm" +"%s.%N") 6 echo -e "\033[1;34m---"$(echo $(date -d "last sunday" +"%b %d") " TO " $(date -d "sunday" +"%b %d") | tr '[:lower:]' '[:upper:]' )" WEEKLY ACTIVITY BY CATEGORY---" PRINT_TIMETRACK_CATEGORIES $(date -d "last sunday 11:59pm" +"%s.%N") 2 fi # TODAY if [ $MOBILE -eq 0 ] then echo -e "\033[1;34m---TODAY'S ACTIVITY---" PRINT_TIMETRACK_RECENT $(date -d "12am" +%s.%N) fi if [ $MOBILE -eq 1 ] then echo -e "\033[1;34m---TODAY'S ACTIVITY---" PRINT_TIMETRACK_MOBILE $(date -d "00:00" +%s.%N) fi