Simplify Further | Remove if statements

1- Used logical operators instead of if statements.
2- Improved indentations and blocks for better readibility.
3- Simplified in general.
This commit is contained in:
Emre AKYÜZ 2023-09-09 16:28:31 +03:00 committed by GitHub
parent 943220f884
commit d3035edc7e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,18 +1,15 @@
#!/bin/sh #!/bin/dash
URLQUERY_FILE="~/.local/share/larbs/urlquery" URLQUERY_FILE="~/.local/share/larbs/urlquery"
ACTION_MENU='@@' ACTION_MENU='@@'
read_bookmarks() { read_bookmarks() {
if [ ! -f "$URLQUERY_FILE" ] || [ ! -s "$URLQUERY_FILE" ]; then [ -f "$URLQUERY_FILE" ] && [ -s "$URLQUERY_FILE" ] && jq '.' "$URLQUERY_FILE" || echo "[]"
echo "[]"
else
jq '.' "$URLQUERY_FILE"
fi
} }
write_bookmarks() { write_bookmarks() {
echo "$1" > "${URLQUERY_FILE}.tmp" && mv "${URLQUERY_FILE}.tmp" "$URLQUERY_FILE" echo "$1" > "${URLQUERY_FILE}.tmp"
mv "${URLQUERY_FILE}.tmp" "$URLQUERY_FILE"
} }
update_bookmark_popularity() { update_bookmark_popularity() {
@ -22,74 +19,55 @@ update_bookmark_popularity() {
contains_search() { contains_search() {
case "$1" in case "$1" in
*"search"*) return 0 ;; *"search"*) return 0 ;;
*"wiki"*) return 0 ;;
*) return 1 ;; *) return 1 ;;
esac esac
} }
bookmarks=$(read_bookmarks) bookmarks=$(read_bookmarks)
while true; do while true; do
SELECTION=$(echo "$bookmarks" | jq -r '. | sort_by(.[2]) | reverse | .[] | .[0]' | dmenu -l 10 -p "Bookmarks") SELECTION=$(echo "$bookmarks" | jq -r '. | sort_by(.[2]) | reverse | .[] | .[0]' | dmenu -i -l 10 -p "Bookmarks")
if [ -z "$SELECTION" ] || [ "$SELECTION" != "$ACTION_MENU" ]; then [ -z "$SELECTION" ] || [ "$SELECTION" != "$ACTION_MENU" ] && write_bookmarks "$bookmarks" && break
write_bookmarks "$bookmarks"
break
fi
ACTION=$(echo "Add a New Bookmark\nDelete a Bookmark\nEdit a Bookmark" | dmenu -l 3 -p "Action")
ACTION=$(echo "Add a New Bookmark\nDelete a Bookmark\nEdit a Bookmark" | dmenu -i -l 3 -p "Action")
case "$ACTION" in case "$ACTION" in
"Add a New Bookmark") "Add a New Bookmark")
URL=$(xclip -o) URL=$(xclip -o)
if echo "$URL" | grep -q "^http"; then echo "$URL" | grep -q "^http" && {
if ! echo "$bookmarks" | jq -e --arg url "$URL" '.[] | select(.[1] == $url)' > /dev/null; then ! echo "$bookmarks" | jq -e --arg url "$URL" '.[] | select(.[1] == $url)' > /dev/null && {
NAME=$(dmenu -l 0 -p "Name") NAME=$(dmenu -i -l 0 -p "Name")
bookmarks=$(echo "$bookmarks" | jq --arg name "$NAME" --arg url "$URL" '. |= .+ [[ $name, $url, 0 ]]') bookmarks=$(echo "$bookmarks" | jq --arg name "$NAME" --arg url "$URL" '. |= .+ [[ $name, $url, 0 ]]')
notify-send "'$NAME' is bookmarked." notify-send "'$NAME' is bookmarked."
else } || notify-send "The URL is already in the list."
notify-send "The URL is already in the list." } || notify-send "The clipboard content is not a valid URL."
fi
else
notify-send "The clipboard content is not a valid URL."
fi
;; ;;
"Delete a Bookmark") "Delete a Bookmark")
NAME=$(echo "$bookmarks" | jq -r '.[] | .[0]' | dmenu -p "Delete") NAME=$(echo "$bookmarks" | jq -r '.[] | .[0]' | dmenu -p "Delete")
if [ -n "$NAME" ]; then [ -n "$NAME" ] && {
bookmarks=$(echo "$bookmarks" | jq --arg name "$NAME" 'del(.[] | select(.[0] == $name))') bookmarks=$(echo "$bookmarks" | jq --arg name "$NAME" 'del(.[] | select(.[0] == $name))')
notify-send "'$NAME' is deleted." notify-send "'$NAME' is deleted."
fi }
;; ;;
"Edit a Bookmark") "Edit a Bookmark")
NAME=$(echo "$bookmarks" | jq -r '.[] | .[0]' | dmenu -p "Edit") NAME=$(echo "$bookmarks" | jq -r '.[] | .[0]' | dmenu -p "Edit")
FIELD=$(echo "name\nURL" | dmenu -l 2 -p "Edit") FIELD=$(echo "name\nURL" | dmenu -i -l 2 -p "Edit")
[ -n "$NAME" ] && [ -n "$FIELD" ] && {
if [ -n "$NAME" ] && [ -n "$FIELD" ]; then NEW_VALUE=$(dmenu -i -l 0 -p "New $FIELD")
NEW_VALUE=$(dmenu -l 0 -p "New $FIELD") [ "$FIELD" = "name" ] && bookmarks=$(echo "$bookmarks" | jq --arg name "$NAME" --arg new_name "$NEW_VALUE" '(.[] | select(.[0] == $name))[0] = $new_name') || bookmarks=$(echo "$bookmarks" | jq --arg name "$NAME" --arg new_url "$NEW_VALUE" '(.[] | select(.[0] == $name))[1] = $new_url')
if [ "$FIELD" = "name" ]; then notify-send "'$NAME' is updated."
bookmarks=$(echo "$bookmarks" | jq --arg name "$NAME" --arg new_name "$NEW_VALUE" '(.[] | select(.[0] == $name))[0] = $new_name') }
else ;;
bookmarks=$(echo "$bookmarks" | jq --arg name "$NAME" --arg new_url "$NEW_VALUE" '(.[] | select(.[0] == $name))[1] = $new_url')
fi
notify-send "'$NAME' is updated."
fi
;;
esac esac
done done
if [ -n "$SELECTION" ] && [ "$SELECTION" != "$ACTION_MENU" ]; then [ -n "$SELECTION" ] && [ "$SELECTION" != "$ACTION_MENU" ] && {
URL=$(echo "$bookmarks" | jq -r --arg name "$SELECTION" '.[] | select(.[0] == $name) | .[1]') URL=$(echo "$bookmarks" | jq -r --arg name "$SELECTION" '.[] | select(.[0] == $name) | .[1]')
[ -z "$URL" ] || [ "$URL" = "null" ] || {
if [ -z "$URL" ] || [ "$URL" = "null" ]; then contains_search "$URL" && QUERY=$(dmenu -i -l 0 -p "Search") && URL="${URL}${QUERY}"
exit 0 bookmarks=$(echo "$bookmarks" | update_bookmark_popularity "$SELECTION")
fi write_bookmarks "$bookmarks"
$BROWSER "$URL"
if contains_search "$URL"; then }
QUERY=$(dmenu -l 0 -p "Search") }
URL="${URL}${QUERY}"
fi
bookmarks=$(echo "$bookmarks" | update_bookmark_popularity "$SELECTION")
write_bookmarks "$bookmarks"
$BROWSER "$URL"
fi