Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make dwmblocks modules async #1296

Open
wants to merge 15 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 18 additions & 6 deletions .local/bin/statusbar/sb-forecast
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ url="${WTTRURL:-wttr.in}"
weatherreport="${XDG_CACHE_HOME:-$HOME/.cache}/weatherreport"

# Get a weather report from 'wttr.in' and save it locally.
getforecast() { timeout --signal=1 2s curl -sf "$url/$LOCATION" > "$weatherreport" || exit 1; }
getforecast() { { grep -q -m1 '^up$' /sys/class/net/w*/operstate || grep -q -m1 '^up$' /sys/class/net/e*/operstate; } &&
curl -sf "$url/$LOCATION" --output "$weatherreport" && touch "$weatherreport"
}

# Forecast should be updated only once a day.
checkforecast() {
[ -s "$weatherreport" ] && [ "$(stat -c %y "$weatherreport" 2>/dev/null |
[ "$(stat -c %y "$weatherreport" 2>/dev/null |
cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ]
}

Expand All @@ -34,6 +36,7 @@ readfile() { weatherdata="$(cat "$weatherreport")" ;}

showweather() {
readfile
# shellcheck disable=SC2046,SC2183
printf "☔%s 🥶%s° 🌞%s°\n" "$(getprecipchance)" $(getdailyhighlow)
}

Expand All @@ -45,9 +48,18 @@ case $BLOCK_BUTTON in
☔: Chance of rain/snow
🥶: Daily low
🌞: Daily high" ;;
6) "$TERMINAL" -e "$EDITOR" "$0" ;;
6) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;;
esac

checkforecast || getforecast

showweather
# shellcheck disable=SC2015
checkforecast && showweather ||
( flock -n 9 &&
( tries=0; while [ $tries -ne 100 ]; do
getforecast && break ||
{ tries=$((tries+1)); sleep .1; }
done
! checkforecast &&
until getforecast; do sleep 60; done
pkill -RTMIN+"${1:-5}" "${STATUSBAR:-dwmblocks}"
) &
echo ) 9>"${XDG_RUNTIME_DIR}/sb-forecast.lock"
21 changes: 18 additions & 3 deletions .local/bin/statusbar/sb-iplocate
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,25 @@
#
# https://www.maketecheasier.com/ip-address-geolocation-lookups-linux/

set -e
ifinstalled "geoip" || exit 1

ifinstalled "geoip"
addr="$(geoiplookup "$(curl -sfm 1 ifconfig.me 2>/dev/null)")"
getip() {
{ grep -q -m1 '^up$' /sys/class/net/w*/operstate || grep -q -m1 '^up$' /sys/class/net/e*/operstate; } &&
curl -sf api.ipify.org --output "$ipfile"
}

ipfile="$XDG_RUNTIME_DIR/iplocate"
addr=$(cat "$ipfile" 2>/dev/null) && addr=$(geoiplookup "$addr" 2>/dev/null) && rm "$ipfile" ||
( flock -n 9 &&
( tries=0; while [ $tries -ne 100 ]; do
getip && break ||
{ tries=$((tries+1)); sleep .1; }
done
! [ -f "$ipfile" ] &&
until getip; do sleep 60; done &&
pkill -RTMIN+"${1:-27}" "${STATUSBAR:-dwmblocks}"
) &
echo; exit ) 9>"${XDG_RUNTIME_DIR}/sb-iplocate.lock"
name="${addr##*, }"
flag="$(grep "flag: $name" "${XDG_DATA_HOME:-$HOME/.local/share}/larbs/emoji")"
flag="${flag%% *}"
Expand Down
25 changes: 22 additions & 3 deletions .local/bin/statusbar/sb-moonphase
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,27 @@

moonfile="${XDG_DATA_HOME:-$HOME/.local/share}/moonphase"

