269 lines
7.2 KiB
Bash
Executable File
269 lines
7.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
clear
|
|
cat << "EOF"
|
|
__ ___ ____
|
|
/ |/ /___ / __ \____ _
|
|
/ /|_/ / __ \/ /_/ / __ `/
|
|
/ / / / /_/ / ____/ /_/ /
|
|
/_/ _/_/\____/_/ \__,_/_
|
|
/ / ____ ____ _____/ /__ _____
|
|
/ / / __ \/ __ `/ __ / _ \/ ___/
|
|
/ /__/ /_/ / /_/ / /_/ / __/ /
|
|
/_____|____/\__,_/\__,_/\___/_/
|
|
|
|
v0.1BETA
|
|
by MoPa Ltd
|
|
|
|
EOF
|
|
|
|
# .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 Abrufen des Passworts, falls es nicht gesetzt ist
|
|
get_password() {
|
|
if [ -z "$PASSWORD" ]; then
|
|
read -sp "Bitte Passwort eingeben: " PASSWORD
|
|
echo
|
|
fi
|
|
}
|
|
|
|
# Funktion zum Abrufen des Passworts, falls es nicht gesetzt ist
|
|
get_password() {
|
|
if [ -z "$PASSWORD" ]; then
|
|
read -sp "Bitte Passwort eingeben: " PASSWORD
|
|
echo
|
|
fi
|
|
}
|
|
|
|
# Funktion zum Generieren des JSON
|
|
update_json() {
|
|
# Passwort abfragen, falls nicht gesetzt
|
|
get_password
|
|
|
|
# HTML-Inhalt abrufen
|
|
HTML_CONTENT=$(curl -s -u "$USERNAME:$PASSWORD" "$BASE_URL")
|
|
|
|
# Alle Ordnernamen extrahieren
|
|
DIRS=($(echo "$HTML_CONTENT" | grep -o 'href="[^"]*/"'))
|
|
|
|
# Gesamtanzahl der Ordner
|
|
total_dirs=${#DIRS[@]}
|
|
|
|
# Zähler für Fortschritt
|
|
count=0
|
|
spin_index=0 # Spinner-Index für die Animation
|
|
|
|
# Spinner für Animation
|
|
spinner=("•" "◦" "○" "◔" "◑" "◕")
|
|
|
|
# JSON-Daten initialisieren
|
|
JSON_OUTPUT="{\n \"folders\": ["
|
|
|
|
# Fortschritt anzeigen (100% bei Ende)
|
|
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"
|
|
|
|
# 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
|
|
# 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+=" },"
|
|
fi
|
|
|
|
# Fortschritt aktualisieren
|
|
count=$((count + 1))
|
|
progress=$((count * 100 / total_dirs))
|
|
|
|
# Zeile überschreiben für Fortschritt, sicherstellen, dass % nicht als Formatzeichen interpretiert wird
|
|
printf "\rUpdating Library: [%3d%%] ${spinner[$spin_index]} " "$progress"
|
|
spin_index=$(( (spin_index + 1) % ${#spinner[@]} ))
|
|
|
|
# Optional: Kurze Pause für die Spinner-Animation
|
|
sleep 0.1
|
|
done
|
|
|
|
# Letztes Komma entfernen und JSON abschließen
|
|
JSON_OUTPUT="${JSON_OUTPUT%,}]"
|
|
JSON_OUTPUT+="}"
|
|
|
|
# JSON speichern
|
|
echo -e "$JSON_OUTPUT" > library.json
|
|
|
|
# Abschlussmeldung
|
|
echo -e "\nDaten wurden erfolgreich verarbeitet und als JSON gespeichert!"
|
|
}
|
|
|
|
# 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
|
|
# Passwort abfragen, falls nicht gesetzt
|
|
get_password
|
|
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
|
|
# Passwort abfragen, falls nicht gesetzt
|
|
get_password
|
|
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 <Suchbegriff>|download <Suchbegriff>}"
|
|
exit 1
|
|
;;
|
|
esac
|