.dotfiles/global/scripts/bin/diary.sh

121 lines
2.9 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
set -e
tput clear
source "${HOME:?}/scripts/functions.sh"
CITY_FILE="${HOME:?}/scripts/cities.txt"
# do we use weather info?
weather=1
tools=("fzf" "jq" "jrnl" "nvim" "sha256sum")
check_tools "$tools"
if [[ -z "$OPENWEATHER_APIKEY" ]]; then
die "openweathermap api key is not set"
fi
if [[ ! -f "$CITY_FILE" ]]; then
die "cities.txt is not found"
fi
CITY=$(cat "$CITY_FILE" | fzf --prompt="Type a city: ")
# Проверяем, выбран ли город
if [[ -z "$CITY" ]]; then
die "city not selected"
fi
set_text_color 43
set_bold_text
echo -n "Type a title: "
reset_text_format
read TITLE
if [[ -z "$TITLE" ]]; then
die "title not found"
fi
while true; do
set_text_color 43
set_bold_text
echo -n "Type a geo: "
reset_text_format
read GEO
# if a string is empty then skip it
if [[ -z "$GEO" ]]; then
break
fi
if [[ "$GEO" =~ ^-?[0-9]+\.[0-9]+,-?[0-9]+\.[0-9]+$ ]]; then
break
else
set_text_color 1
set_bold_text
echo "Wrong geo format (lat and lon 52.18969496420507,20.90814238187223)"
reset_text_format
fi
done
RESPONSE=$(curl -s "https://api.openweathermap.org/data/2.5/weather?q=${CITY}&appid=${OPENWEATHER_APIKEY}&units=metric")
if [[ "$(echo "$RESPONSE" | jq '.cod')" != "200" ]]; then
set_text_color 1
set_bold_text
echo "Error: API Response: $RESPONSE"
reset_text_format
while true; do
set_text_color 50
set_bold_text
read -p "continue? (y|n) " bad_weather_answer
reset_text_format
if [[ "$bad_weather_answer" = "n" ]]; then
exit 1
else
weather=0
break
fi
done
fi
# Парсим данные о погоде
if [[ "$weather" -eq 1 ]]; then
WEATHER="$(echo "$RESPONSE" | jq -r '.weather[0].description')"
TZ="$(calculate_timezone "$(echo "$RESPONSE" | jq -r '.timezone')")"
WEATHER_ICON="$(echo "$RESPONSE" | jq -r '.weather[0].icon')"
TEMPERATURES="🌡️ $(round $(echo "$RESPONSE" | jq -r '.main.temp')) ($(round $(echo "$RESPONSE" | jq -r '.main.feels_like')))"
SUNRISE="$(date --date='@'"$(echo "$RESPONSE" | jq -r '.sys.sunrise')" +'%H:%M')"
SUNSET="$(date --date='@'"$(echo "$RESPONSE" | jq -r '.sys.sunset')" +'%H:%M')"
SUNINFO="🌅 "$SUNRISE", 🌇 "$SUNSET""
IFS=',' read -r geo1 geo2 <<<"$GEO"
fi
TEMPLATE="${TITLE}
- ${weather_emoji[WEATHER_ICON]} Weather:
- ${CITY}
- ${TEMPERATURES:-"none"}
- ${SUNINFO:-"none"}
- Geo:
- ${geo1:-"none"}
- ${geo2:-"none"}"
FILENAME="/tmp/$(generate_random_string).jrnl"
echo "$TEMPLATE" >"${FILENAME:?}"
CHECKSUMM="$(checksumm "${FILENAME:?}")"
nvim "${FILENAME:?}" || rm "${FILENAME:?}"
if [[ "$CHECKSUMM" = "$(checksumm "${FILENAME:?}")" ]]; then
rm "${FILENAME:?}"
set_bold_text
echo "Nothing saving..."
reset_text_format
exit 0
fi
tput clear
jrnl --import --file "${FILENAME:?}"