Update src/main.sh
This commit is contained in:
+250
-53
@@ -1,50 +1,183 @@
|
||||
#!/bin/bash
|
||||
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
echo
|
||||
else
|
||||
echo "jq ontbreekt."
|
||||
sudo apt install jq -y || {
|
||||
echo "installatie jq mislukt. abort"
|
||||
echo "probeer later opnieuw"
|
||||
exit 1
|
||||
}
|
||||
echo
|
||||
echo "jq is geïnstalleerd. Wiki-terminal wordt gestart."
|
||||
echo
|
||||
fi
|
||||
set -uo pipefail
|
||||
|
||||
if command -v less >/dev/null 2>&1; then
|
||||
echo
|
||||
else
|
||||
echo "less ontbreekt."
|
||||
sudo apt install less -y || {
|
||||
echo "installatie less mislukt. abort"
|
||||
echo "probeer later opnieuw"
|
||||
CONFIG_DIR="$HOME/.config/wiki-cli"
|
||||
CONFIG_FILE="$CONFIG_DIR/config.conf"
|
||||
LANG_CODE="en" # fallback totdat config geladen is
|
||||
SUPPORTED_LANGS=(nl en fr de)
|
||||
|
||||
load_config() {
|
||||
if [ -f "$CONFIG_FILE" ]; then
|
||||
# shellcheck source=/dev/null
|
||||
source "$CONFIG_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
save_config() {
|
||||
mkdir -p "$CONFIG_DIR"
|
||||
cat > "$CONFIG_FILE" <<EOF
|
||||
# wiki-cli configuratie
|
||||
# Toegestane waarden voor LANG_CODE: nl, en, fr, de
|
||||
LANG_CODE="$LANG_CODE"
|
||||
EOF
|
||||
}
|
||||
|
||||
is_supported_lang() {
|
||||
local code="$1"
|
||||
for l in "${SUPPORTED_LANGS[@]}"; do
|
||||
[ "$l" = "$code" ] && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
first_run_setup() {
|
||||
echo "Choose your language "
|
||||
echo " 1) Nederlands (nl)"
|
||||
echo " 2) English (en)"
|
||||
echo " 3) Français (fr)"
|
||||
echo " 4) Deutsch (de)"
|
||||
read -rp "> " KEUZE
|
||||
case "$KEUZE" in
|
||||
1) LANG_CODE="nl" ;;
|
||||
2) LANG_CODE="en" ;;
|
||||
3) LANG_CODE="fr" ;;
|
||||
4) LANG_CODE="de" ;;
|
||||
*) LANG_CODE="en" ;;
|
||||
esac
|
||||
MSG["fr,no_results"]="Aucun résultat trouvé."
|
||||
MSG["de,no_results"]="Keine Ergebnisse gefunden."
|
||||
|
||||
MSG["nl,choose_number"]="Kies een nummer (of 'q' om te annuleren):"
|
||||
MSG["en,choose_number"]="Choose a number (or 'q' to cancel):"
|
||||
MSG["fr,choose_number"]="Choisissez un numéro (ou « q » pour annuler) :"
|
||||
MSG["de,choose_number"]="Wähle eine Nummer (oder 'q' zum Abbrechen):"
|
||||
|
||||
MSG["nl,invalid_choice"]="Ongeldige keuze."
|
||||
MSG["en,invalid_choice"]="Invalid choice."
|
||||
MSG["fr,invalid_choice"]="Choix invalide."
|
||||
MSG["de,invalid_choice"]="Ungültige Auswahl."
|
||||
|
||||
MSG["nl,cancelled"]="Geannuleerd."
|
||||
MSG["en,cancelled"]="Cancelled."
|
||||
MSG["fr,cancelled"]="Annulé."
|
||||
MSG["de,cancelled"]="Abgebrochen."
|
||||
|
||||
MSG["nl,no_search_yet"]="Zoek eerst naar iets met: search <term>"
|
||||
MSG["en,no_search_yet"]="Search for something first with: search <term>"
|
||||
MSG["fr,no_search_yet"]="Recherchez d'abord avec : search <terme>"
|
||||
MSG["de,no_search_yet"]="Suche zuerst etwas mit: search <begriff>"
|
||||
|
||||
MSG["nl,lang_changed"]="Taal ingesteld op"
|
||||
MSG["en,lang_changed"]="Language set to"
|
||||
MSG["fr,lang_changed"]="Langue définie sur"
|
||||
MSG["de,lang_changed"]="Sprache eingestellt auf"
|
||||
|
||||
MSG["nl,lang_current"]="Huidige taal:"
|
||||
MSG["en,lang_current"]="Current language:"
|
||||
MSG["fr,lang_current"]="Langue actuelle :"
|
||||
MSG["de,lang_current"]="Aktuelle Sprache:"
|
||||
|
||||
MSG["nl,lang_invalid"]="Onbekende taalcode. Gebruik: nl, en, fr, de"
|
||||
MSG["en,lang_invalid"]="Unknown language code. Use: nl, en, fr, de"
|
||||
MSG["fr,lang_invalid"]="Code de langue inconnu. Utilisez : nl, en, fr, de"
|
||||
MSG["de,lang_invalid"]="Unbekannter Sprachcode. Verwende: nl, en, fr, de"
|
||||
|
||||
MSG["nl,unknown_command"]="Onbekend commando. Typ 'help' voor een overzicht."
|
||||
MSG["en,unknown_command"]="Unknown command. Type 'help' for an overview."
|
||||
MSG["fr,unknown_command"]="Commande inconnue. Tapez « help » pour un aperçu."
|
||||
MSG["de,unknown_command"]="Unbekannter Befehl. Gib 'help' für eine Übersicht ein."
|
||||
|
||||
MSG["nl,goodbye"]="Tot ziens!"
|
||||
MSG["en,goodbye"]="Goodbye!"
|
||||
MSG["fr,goodbye"]="Au revoir !"
|
||||
MSG["de,goodbye"]="Auf Wiedersehen!"
|
||||
|
||||
MSG["nl,dep_missing"]="ontbreekt."
|
||||
MSG["en,dep_missing"]="is missing."
|
||||
MSG["fr,dep_missing"]="est manquant."
|
||||
MSG["de,dep_missing"]="fehlt."
|
||||
|
||||
MSG["nl,dep_install_fail"]="installatie mislukt. Probeer later opnieuw."
|
||||
MSG["en,dep_install_fail"]="installation failed. Try again later."
|
||||
MSG["fr,dep_install_fail"]="l'installation a échoué. Réessayez plus tard."
|
||||
MSG["de,dep_install_fail"]="Installation fehlgeschlagen. Versuche es später erneut."
|
||||
|
||||
MSG["nl,dep_installed"]="is geïnstalleerd."
|
||||
MSG["en,dep_installed"]="has been installed."
|
||||
MSG["fr,dep_installed"]="a été installé."
|
||||
MSG["de,dep_installed"]="wurde installiert."
|
||||
|
||||
MSG["nl,help_text"]="Beschikbare commando's:
|
||||
search <term> Zoek naar Wikipedia-pagina's
|
||||
open <nummer> Open een resultaat uit de laatste zoekopdracht
|
||||
lang [code] Toon of wijzig de interfacetaal (nl, en, fr, de)
|
||||
help Toon deze hulptekst
|
||||
exit / quit Sluit af"
|
||||
MSG["en,help_text"]="Available commands:
|
||||
search <term> Search for Wikipedia pages
|
||||
open <number> Open a result from the last search
|
||||
lang [code] Show or change the interface language (nl, en, fr, de)
|
||||
help Show this help text
|
||||
exit / quit Exit"
|
||||
MSG["fr,help_text"]="Commandes disponibles :
|
||||
search <terme> Rechercher des pages Wikipédia
|
||||
open <numéro> Ouvrir un résultat de la dernière recherche
|
||||
lang [code] Afficher ou changer la langue de l'interface (nl, en, fr, de)
|
||||
help Afficher cette aide
|
||||
exit / quit Quitter"
|
||||
MSG["de,help_text"]="Verfügbare Befehle:
|
||||
search <begriff> Nach Wikipedia-Seiten suchen
|
||||
open <nummer> Ein Ergebnis der letzten Suche öffnen
|
||||
lang [code] Sprache der Oberfläche anzeigen oder ändern (nl, en, fr, de)
|
||||
help Diese Hilfe anzeigen
|
||||
exit / quit Beenden"
|
||||
|
||||
t() {
|
||||
echo "${MSG["$LANG_CODE,$1"]}"
|
||||
}
|
||||
|
||||
ensure_dependency() {
|
||||
local pkg="$1"
|
||||
if command -v "$pkg" >/dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
echo "$pkg $(t dep_missing)"
|
||||
sudo apt install "$pkg" -y || {
|
||||
echo "$pkg: $(t dep_install_fail)"
|
||||
exit 1
|
||||
}
|
||||
echo
|
||||
echo "less is geïnstalleerd. Wiki-terminal wordt gestart."
|
||||
echo
|
||||
fi
|
||||
echo "$pkg $(t dep_installed)"
|
||||
}
|
||||
|
||||
check_dependencies() {
|
||||
ensure_dependency jq
|
||||
ensure_dependency less
|
||||
ensure_dependency curl
|
||||
}
|
||||
|
||||
TITELS=()
|
||||
|
||||
zoek() {
|
||||
echo "Zoek naar pagina's:"
|
||||
read -p "> " PAGINANAAM
|
||||
echo
|
||||
local term="$*"
|
||||
if [ -z "$term" ]; then
|
||||
echo "$(t search_prompt)"
|
||||
read -rp "> " term
|
||||
fi
|
||||
[ -z "$term" ] && return
|
||||
|
||||
mapfile -t TITELS < <(
|
||||
curl -sG \
|
||||
--data-urlencode "action=query" \
|
||||
--data-urlencode "list=search" \
|
||||
--data-urlencode "srsearch=$PAGINANAAM" \
|
||||
--data-urlencode "srsearch=$term" \
|
||||
--data-urlencode "format=json" \
|
||||
"https://en.wikipedia.org/w/api.php" |
|
||||
"https://${LANG_CODE}.wikipedia.org/w/api.php" |
|
||||
jq -r '.query.search[]?.title'
|
||||
)
|
||||
|
||||
if [ ${#TITELS[@]} -eq 0 ]; then
|
||||
echo "Geen resultaten gevonden."
|
||||
echo "$(t no_results)"
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -53,37 +186,101 @@ zoek() {
|
||||
done
|
||||
}
|
||||
|
||||
pick() {
|
||||
echo
|
||||
echo "kies een nummer"
|
||||
read -p "> " PAGINANUMMER
|
||||
open_result() {
|
||||
local nummer="$1"
|
||||
|
||||
if [[ $PAGINANUMMER =~ ^[0-9]+$ ]] && [ $PAGINANUMMER -ge 1 ] && [ $PAGINANUMMER -le ${#TITELS[@]} ]; then
|
||||
INDEX=$((PAGINANUMMER - 1))
|
||||
PAGINANAAMNUMMER="${TITELS[$INDEX]}"
|
||||
return 0
|
||||
else
|
||||
echo "Ongeldige keuze"
|
||||
return 199
|
||||
if [ ${#TITELS[@]} -eq 0 ]; then
|
||||
echo "$(t no_search_yet)"
|
||||
return
|
||||
fi
|
||||
}
|
||||
|
||||
getSamenvatting() {
|
||||
if [ -z "$nummer" ]; then
|
||||
echo "$(t choose_number)"
|
||||
read -rp "> " nummer
|
||||
fi
|
||||
|
||||
if [ "$nummer" = "q" ]; then
|
||||
echo "$(t cancelled)"
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ $nummer =~ ^[0-9]+$ ]] && [ "$nummer" -ge 1 ] && [ "$nummer" -le ${#TITELS[@]} ]; then
|
||||
local index=$((nummer - 1))
|
||||
local titel="${TITELS[$index]}"
|
||||
curl -sG \
|
||||
--data-urlencode "action=query" \
|
||||
--data-urlencode "prop=extracts" \
|
||||
--data-urlencode "explaintext=true" \
|
||||
--data-urlencode "titles=$PAGINANAAMNUMMER" \
|
||||
--data-urlencode "titles=$titel" \
|
||||
--data-urlencode "format=json" \
|
||||
"https://en.wikipedia.org/w/api.php" \
|
||||
| jq -r '.query.pages[].extract' | sed '/^== External links ==/,$d' | less
|
||||
"https://${LANG_CODE}.wikipedia.org/w/api.php" |
|
||||
jq -r '.query.pages[].extract' | sed '/^== External links ==/,$d' | less
|
||||
else
|
||||
echo "$(t invalid_choice)"
|
||||
fi
|
||||
}
|
||||
|
||||
zoek
|
||||
pick
|
||||
|
||||
if pick; then
|
||||
getSamenvatting
|
||||
else
|
||||
echo "probeer opnieuw"
|
||||
set_lang() {
|
||||
local code="${1:-}"
|
||||
if [ -z "$code" ]; then
|
||||
echo "$(t lang_current) $LANG_CODE"
|
||||
return
|
||||
fi
|
||||
if is_supported_lang "$code"; then
|
||||
LANG_CODE="$code"
|
||||
save_config
|
||||
echo "$(t lang_changed) $LANG_CODE"
|
||||
else
|
||||
echo "$(t lang_invalid)"
|
||||
fi
|
||||
}
|
||||
|
||||
dispatch() {
|
||||
local cmd="$1"
|
||||
shift || true
|
||||
case "$cmd" in
|
||||
search|s|zoek)
|
||||
zoek "$@"
|
||||
;;
|
||||
open|o|select)
|
||||
open_result "$*"
|
||||
;;
|
||||
lang|language|taal)
|
||||
set_lang "$*"
|
||||
;;
|
||||
help|h|--help|-h)
|
||||
t help_text
|
||||
;;
|
||||
exit|quit|q)
|
||||
echo "$(t goodbye)"
|
||||
exit 0
|
||||
;;
|
||||
"")
|
||||
;;
|
||||
*)
|
||||
echo "$(t unknown_command)"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
interactive_mode() {
|
||||
echo "wiki-cli — $(t lang_current) $LANG_CODE"
|
||||
t help_text
|
||||
while true; do
|
||||
read -rp "wiki> " -a INPUT
|
||||
dispatch "${INPUT[@]:-}"
|
||||
done
|
||||
}
|
||||
|
||||
load_config
|
||||
if [ ! -f "$CONFIG_FILE" ]; then
|
||||
first_run_setup
|
||||
fi
|
||||
|
||||
check_dependencies
|
||||
|
||||
if [ "$#" -eq 0 ]; then
|
||||
interactive_mode
|
||||
else
|
||||
dispatch "$@"
|
||||
fi
|
||||
Reference in New Issue
Block a user