diff --git a/torrent/generate_torrent.sh b/torrent/generate_torrent.sh index 892bcd4..079b3d5 100644 --- a/torrent/generate_torrent.sh +++ b/torrent/generate_torrent.sh @@ -5,24 +5,116 @@ TRACKER="https://leo-test.store/announce.php?passkey=6535616464613165323432306163343561333531" PIECE_SIZE=22 -INPUT="$1" -SEARCH_NAME="${2:-}" -TYPE="${3:-}" -SKIP_TORRENT_CREATION="${4:-}" +usage() { + cat < -s -t [-l ] [--skip] -if [ ! -d "$INPUT" ] ; then - echo "Input missing" - echo "Usage: $0 --skip (opt)" - exit 1 -elif [ -z "$SEARCH_NAME" ] ; then - echo "Search name missing" - echo "Usage: $0 --skip (opt)" - exit 1 -elif [ -z "$TYPE" ]; then - echo "Type not present" - echo "Usage: $0 --skip (opt)" - exit 1 -fi +Options: + -i, --input Input directory + -s, --search Search name for TMDB lookup + -t, --type Content type: movie or tv + -l, --lang Language (default: de) + --skip Skip torrent creation + -h, --help Show this help +EOF +} + +parse_args() { + while [[ $# -gt 0 ]]; do + case "$1" in + -i|--input) + INPUT="$2" + shift 2 + ;; + -s|--search) + SEARCH_NAME="$2" + shift 2 + ;; + -t|--type) + TYPE="${2,,}" + shift 2 + ;; + -l|--lang) + LANGUAGE="${2,,}" + shift 2 + ;; + --skip) + SKIP_TORRENT_CREATION="true" + shift + ;; + -h|--help) + usage + exit 0 + ;; + *) + echo "Error: Unknown argument '$1'" + usage + exit 1 + ;; + esac + done +} + +validate_args() { + local errors=0 + + [[ -z "$INPUT" ]] && { + echo "Error: Input directory is required." + ((errors++)) + } + + [[ -n "$INPUT" && ! -d "$INPUT" ]] && { + echo "Error: Input directory does not exist: $INPUT" + ((errors++)) + } + + [[ -z "$SEARCH_NAME" ]] && { + echo "Error: Search name is required." + ((errors++)) + } + + [[ "$TYPE" != "movie" && "$TYPE" != "tv" ]] && { + echo "Error: Type must be 'movie' or 'tv'." + ((errors++)) + } + + # Optional: only allow supported TMDB languages + [[ ! "$LANGUAGE" =~ ^(de|en|fr|es|it)$ ]] && { + echo "Error: Language must be one of: de, en, fr, es, it" + ((errors++)) + } + + (( errors > 0 )) && { + echo + usage + exit 1 + } +} + +normalize_language() { + case "${LANGUAGE,,}" in + de) LANGUAGE="de-DE" ;; + en) LANGUAGE="en-US" ;; + fr) LANGUAGE="fr-FR" ;; + es) LANGUAGE="es-ES" ;; + it) LANGUAGE="it-IT" ;; + *) + echo "Error: Languag* must be one of: de, en, fr, es, i*" + exit 1 + ;* + esac +} +# Defaults +INPUT="" +SEARCH_NAME="" +TYPE="" +LANGUAGE="de" +SKIP_TORRENT_CREATION="false" + +parse_args "$@" +validate_args +normalize_language if [ -d "$INPUT" ]; then NAME=$(basename "$INPUT") @@ -33,6 +125,7 @@ fi TMDB_BEARER_TOKEN="eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJlOTIwMzJlMDk1NmEzMWEyZjQ4MDA4NGI0MTg4OTIyZCIsIm5iZiI6MTc5MDQzMjc5NS42NjcsInN1YiI6IjZhYjdkNjFiZDY5NmI1ZGFjNGM5NDRkMyIsInNjb3BlcyI6WyJhcGlfcmVhZCJdLCJ2ZXJzaW9uIjoxfQ.IjddKtQ5X62A63kYslH24Pxg_TFCzu-QpGak_Pemgr8" + if [[ -z "$SEARCH_NAME" ]]; then echo "Search name required" exit 1 @@ -60,7 +153,7 @@ tmdb_get() { curl -s \ -H "Authorization: Bearer ${TMDB_BEARER_TOKEN}" \ -H "accept: application/json" \ - "$url" + "$url" } # -------------------------------------------------- @@ -73,7 +166,7 @@ SEARCH_JSON=$(curl -s --get \ -H "Authorization: Bearer ${TMDB_BEARER_TOKEN}" \ -H "accept: application/json" \ --data-urlencode "query=${SEARCH_NAME}" \ - --data-urlencode "language=de-DE" \ + --data-urlencode "language=${LANGUAGE}" \ "${TMDB_API}/search/${TYPE}") TOTAL_RESULTS=$(echo "$SEARCH_JSON" | jq -r '.total_results // 0') @@ -113,7 +206,7 @@ FIRST_RELEASE=$(get_value "$(echo "$DETAILS" | jq -r '.release_date // .first_ai STATUS=$(get_value "$(echo "$DETAILS" | jq -r '.status')") -LANGUAGE=$(get_value "$(echo "$DETAILS" | jq -r '.original_language')") +DETAIL_LANGUAGE=$(get_value "$(echo "$DETAILS" | jq -r '.original_language')") RATING=$(get_value "$(echo "$DETAILS" | jq -r '.vote_average')") @@ -141,15 +234,13 @@ if [[ -n "$BACKDROP_PATH" ]]; then fi mkdir -p "$INPUT/Screens" - if [[ "$POSTER_URL" != "N/A" ]]; then - curl -L "$POSTER_URL" \ - -o "$INPUT/Screens/$(basename "$POSTER_PATH")" + curl -s -L "$POSTER_URL" \ + -o "$INPUT/Screens/cover.jpg" fi -  if [[ "$BACKDROP_URL" != "N/A" ]]; then - curl -L "$BACKDROP_URL" \ - -o "$INPUT/Screens/$(basename "$BACKDROP_PATH")" + curl -s -L "$BACKDROP_URL" \ + -o "$INPUT/Screens/backdrop.jpg" fi # --data-urlencode "api_key=AB" \ @@ -181,6 +272,17 @@ SIZE=$(du -sh "$MEDIA_FILE" | awk '{print $1}') MD5=$(md5sum "$MEDIA_FILE" | awk '{print $1}') SHA256=$(sha256sum "$MEDIA_FILE" | awk '{print $1}') +TMDB_URL="https://www.themoviedb.org/${TYPE}/${TMDB_ID}" + +if [[ "$IMDB_ID" != "N/A" ]]; then + IMDB_URL="https://www.imdb.com/title/${IMDB_ID}" +else + IMDB_URL="N/A" +fi + +FILE_LIST=$(find "$INPUT" -type f -exec du -h {} \; | sort) +TOTAL_SIZE=$(du -sh "$INPUT" | cut -f1) + echo Generate nfo file cat > "${NAME}.nfo" < "${NAME}.nfo" </dev/null 2>&1 done -  -echo "Screenshots erstellt in: $SCREEN_DIR" +echo "Screenshots erstellt in: $SCREEN_DIR" echo "Created:" echo " ${NAME}.torrent" @@ -277,11 +451,6 @@ fi for f in "$INPUT"/Screens/*; do [[ -e "$f" ]] && FILES+=("$f") done -ssh lucas@vivohost "mkdir -p \"Torrents/$NAME\""  -scp \ -"${NAME}.torrent" \ -"${NAME}.nfo" \ -lucas@vivohost:"Torrents/$NAME/" -scp -r \ -"$INPUT/Screens" \ -lucas@vivohost:"Torrents/$NAME/" +ssh lucas@vivohost "mkdir -p \"Torrents/${NAME}\""  +scp "${NAME}.torrent" "${NAME}.nfo" lucas@vivohost:"Torrents/${NAME}/" +scp -r "$INPUT/Screens" lucas@vivohost:"Torrents/${NAME}/"