adding some scirpts
This commit is contained in:
parent
264ed44cc3
commit
4d9db9b053
130
scripts/libby
Executable file
130
scripts/libby
Executable file
|
@ -0,0 +1,130 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
while true; do
|
||||
case $1 in
|
||||
--rofi) mode="rofi"; shift ;;
|
||||
--mirror) shift; mirrornum="$1"; shift ;;
|
||||
--no-view) view=0; shift ;;
|
||||
--to-kindle) tokindle=1; view=0; shift ;;
|
||||
--to-usb) tousb=1; view=0; shift ;;
|
||||
*) query="$*"; break ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$query" ]; then
|
||||
echo "Usage: libby [--rofi] [--mirror <num>] [--no-view] [--to-kindle] <query>"
|
||||
echo " --rofi: use rofi to select a book (default is fzf)"
|
||||
echo " --mirror <num>: use an alternative libgen mirror (default: 3)"
|
||||
echo " --no-view: don't view the result"
|
||||
echo " --to-kindle: convert file to .mobi and send to \$KINDLE_EMAIL via mutt/neomutt (implies --no-view)"
|
||||
echo " --to-usb: copy file to root of \$USB via rsync (implies --no-view)"
|
||||
echo -e " <query>: the query to search for\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[ -z "$LIBBY_OUTPUT_DIR" ] && LIBBY_OUTPUT_DIR="$HOME/books"
|
||||
mkdir -p "$LIBBY_OUTPUT_DIR"
|
||||
[ -z "$LIBBY_VIEWER" ] && LIBBY_VIEWER="xdg-open"
|
||||
[ -z "$mode" ] && mode="fzf"
|
||||
[ -z "$mirrornum" ] && mirrornum=3
|
||||
[ -z "$view" ] && view=1
|
||||
[ -z "$tokindle" ] && tokindle=0
|
||||
[ -z "$tousb" ] && tousb=0
|
||||
|
||||
download() {
|
||||
echo "fetching data..."
|
||||
data=$(curl -A "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.15.5 Chrome/87.0.4280.144 Safari/537.36" -Ls "https://libgen.gs/index.php?req=$(echo "$query" | jq -sRr @uri)&columns%5B%5D=t&columns%5B%5D=a&columns%5B%5D=s&columns%5B%5D=y&columns%5B%5D=i&objects%5B%5D=f&topics%5B%5D=l&topics%5B%5D=f&res=25")
|
||||
|
||||
# get array of book info with pup using the table rows (tr elements), it's the 2nd to last table
|
||||
bookdata=$(echo $data | pup 'table:nth-last-of-type(1)')
|
||||
|
||||
trr=1 # first row is the header
|
||||
skipped=0 # number of skipped books due to extension exclusion
|
||||
|
||||
# continue until no more tr elements
|
||||
while true; do
|
||||
if [ $trr -eq 1 ]; then
|
||||
bookTitle=$(echo "$bookdata" | pup "tr:nth-of-type($trr) td:nth-of-type(1) text{}" | grep -v "^\s*$" | awk '{$1=$1};1' | tail -n +8 | head -2 | xargs)
|
||||
else
|
||||
bookTitle=$(echo "$bookdata" | pup "tr:nth-of-type($trr) td:nth-of-type(1) text{}" | grep -v "^\s*$" | awk '{$1=$1};1' | head -2 | xargs)
|
||||
fi
|
||||
|
||||
if [ -z "$bookTitle" ]; then
|
||||
break # exit if no title
|
||||
fi
|
||||
|
||||
bookAuthor=$(echo $bookdata | pup "tr:nth-of-type($trr) td:nth-of-type(2) text{}" | sed -n 2p | xargs)
|
||||
bookPublisher=$(echo $bookdata | pup "tr:nth-of-type($trr) td:nth-of-type(3) text{}" | xargs)
|
||||
bookYear=$(echo $bookdata | pup "tr:nth-of-type($trr) td:nth-of-type(4) text{}" | xargs)
|
||||
bookLanguage=$(echo $bookdata | pup "tr:nth-of-type($trr) td:nth-of-type(5) text{}" | xargs)
|
||||
bookSize=$(echo $bookdata | pup "tr:nth-of-type($trr) td:nth-of-type(7) text{}" | xargs)
|
||||
bookFiletype=$(echo $bookdata | pup "tr:nth-of-type($trr) td:nth-of-type(8) text{}" | xargs)
|
||||
|
||||
if ! echo $bookFiletype | grep -q "\(epub\|pdf\)"; then
|
||||
skipped=$((skipped+1))
|
||||
trr=$((trr+1))
|
||||
continue
|
||||
fi
|
||||
|
||||
bookMirror=$(echo $bookdata | pup "tr:nth-of-type($trr) td:nth-of-type(9) a:nth-of-type($mirrornum) attr{href}" | xargs)
|
||||
|
||||
echo ";0;$((trr-skipped));1;$bookTitle;2;$bookAuthor;3;$bookPublisher;4;$bookYear;5;$bookSize;6;$bookFiletype;7;$bookMirror;8;"
|
||||
trr=$((trr+1))
|
||||
done > /tmp/libgen.txt
|
||||
|
||||
# if file is empty, exit
|
||||
if [ ! -s /tmp/libgen.txt ]; then
|
||||
echo "No results found for '$query'"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# exclude mirror
|
||||
if [ "$mode" = "rofi" ]; then
|
||||
line=$(cat /tmp/libgen.txt | sed 's/;0;//g' | sed 's/;1;/: /' | sed 's/;2;/ - /' | sed 's/;3;/ (/' | sed 's/;4;/, /' | sed 's/;5;/, /' | sed 's/;6;/) [/' | sed 's/;7;.*/]/' | sed 's/[0-9][0-9][0-9][0-9][0-9][0-9]\+ \?,\?\;\?//g' | awk '{$1=$1};1' | recode -q html..ascii | rofi -i -hover-select -me-select-entry '' -me-accept-entry MousePrimary -dmenu -p "Select book: " -hover-select -theme-str '* { font: "monospace 12"; width: 80%; }' -l 26 | cut -d':' -f1 | sed 's/;1;.*//g' | sed 's/;0;//g')
|
||||
else
|
||||
line=$(cat /tmp/libgen.txt | sed 's/;0;//g' | sed 's/;1;/: /' | sed 's/;2;/ - /' | sed 's/;3;/ (/' | sed 's/;4;/, /' | sed 's/;5;/, /' | sed 's/;6;/) [/' | sed 's/;7;.*/]/' | sed 's/[0-9][0-9][0-9][0-9][0-9][0-9]\+ \?,\?\;\?//g' | awk '{$1=$1};1' | recode -q html..ascii | fzf | cut -d':' -f1 | sed 's/;1;.*//g' | sed 's/;0;//g')
|
||||
fi
|
||||
|
||||
[ -z "$line" ] && return 1
|
||||
|
||||
title=$(cat /tmp/libgen.txt | sed -n "$line"p | sed 's/.*;1;//' | sed 's/;2;.*//g' | sed 's/[0-9][0-9][0-9][0-9][0-9][0-9]\+ \?,\?\;\?//g' | awk '{$1=$1};1' | sed 's/ 1$//g;s/ X$//g;s/ b$//g' | recode -q html..ascii)
|
||||
author=$(cat /tmp/libgen.txt | sed -n "$line"p | sed 's/.*;2;//' | sed 's/;3;.*//g')
|
||||
publisher=$(cat /tmp/libgen.txt | sed -n "$line"p | sed 's/.*;3;//' | sed 's/;4;.*//g')
|
||||
year=$(cat /tmp/libgen.txt | sed -n "$line"p | sed 's/.*;4;//' | sed 's/;5;.*//g')
|
||||
size=$(cat /tmp/libgen.txt | sed -n "$line"p | sed 's/.*;5;//' | sed 's/;6;.*//g')
|
||||
filetype=$(cat /tmp/libgen.txt | sed -n "$line"p | sed 's/.*;6;//' | sed 's/;7;.*//g')
|
||||
mirror=$(cat /tmp/libgen.txt | sed -n "$line"p | sed 's/.*;7;//' | sed 's/;8;.*//g')
|
||||
|
||||
[ -z "$mirror" ] && echo "no mirror found" && return 1
|
||||
echo "fetching mirror..."
|
||||
mirror=$(curl -A "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.15.5 Chrome/87.0.4280.144 Safari/537.36" -Ls $mirror | pup "#download a attr{href}" | head -1)
|
||||
[ -z "$mirror" ] && echo "failed to retrieve mirror" && return 1
|
||||
|
||||
# download from mirror and save to ~/books
|
||||
title=$(echo "$title" | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g' | tr -cd '[:alnum:]._-' | sed 's/-\+/-/g' | sed 's/-x$//' | sed 's/-$//g' | sed 's/^-//g')
|
||||
echo "downloading $title.$filetype..."
|
||||
wget -c -O - "$mirror" > "$LIBBY_OUTPUT_DIR/$title.$filetype"
|
||||
echo $mirror
|
||||
|
||||
if [ $tokindle = 1 ]; then
|
||||
ebook-convert "$LIBBY_OUTPUT_DIR/$title.$filetype" "/tmp/$title.mobi"
|
||||
echo "" | neomutt -s "wow" -a "/tmp/$title.mobi" -- $KINDLE_EMAIL
|
||||
fi
|
||||
|
||||
if [ $tousb = 1 ]; then
|
||||
if ! rsync -tEravhp --progress "$LIBBY_OUTPUT_DIR/$title.$filetype" "$USB/$title.$filetype"; then
|
||||
echo "Waiting for USB..."
|
||||
sleep 1
|
||||
while ! rsync -tEravhp --progress "$LIBBY_OUTPUT_DIR/$title.$filetype" "$USB/$title.$filetype"; do
|
||||
sleep 1
|
||||
done
|
||||
fi
|
||||
sync
|
||||
fi
|
||||
|
||||
if [ $view = 1 ]; then
|
||||
$LIBBY_VIEWER "$LIBBY_OUTPUT_DIR/$title.$filetype"
|
||||
fi
|
||||
}
|
||||
|
||||
download "$query"
|
|
@ -1,10 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
nextcloud --background &
|
||||
waybar &
|
||||
rbw-agent &
|
||||
killall jellyfin-mpv-shim && jellyfin-mpv-shim &
|
||||
/usr/lib/kdeconnectd &
|
||||
emacs --daemon &
|
||||
nm-applet &
|
||||
nextcloud --background &
|
||||
greenclip daemon &
|
||||
waybar &
|
||||
|
|
Loading…
Reference in a new issue