Another copy of my dotfiles. Because I don't completely trust GitHub.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

70 lines
2.2 KiB

#!/bin/sh
# This is a small script to open a book from your calibre library
# Using dmenu.
USERNAME="yigitcolakoglu"
PASSWORD="$(pass show Server/calibre.yigitcolakoglu.com/yigitcolakoglu)"
HOST="https://calibre.fr1nge.xyz"
function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }
rawurlencode() {
local string="${1}"
local strlen=${#string}
local encoded=""
local pos c o
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}" # You can either set a return variable (FASTER)
REPLY="${encoded}" #+or echo the result (EASIER)... or both... :p
}
if [ -d "$XDG_RUNTIME_DIR/books" ]; then
selection="$(find "$XDG_RUNTIME_DIR/books" -type f | dmenu -l 5 -p "Please enter the book's name")"
else
selection="$(printf "" | dmenu -p "Please enter the book's name")"
fi
if [ -f "$selection" ]; then
filename="$selection"
else
bookname="$selection"
query=$(rawurlencode "$bookname")
[ -z "$query" ] && exit
XML=$(curl -s -u "$USERNAME:$PASSWORD" "$HOST/opds/search?query=$query")
menu=$(echo $XML | xpath -q -e '//entry/title | //entry/author/name | //entry/link[@rel="http://opds-spec.org/acquisition"][position()<=1]/@href')
book=$(echo "$menu" | \
sed 's/<title>\(.*\)<\/title>/\1|/;N;s/<name>\(.*\)<\/name>/\1|/;N;s/href="\(.*\)"/\1/;s/\n/ /g' | \
column -s '|' -t -T 1 -c 200| dmenu -i -p "Please select the book" -l 5)
[ -z "$book" ] && exit
name=$(echo "$book" | sed 's/\s\{2,\}/\n/g' | head -n 1)
author=$(echo "$book" | sed 's/\s\{2,\}/\n/g' | head -n 2 | tail -n 1)
path=$(echo "$book" | sed 's/\s\{2,\}/\n/g' | tail -n 1)
mkdir -p "$XDG_RUNTIME_DIR/books"
notify-send -a " Downloading" "$(printf "%s\n%s" "$name" "$author")"
wget -nc -P "$XDG_RUNTIME_DIR/books" -q --content-disposition \
--user "$USERNAME" --password "$PASSWORD" "$HOST$path"
out=$(curl -s --head -u "$USERNAME:$PASSWORD" "$HOST$path" | \
grep "Content-Disposition" |\
sed -E 's/Content-Disposition:.*filename=([^;]*);.*/\1/g')
filename="$XDG_RUNTIME_DIR/books/$(urldecode $out)"
fi
xdg-open "$filename"