aboutsummaryrefslogtreecommitdiff
path: root/src/lib/chapter_selection.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/chapter_selection.sh')
-rw-r--r--src/lib/chapter_selection.sh38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/lib/chapter_selection.sh b/src/lib/chapter_selection.sh
new file mode 100644
index 0000000..c3534a5
--- /dev/null
+++ b/src/lib/chapter_selection.sh
@@ -0,0 +1,38 @@
+chapter_selection() {
+ # Novel page HTML
+ novel_page="$(gum spin --spinner line --show-output -- \
+ curl --silent --get --data-urlencode "k=${args[title]}" "${1}")"
+
+ # Chapter data
+ IFS=$'\n' read -r -d '\n' -a chapter_locations <<<"$(echo "${novel_page}" |
+ pup 'div.list-chapter a.list-group-item attr{href}')" || true
+ IFS=$'\n' read -r -d '\n' -a chapter_names <<<"$(echo "${novel_page}" |
+ pup 'div.list-chapter span.chapter-name text{}')" || true
+
+ # Chapter collection for Gum
+ chapters=""
+
+ # Fix output format for Gum
+ for ((i = 0; i < "${#chapter_locations[@]}"; i++)); do
+ chapters+="$(printf "\nChapter ${i}:%s" "${chapter_names[${i}]}")"
+ done
+
+ # Remove leading new-line
+ chapters="$(echo "${chapters}" | sed '/./,$!d')"
+
+ # Prompt for user's novel choice
+ chapter_choice="$(echo "${chapters}" | gum filter)"
+
+ # Remove chapter discriminator from chapter choice
+ chapter_choice="${chapter_choice#Chapter [0-9]*: }"
+
+ # Locate chapter choice location
+ for ((i = 0; i < "${#chapter_locations[@]}"; i++)); do
+ if [[ "${chapter_names[${i}]}" = " ${chapter_choice}" ]]; then
+ chapter_location="https://www.honeyfeed.fm${chapter_locations[${i}]}"
+ fi
+ done
+
+ # Return chapter location
+ echo "${chapter_location}"
+}