#!/data/data/com.termux/files/usr/bin/sh -e
#
#    disk: print the current disk space and usage
#
#    Copyright (C) 2008 Canonical Ltd.
#    Copyright (C) 2011-2014 Dustin Kirkland
#
#    Authors: Dustin Kirkland <kirkland@byobu.org>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, version 3 of the License.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

__disk_detail() {
	df -h
}

# __disk_usage(path, label)
# print the size and percentage used of one mount point or device, prefixed
# with "label:" when a label is given; prints nothing if it isn't mounted
__disk_usage() {
	local MP="$1" label="$2" out="" size="" pct="" unit=""
	case $MP in
		/dev/*)
			if [ -r /proc/mounts ]; then
				MP=$(awk '$1 == m { print $2; exit(0); }' "m=$MP" /proc/mounts)
			else
				MP=$(mount | awk -v m="$MP" '$1 == m { print $3; exit(0); }')
			fi
		;;
	esac
	[ -n "$MP" ] || return 0
	# this could be done faster with 'stat --file-system --format'
	# but then we'd have to do blocks -> human units ourselves
	out=$(df -h "$MP" 2>/dev/null | awk 'END { printf("%s %s", $2, $5); }')
	set -- ${out}
	size=${1}; pct=${2};
	unit=${size#${size%?}} # get the unit (last char)
	size=${size%?}; # take the unit off
	pct=${pct%?}; # take off the '%'
	case "$unit" in
		k*|K*) unit="$ICON_KB" ;;
		m*|M*) unit="$ICON_MB" ;;
		g*|G*) unit="$ICON_GB" ;;
		t*|T*) unit="$ICON_TB" ;;
	esac
	[ -n "$size" ] || return 0
	[ -z "$label" ] || { color m W; printf_status "$label:"; }
	color b m W; printf "%s" "$size"; color -; color m W; printf "%s" "$unit"; color -;
	color b m W; printf "%s" "$pct";  color -; color m W; printf "%s" "$PCT";
}

__disk() {
	local disk="" label="" out="" shown=""
	# Default to /, but let users override with one or more space separated
	# mount points or devices, e.g. MONITORED_DISK="/ /home /dev/sdb1"
	set -- ${MONITORED_DISK:-/}
	for disk in "$@"; do
		# Label each disk only when there's more than one to tell apart
		label=""
		if [ $# -gt 1 ]; then
			label="${disk%/}"; label="${label##*/}"; [ -n "$label" ] || label="/"
		fi
		out=$(__disk_usage "$disk" "$label")
		[ -n "$out" ] || continue
		[ -z "$shown" ] || printf " "
		printf "%s" "$out"
		shown=1
	done
	[ -z "$shown" ] || color --
}

# vi: syntax=sh ts=4 noexpandtab
