aboutsummaryrefslogtreecommitdiff
path: root/.local/bin/statusbar/sb-ticker
blob: 5b261600ba50a66366e81292416a1351c2d9238c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash

# Usage
#   sb-ticker
# Sample output
#   ^DJI: 0.09%
#   CL=F: -1.88%
# Description
#   displays/retrieves the latest percent-change in stock market quotes listed in $XDG_CONFIG_HOME/tickers.
#       defaults to S&P 500, Dow Jones Industrial, and the Nasdaq
#
#   intended to be used in the statusbar, which will display the first quote price in the output

url="terminal-stocks.dev"
pricefile="${XDG_CACHE_HOME:-$HOME/.cache}/stock-prices"
tickerfile="${XDG_CONFIG_HOME:-$HOME/.config}/tickers"

[ -f "$tickerfile" ] && tickers="$(bat "$tickerfile")" || tickers="^GSPC,^DJI,^IXIC";

checkprice() {
  [ -s "$pricefile" ] && [ "$(stat -c %y "$pricefile" 2>/dev/null |
    cut -d':' -f1)" != "$(date '+%Y-%m-%d %H')" ]
}

getchange() {
  mapfile -t changes < <(sed -e 's/  / /g' "$pricefile" | rg -oe '[m-]\+[0-9]\+\.[0-9]\+' | sed 's/[m ]/;/g')
  IFS=',' read -ra TICKER <<< "$tickers"
  for idx in "${!TICKER[@]}"; do
    printf "%s: %s%%\n" "${TICKER[$idx]}" "${changes[$idx]//;/}"
  done
}

updateprice() { curl -sfm 10 "$url/$tickers" --output "$pricefile" || rm -f "$pricefile" ; }

case $BLOCK_BUTTON in
  1) setsid "$TERMINAL" -e less -Srf "$pricefile" >/dev/null 2>&1 ;;
  2) notify-send -u low "Updating..." "Updating prices" ; updateme="1" ;;
  3) notify-send "Current prices:" "Current stock prices:\n<b>$(getchange)</b>
- Left click to show price file
- Middle click to update stock prices
- Right click to get stock overview" ;;
  8) setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 ;;
esac

[ -n "$updateme" ] && updateprice

[ -f "$pricefile" ] && getchange

checkprice && updateprice