books-search.sh 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #!/usr/bin/env bash
  2. # -----------------------------------------------------------------------------
  3. # Info:
  4. # author: Miroslav Vidovic
  5. # file: books-search.sh
  6. # created: 13.08.2017.-08:06:54
  7. # revision: ---
  8. # version: 1.0
  9. # -----------------------------------------------------------------------------
  10. # Requirements:
  11. # rofi
  12. # Description:
  13. # Use rofi to search my books.
  14. # Usage:
  15. # books-search.sh
  16. # -----------------------------------------------------------------------------
  17. # Script:
  18. # Books directory
  19. BOOKS_DIR=~/var/calibre
  20. mkdir -p ~/var/calibre
  21. # Save find result to F_ARRAY
  22. readarray -t F_ARRAY <<< "$(find "$BOOKS_DIR" -type f -name '*.epub')"
  23. # Associative array for storing books
  24. # key => book name
  25. # value => absolute path to the file
  26. # BOOKS['filename']='path'
  27. declare -A BOOKS
  28. # Add elements to BOOKS array
  29. get_books() {
  30. # if [ ${#F_ARRAY[@]} != 0 ]; then
  31. if [[ ! -z ${F_ARRAY[@]} ]]; then
  32. for i in "${!F_ARRAY[@]}"
  33. do
  34. path=${F_ARRAY[$i]}
  35. file=$(basename "${F_ARRAY[$i]}")
  36. BOOKS+=(["$file"]="$path")
  37. done
  38. else
  39. echo "$BOOKS_DIR is empty!"
  40. echo "Please put some books in it."
  41. echo "Only .pdf files are accepted."
  42. exit
  43. fi
  44. }
  45. # List for rofi
  46. gen_list(){
  47. for i in "${!BOOKS[@]}"
  48. do
  49. echo "$i"
  50. done
  51. }
  52. main() {
  53. get_books
  54. book=$( (gen_list) | rofi -dmenu -i -matching fuzzy -no-custom -location 0 -p "Book > " )
  55. if [ -n "$book" ]; then
  56. xdg-open "${BOOKS[$book]}"
  57. fi
  58. }
  59. main
  60. exit 0