[ -s "$moonfile" ] && [ "$(stat -c %y "$moonfile" 2>/dev/null | cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ] ||
{ curl -sf "wttr.in/?format=%m" > "$moonfile" || exit 1 ;}
checkmoon() {
[ "$(stat -c %y "$moonfile" 2>/dev/null |
cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ]
}

getmoon() { { grep -q -m1 '^up$' /sys/class/net/w*/operstate || grep -q -m1 '^up$' /sys/class/net/e*/operstate; } &&
curl -sf "wttr.in/?format=%m" --output "$moonfile" && touch "$moonfile"
}

checkmoon ||
( flock -n 9 &&
( tries=0; while [ $tries -ne 100 ]; do
# shellcheck disable=SC2015
getmoon && break ||
{ tries=$((tries+1)); sleep .1; }
done
! checkmoon &&
until getmoon; do sleep 60; done
pkill -RTMIN+"${1:-17}" "${STATUSBAR:-dwmblocks}"
) &
echo; exit ) 9>"${XDG_RUNTIME_DIR}/sb-moonphase.lock"

icon="$(cat "$moonfile")"

Expand Down Expand Up @@ -33,5 +52,5 @@ case $BLOCK_BUTTON in
- 🌖: Waning Gibbous
- 🌗: Last Quarter
- 🌘: Waning Crescent" ;;
6) "$TERMINAL" -e "$EDITOR" "$0" ;;
6) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;;
esac
42 changes: 31 additions & 11 deletions .local/bin/statusbar/sb-price
Original file line number Diff line number Diff line change
Expand Up @@ -24,33 +24,53 @@ interval="@14d" # History contained in chart preceded by '@' (7d = 7 days)
dir="${XDG_CACHE_HOME:-$HOME/.cache}/crypto-prices"
pricefile="$dir/$target-$denom"
chartfile="$dir/$target-$denom-chart"
filestat="$(stat -c %x "$pricefile" 2>/dev/null)"

[ -d "$dir" ] || mkdir -p "$dir"

updateprice() { curl -sf -m 1 --fail-early $denom.$url/{1$target,$target$interval} --output "$pricefile" --output "$chartfile" ||
rm -f "$pricefile" "$chartfile" ;}
checkprice() {
[ "$(stat -c %y "$pricefile" 2>/dev/null |
cut -d' ' -f1)" = "$(date '+%Y-%m-%d')" ]
}

[ "${filestat%% *}" != "$(date '+%Y-%m-%d')" ] &&
updateme="1"
updateprice() { { grep -q -m1 '^up$' /sys/class/net/w*/operstate || grep -q -m1 '^up$' /sys/class/net/e*/operstate; } &&
curl -sf \
--fail-early "${denom}.${url}/1${target}" "${denom}.${url}/${target}${interval}" \
--output "$pricefile" --output "$chartfile" &&
touch "$pricefile" "$chartfile"
}

checkprice || updateme="1"

case $BLOCK_BUTTON in
1) setsid "$TERMINAL" -e less -Srf "$chartfile" ;;
2) notify-send -u low "$icon Updating..." "Updating $name price..." ; updateme="1" ; showupdate="1" ;;
3) uptime="$(date -d "$filestat" '+%D at %T' | sed "s|$(date '+%D')|Today|")"
3) uptime="$(date -d "$(stat -c %x "$pricefile" 2>/dev/null)" '+%D at %T' | sed "s|$(date '+%D')|Today|")"
notify-send "$icon $name module" "\- <b>Exact price: \$$(cat "$pricefile")</b>
- Left click for chart of changes.
- Middle click to update.
- Shows 🔃 if updating prices.
- <b>Last updated:
$uptime</b>" ;;
6) "$TERMINAL" -e "$EDITOR" "$0" ;;
6) setsid -f "$TERMINAL" -e "$EDITOR" "$0" ;;
esac

[ -n "$updateme" ] &&
updateprice "$target" &&
[ -n "$showupdate" ] &&
notify-send "$icon Update complete." "$name price is now
\$$(cat "$pricefile")"
if [ -n "$showupdate" ]; then
updateprice && notify-send "$icon Update complete." "$name price is now \$$(cat "$pricefile")"
else
# shellcheck disable=SC2015
[ -n "$4" ] &&
( flock -n 9 &&
( tries=0; while [ $tries -ne 100 ]; do
updateprice && break ||
{ tries=$((tries+1)); sleep .1; }
done
! checkprice &&
until updateprice; do sleep 60; done
pkill -RTMIN+"$4" "${STATUSBAR:-dwmblocks}"
) &
echo; exit ) 9>"${XDG_RUNTIME_DIR}/sb-price.lock" ||
updateprice
fi

[ -f "$pricefile" ] && printf "%s%s%0.2f" "$icon" "$symb" "$(cat "$pricefile")"