diff --git a/bookmarks-dl.sh b/bookmarks-dl.sh index ac00ccb..1c08946 100755 --- a/bookmarks-dl.sh +++ b/bookmarks-dl.sh @@ -4,75 +4,49 @@ # Desc: A script used to download remote bookmarks into the XBEL format. # Auth: Jaidyn Ann # Date: 2023-09-02 -# Reqs: lynx, jq +# Reqs: lynx, jq, gsed # Lisc: GPLv3 #――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― SOURCE_DIRS="./sources/ $HOME/.local/libexec/bookmarks-dl/sources/ /usr/local/libexec/bookmarks-dl/sources/ /usr/libexec/bookmarks-dl/sources/" -FORMAT_DIRS="./formats/ $HOME/.local/libexec/bookmarks-dl/formats/ /usr/local/libexec/bookmarks-dl/formats/ /usr/libexec/bookmarks-dl/formats/" + usage() { 1>&2 echo "usage: $(basename "$0") SOURCE ..." - 1>&2 echo " $(basename "$0") --sources" - 1>&2 echo " $(basename "$0") --formats" + 1>&2 echo " $(basename "$0") --list" 1>&2 echo " $(basename "$0") --help" 1>&2 echo "" 1>&2 echo " SOURCE is a source of bookmarks." 1>&2 echo " You can see a list of sources with '--list'." - 1>&2 echo " You can see a list of output formats with '--formats'." } # Return the paths to all available bookmarks-dl “source” scripts. -all_scripts() { - local target_dirs="$1" - find $target_dirs -type f -name '*.sh' \ +all_sources() { + find $SOURCE_DIRS -type f -name '*.sh' \ 2> /dev/null } # Return the path to a specific bookmarks-dl source. -get_script() { - local script_dirs="$1" - local script_name="$2" - all_scripts \ +get_source() { + local script_name="$1" + all_sources \ | grep "/$script_name.sh" \ | head -1 } # List all available bookmarks-dl sources user-friendly-like. -list_scripts() { - local script_dirs="$1" - for script in $(all_scripts "$script_dirs"); do +list_sources() { + for source in $(all_sources); do printf '%s\t%s\n' \ - "$(basename "$script" | sed 's/\.sh//')" \ - "$script" + "$(basename "$source" | sed 's/\.sh//')" \ + "$source" done } -# Given the arguments to this program, find that matching `-f`, the paramter -# for selecting a specific format. -get_format() { - while test -n "$1" -a ! "$1" = "-f"; do - shift - done - if test "$1" = "-f"; then - echo "$2" - fi -} - - -# The function called to format the internal JSON-format bookmarks into a -# more usable format. This should be overridden by a “format” script; see -# last couple of lines of this script. -# It receives the bookmarks over stdin, and returns them over stdout. -format_bookmarks() { - cat -} - - # The function called to parse arguments of a source and begin downloading # bookmarks-dl.sh # This should be overloaded by a “source” script. @@ -140,27 +114,22 @@ curl_browseresque() { # ———————————————————————————————————————— SOURCE_NAME="$1" case "$SOURCE_NAME" in - --sources|sources) - list_scripts "$SOURCE_DIRS" + --list|list) + list_sources exit 0 ;; - --formats|formats) - list_scripts "$FORMAT_DIRS" - exit 0 - ;; - --help|-h|help|'') usage exit 1 ;; *) - SOURCE="$(get_script "$SOURCE_DIRS" "$SOURCE_NAME")" + SOURCE="$(get_source "$SOURCE_NAME")" if test -f "$SOURCE"; then source "$SOURCE" fi if test "$?" -ne 0 -o ! -f "$SOURCE"; then 1>&2 echo "The source '$SOURCE_NAME' couldn’t be found." - 1>&2 echo "Try '$(basename "$0") --sources' to see a list of possible sources." + 1>&2 echo "Try '$(basename "$0") --list' to see a list of possible sources." fi ;; esac @@ -174,13 +143,5 @@ else fi -FORMAT="$(get_script "$FORMAT_DIRS" "$(get_format $@)")" -if test -f "$FORMAT"; then - source "$FORMAT" \ - 2> /dev/null > /dev/null -fi - - -# These both should be overloaded. -source_start $@ \ - | format_bookmarks +# This should be overloaded. +source_start $@ diff --git a/formats/xbel.sh b/formats/xbel.sh deleted file mode 100644 index 2f4716c..0000000 --- a/formats/xbel.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh -#――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― -# Name: bookmarks-dl: xbel -# Desc: Output format for bookmarks-dl, formatting bookmarks in XBEL format. -# Auth: Jaidyn Ann -# Date: 2023-09-04 -# Reqs: lynx, jq -# Lisc: GPLv3 -#――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― - -format_bookmarks() { - local json_bookmarks_file="$(mktemp)" - cat \ - > "$json_bookmarks_file" - - echo '' - echo '' - - items_count="$(jq -r '. | length' < "$json_bookmarks_file")" - item_index="0" - while test "$item_index" -lt "$items_count"; do - format_bookmark "$json_bookmarks_file" "$item_index" - item_index="$(echo "$item_index + 1" | bc)" - done - - echo "" - rm "$json_bookmarks_file" -} - - -format_bookmark() { - local json_file="$1" - local json_index="$2" - - title="$(jq -r ".[$json_index].title" < "$json_file")" # | html_text_deescape | html_escape)" - desc="$(jq -r ".[$json_index].desc" < "$json_file")" # | html_text_deescape | html_escape)" - added="$(jq -r ".[$json_index].added" < "$json_file")" - href="$(jq -r ".[$json_index].href" < "$json_file")" - if test -z "$title" -a -n "$desc"; then - title="$(echo "$desc" | head --bytes=40)" - fi - - cat < - $(if valid_value "$title"; then echo "$title"; fi) - $(if valid_value "$desc"; then echo "$desc"; fi) - -MDR -} - - -valid_value() { - local value="$1" - test -n "$value" -a ! "$value" = "null" -}