#!/bin/bash clear cat << "EOF" __ ___ ____ / |/ /___ / __ \____ _ / /|_/ / __ \/ /_/ / __ `/ / / / / /_/ / ____/ /_/ / /_/ _/_/\____/_/ \__,_/_ / / ____ ____ _____/ /__ _____ / / / __ \/ __ `/ __ / _ \/ ___/ / /__/ /_/ / /_/ / /_/ / __/ / /_____|____/\__,_/\__,_/\___/_/ v0.1BETA by MoPa Ltd EOF #!/bin/bash # .env-Datei laden, falls vorhanden if [ -f .env ]; then export $(grep -v '^#' .env | xargs) fi # Basis-URL aus der .env Datei if [ -z "$BASE_URL" ]; then echo "BASE_URL ist nicht gesetzt. Bitte in der .env Datei festlegen." exit 1 fi # Sicherstellen, dass BASE_URL mit / endet if [[ ! "$BASE_URL" =~ /$ ]]; then BASE_URL="$BASE_URL/" fi # Funktion zum Generieren des JSON update_json() { # HTML-Inhalt abrufen HTML_CONTENT=$(curl -s -u "$USERNAME:$PASSWORD" "$BASE_URL") # Alle Ordnernamen extrahieren DIRS=($(echo "$HTML_CONTENT" | grep -o 'href="[^"]*/"')) # JSON-Daten initialisieren JSON_OUTPUT="{\n \"folders\": [" # Verarbeiten der Ordner for dir in "${DIRS[@]}"; do # Entferne das href=" und " dir=$(echo "$dir" | sed 's/href="\([^"]*\)"/\1/') # Entschlüsselte Version des Ordnernamens (schöner Name) readable_dir=$(echo "$dir" | sed 's/%20/ /g; s/%28/(/g; s/%29/)/g') # Überprüfen, ob der Pfad mit einem / endet und ggf. hinzufügen if [[ ! "$dir" =~ /$ ]]; then dir="$dir/" fi # Vollständige URL mit Pfad erstellen FULL_URL="$BASE_URL$dir" echo "Verarbeite Ordner: $FULL_URL" # Dateien im Ordner finden FILES=($(curl -s -u "$USERNAME:$PASSWORD" "$FULL_URL" | grep -o 'href="[^"]*\.\(mp4\|mkv\|avi\|mov\|flv\)"' | sed 's/href="\([^"]*\)"/\1/')) # Falls Dateien gefunden wurden if [ ${#FILES[@]} -gt 0 ]; then echo "Gefundene Dateien im Ordner '$dir':" for file in "${FILES[@]}"; do echo "$file" done # Ordner-JSON hinzufügen JSON_OUTPUT+="{\n \"name\": \"$readable_dir\",\n \"files\": [" # Dateien-JSON hinzufügen for file in "${FILES[@]}"; do full_file_url="$BASE_URL$dir$file" JSON_OUTPUT+="{\n \"file\": \"$file\",\n \"url\": \"$full_file_url\"\n }," done # Letztes Komma entfernen und Ordner-JSON abschließen JSON_OUTPUT=$(echo "$JSON_OUTPUT" | sed '$s/,$/\n ]/' ) JSON_OUTPUT+=" }," else echo "Keine Dateien im Ordner '$dir' gefunden." fi done # Letztes Komma entfernen und JSON abschließen JSON_OUTPUT=$(echo "$JSON_OUTPUT" | sed '$s/,$/\n ]/' ) JSON_OUTPUT+="}" # JSON speichern echo -e "$JSON_OUTPUT" > library.json echo "Daten gespeichert in library.json" } # Funktion zum Auflisten der Ordnernamen list_folder_names() { if [ -f "library.json" ]; then folder_names=$(jq -r '.folders[].name' library.json) if [ -n "$folder_names" ]; then echo "Ordnernamen:" echo "$folder_names" else echo "Keine Ordnernamen im JSON gefunden." fi else echo "Die Datei library.json existiert nicht." fi } # Funktion zur Ordnersuche search_folder() { if [ -z "$2" ]; then echo "Bitte einen Suchbegriff angeben." exit 1 fi if [ ! -f "library.json" ]; then echo "Die Datei library.json existiert nicht." exit 1 fi results=$(jq -r --arg search "$2" '.folders[].name | select(test($search; "i"))' library.json) if [ -z "$results" ]; then echo "Keine passenden Ordner gefunden." else echo "🔎 Gefundene Ordner:" count=1 while IFS= read -r line; do if [ $(echo "$results" | wc -l) -gt 1 ]; then echo "${count}️⃣ $line" count=$((count + 1)) else echo "$line" fi done <<< "$results" fi } # Funktion zum Herunterladen einer Datei download_file() { if [ -z "$2" ]; then echo "Bitte einen Suchbegriff angeben." exit 1 fi if [ ! -f "library.json" ]; then echo "Die Datei library.json existiert nicht." exit 1 fi # Wenn DOWNLOAD_LOCATION nicht gesetzt, nach dem Zielordner fragen DOWNLOAD_LOCATION=${DOWNLOAD_LOCATION:-$(read -p "Bitte Zielordner für den Download angeben (Standard: .): " loc; echo ${loc:-.})} results=$(jq -r --arg search "$2" '.folders[] | select(.name | test($search; "i"))' library.json) if [ -z "$results" ]; then echo "Keine passenden Dateien gefunden." exit 1 fi matched_files=($(echo "$results" | jq -r '.files[].url')) matched_names=($(echo "$results" | jq -r '.files[].file')) if [ ${#matched_files[@]} -eq 1 ]; then file_url=${matched_files[0]} file_name=${matched_names[0]} read -p "Soll '$file_name' in '$DOWNLOAD_LOCATION' heruntergeladen werden? (J/n, Standard: J) " choice choice=${choice:-J} if [[ "$choice" =~ ^[Jj]$ ]]; then wget --user="$USERNAME" --password="$PASSWORD" --auth-no-challenge "$file_url" -O "$DOWNLOAD_LOCATION/$file_name" echo "Download abgeschlossen: $file_name" else echo "Download abgebrochen." fi else echo "🔎 Gefundene Dateien:" count=1 for file in "${matched_names[@]}"; do echo "${count}️⃣ $file" count=$((count + 1)) done read -p "Gib die Zahl der Datei ein, die du herunterladen möchtest: " selection if [[ "$selection" =~ ^[0-9]+$ ]] && [ "$selection" -le ${#matched_files[@]} ]; then index=$((selection - 1)) file_url=${matched_files[$index]} file_name=${matched_names[$index]} read -p "Soll '$file_name' in '$DOWNLOAD_LOCATION' heruntergeladen werden? (J/n, Standard: J) " choice choice=${choice:-J} if [[ "$choice" =~ ^[Jj]$ ]]; then wget --user="$USERNAME" --password="$PASSWORD" --auth-no-challenge "$file_url" -O "$DOWNLOAD_LOCATION/$file_name" echo "Download abgeschlossen: $file_name" else echo "Download abgebrochen." fi else echo "Ungültige Auswahl." fi fi } # Aliase hinzufügen alias dl="download_file" case "$1" in "update") update_json ;; "list") list_folder_names ;; "search") search_folder "$@" ;; "download"|"dl") download_file "$@" ;; *) echo "Verwendung: $0 {update|list|search |download }" exit 1 ;; esac