initial commit
This commit is contained in:
commit
4a6050b930
6 changed files with 705 additions and 0 deletions
65
eww/get-cover.sh
Executable file
65
eww/get-cover.sh
Executable file
|
|
@ -0,0 +1,65 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This script fetches and caches album art for the current song.
|
||||
# It's designed to be called by EWW and is optimized to minimize
|
||||
# network and disk I/O.
|
||||
|
||||
WIDGET_DIR=$(dirname "$0")
|
||||
DEFAULT_COVER="$WIDGET_DIR/assets/DEFAULTImage.jpeg"
|
||||
CACHE_DIR="$HOME/.cache/eww/music-widget"
|
||||
mkdir -p "$CACHE_DIR"
|
||||
|
||||
# Function to safely exit with the default cover
|
||||
show_default_cover() {
|
||||
echo "$DEFAULT_COVER"
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Get the art URL. Exit if player is not running or no URL is available.
|
||||
COVER_URL=$(playerctl metadata mpris:artUrl 2>/dev/null)
|
||||
if [[ -z "$COVER_URL" ]]; then
|
||||
show_default_cover
|
||||
fi
|
||||
|
||||
# If it's a local file (file://), decode the path and use it directly.
|
||||
if [[ "$COVER_URL" == file://* ]]; then
|
||||
# URL-decode the path to handle special characters like spaces
|
||||
LOCAL_PATH=$(printf '%b' "${COVER_URL#file://}")
|
||||
if [[ -f "$LOCAL_PATH" ]]; then
|
||||
echo "$LOCAL_PATH"
|
||||
exit 0
|
||||
else
|
||||
show_default_cover
|
||||
fi
|
||||
fi
|
||||
|
||||
# For web URLs, we hash the URL to create a unique filename for caching.
|
||||
URL_HASH=$(echo -n "$COVER_URL" | md5sum | awk '{print $1}')
|
||||
# Try to get a file extension from the URL, default to .jpg if it's weird.
|
||||
EXTENSION="${COVER_URL##*.}"
|
||||
if [[ "$EXTENSION" == "$COVER_URL" ]] || [[ ${#EXTENSION} -gt 5 ]]; then
|
||||
EXTENSION="jpg"
|
||||
fi
|
||||
CACHED_COVER="$CACHE_DIR/$URL_HASH.$EXTENSION"
|
||||
|
||||
# If the cover is not already cached, download it.
|
||||
if [ ! -f "$CACHED_COVER" ]; then
|
||||
# Download with a 5-second timeout. If it fails or the downloaded file is empty,
|
||||
# clean up and show the default cover.
|
||||
curl -s -L --max-time 5 "$COVER_URL" -o "$CACHED_COVER"
|
||||
if [[ $? -ne 0 ]] || [[ ! -s "$CACHED_COVER" ]]; then
|
||||
rm -f "$CACHED_COVER"
|
||||
show_default_cover
|
||||
fi
|
||||
fi
|
||||
|
||||
# As a final sanity check, ensure the cached file is a valid image.
|
||||
# If not, remove the junk file and show the default cover.
|
||||
if file "$CACHED_COVER" | grep -qE 'image|jpeg|png|jpg|gif'; then
|
||||
echo "$CACHED_COVER"
|
||||
else
|
||||
rm -f "$CACHED_COVER"
|
||||
show_default_cover
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue