From a4cd17f59794f48cc13d319c84d998381529c2d6 Mon Sep 17 00:00:00 2001 From: konsthol Date: Sun, 5 Jan 2025 01:02:20 +0200 Subject: [PATCH] Local variables instead of global ones --- grpoppro | 167 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 125 insertions(+), 42 deletions(-) diff --git a/grpoppro b/grpoppro index 8249faf..9fb31a9 100755 --- a/grpoppro +++ b/grpoppro @@ -6,8 +6,8 @@ GRPOPPRO_DATA_FILE="$GRPOPPRO_DATA_DIR/lastPlayedSeries" GRPOPPRO_PLAYLIST_FILE="$GRPOPPRO_DATA_DIR/lastPlaylistPlayed" GRPOPPRO_COOKIE_FILE="$GRPOPPRO_DATA_DIR/cookies.txt" GRPOPPRO_HISTORY_FILE="$GRPOPPRO_DATA_DIR/history" -INTERACTIVE="on" -DEBUG="on" +GRPOPPRO_INTERACTIVE="on" +GRPOPPRO_DEBUG="on" menu="fuzzel -d -p " #menu="fzf -i --prompt=" apiurl="https://coverapi.store" @@ -32,10 +32,12 @@ MPV_OPTS='--vo=gpu \ # Display a message function message { - if [[ "$INTERACTIVE" == "on" ]]; then - notify-send -t 2000 "$1" + local interactive="$GRPOPPRO_INTERACTIVE" + local msg="$1" + if [[ "$interactive" == "on" ]]; then + notify-send -t 2000 "$msg" else - echo -e "\n\t$1" + echo -e "\n\t$msg" fi } @@ -66,7 +68,7 @@ function curlRequest { # Dynamically shift the total number of times needed shift $((shifts - 1)) - if [[ "$DEBUG" == "off" ]]; then + if [[ "$GRPOPPRO_DEBUG" == "off" ]]; then if [[ "$OSTYPE" == "linux-gnu" ]]; then response="$(curl_ff117 -s -L \ @@ -173,6 +175,11 @@ function getFzfForTermux { # Retrieve IMDb ID function getIMDBID { + + local title="$1" + local response + local imdbid + response="$(curlRequest "https://www.imdb.com/find/?q=$title")" imdbid="$(echo "$response" \ | grep -io ' href=['"'"'"][^"'"'"']*['"'"'"]' \ @@ -189,18 +196,31 @@ function getIMDBID { message "Film or show not found in imdb" exit 0 fi + + echo "$imdbid" } # Prepare basic steps for a request function basics { - title="$1" + + local title="$1" + local imdbid + local simpleurl + title="${title// /%20}" - getIMDBID "$title" + imdbid="$(getIMDBID "$title")" simpleurl="$apiurl/embed/$imdbid/" + + echo "$simpleurl" } # Retrieve internal ID function getInternalID { + + local simpleurl="$1" + local response + local internalid + response="$(curlRequest "$simpleurl")" if echo "$response" | grep -q "404 Not Found"; then message "Non valid response" @@ -215,11 +235,19 @@ function getInternalID { | awk '{print $5}' \ | awk -F\' '{print $2}' )" + + echo "$internalid" } # Retrieve movie stream URL function getMovieStreamUrl { + local internalid="$1" + local PHPSESSID PHPSESSID="$(grep 'PHPSESSID' "$GRPOPPRO_COOKIE_FILE" | awk '{print $NF}')" + + local response + local streamurl + local headers=( '-H Accept-Encoding: gzip, deflate, br, zstd' '-H Content-Type: application/x-www-form-urlencoded; charset=UTF-8' @@ -247,22 +275,30 @@ function getMovieStreamUrl { | sed 's/\\//g' \ | grep -oP 'file:"\K[^"]+' )" + + echo "$streamurl" } # Stream the video function play { + local streamurl="$1" + if [[ "$player" == "mpv" ]]; then MPVPID="$(pidof mpv | cut -d' ' -f1)" [[ -n "$MPVPID" ]] && kill -s SIGTERM "$MPVPID" player="mpv --save-position-on-quit ${MPV_OPTS}" fi - [[ "$OSTYPE" != "linux-gnu" ]] && INTERACTIVE="off" && streamurl="${streamurl//https/http}" + [[ "$OSTYPE" != "linux-gnu" ]] && GRPOPPRO_INTERACTIVE="off" && streamurl="${streamurl//https/http}" # No setsid -f here because we need to wait for mpv to finish eval "$player" "$streamurl" } # Dump data to files function dumpData { + local title="$1" + local seasonEpisode="$2" + local streamurl="$3" + echo "$title" > "$GRPOPPRO_DATA_FILE" echo "$seasonEpisode" >> "$GRPOPPRO_DATA_FILE" echo "$streamurl" >> "$GRPOPPRO_DATA_FILE" @@ -273,17 +309,31 @@ function dumpData { # Source data from files function sourceData { + local lastSeriesPlayed + local lastSeasonEpisodePlayed + local lastEpisodePlayedURL + if [[ -f "$GRPOPPRO_DATA_FILE" ]]; then lastSeriesPlayed="$(sed -n 1p "$GRPOPPRO_DATA_FILE")" lastSeasonEpisodePlayed="$(sed -n 2p "$GRPOPPRO_DATA_FILE")" lastEpisodePlayedURL="$(sed -n 3p "$GRPOPPRO_DATA_FILE")" fi + + echo "$lastSeriesPlayed|$lastSeasonEpisodePlayed|$lastEpisodePlayedURL" } # Perform menu search function menuSearch { + local title + local imdbid + local simpleurl + local internalid + local response + local seasonEpisode + local streamurl + # Two requests to the api - if [[ "$INTERACTIVE" == "on" ]]; then + if [[ "$GRPOPPRO_INTERACTIVE" == "on" ]]; then title=$(echo "" | wofi --dmenu --insensitive --prompt="Search Series" --width=300 --height=50) else read -r -p "Search Series: " title @@ -293,9 +343,9 @@ function menuSearch { exit 0 fi title="${title// /%20}" - getIMDBID "$title" + imdbid="$(getIMDBID "$title")" simpleurl="$apiurl/embed/$imdbid/" - getInternalID "$simpleurl" + internalid="$(getInternalID "$simpleurl")" response="$(curlRequest "$apiurl/uploads/playlists/$internalid.txt")" echo "$response" > "$GRPOPPRO_PLAYLIST_FILE" title="$(grep "mp4" "$GRPOPPRO_PLAYLIST_FILE" \ @@ -320,8 +370,8 @@ function menuSearch { | head -n1 \ | awk -F\" '{print $4}' )" - dumpData "$title" "$seasonEpisode" - play + dumpData "$title" "$seasonEpisode" "$streamurl" + play "$streamurl" resume } @@ -332,11 +382,16 @@ function resume { message "Nothing to resume" exit 0 fi - sourceData - title=$lastSeriesPlayed + local data + local title + data="$(sourceData)" + title="$(echo "$data" | cut -d '|' -f1)" while true do - sourceData + data="$(sourceData)" + local seasonEpisode + local lastSeasonEpisodePlayed + lastSeasonEpisodePlayed="$(echo "$data" | cut -d '|' -f2)" seasonEpisode="$(jq '.[]' "$GRPOPPRO_PLAYLIST_FILE" \ | grep "mp4" \ | awk -F/ '{print $NF}' \ @@ -348,13 +403,14 @@ function resume { message "Nothing Selected" exit 0 fi + local streamurl streamurl="$(jq '.[]' "$GRPOPPRO_PLAYLIST_FILE" \ | grep "${seasonEpisode}" \ | head -n1 \ | awk -F\" '{print $4}' )" - dumpData "$title" "$seasonEpisode" - play + dumpData "$title" "$seasonEpisode" "$streamurl" + play "$streamurl" done } @@ -367,6 +423,7 @@ function resumeSeries { exit 0 fi + local resume_series resume_series="$(awk -F'|' '{print $1}' "$GRPOPPRO_HISTORY_FILE" \ | sort \ | uniq \ @@ -377,29 +434,32 @@ function resumeSeries { exit 0 fi + local resume_episode resume_episode="$(grep "^$resume_series|" "$GRPOPPRO_HISTORY_FILE" | awk -F'|' '{print $2}')" if [[ -n "$resume_episode" ]]; then message "Continuing $resume_series from $resume_episode" fi + local resume_streamurl resume_streamurl=$(grep "^$resume_series|$resume_episode|" "$GRPOPPRO_HISTORY_FILE" | awk -F'|' '{print $3}') - title="$resume_series" + local title="$resume_series" + local lastTitle lastTitle="$(sed -n 1p "$GRPOPPRO_DATA_FILE")" if [[ ! "$title" == "$lastTitle" ]]; then title="${title// /%20}" - getIMDBID "$title" + imdbid="$(getIMDBID "$title")" simpleurl="$apiurl/embed/$imdbid/" - getInternalID "$simpleurl" + internalid="$(getInternalID "$simpleurl")" response="$(curlRequest "$apiurl/uploads/playlists/$internalid.txt")" echo "$response" > "$GRPOPPRO_PLAYLIST_FILE" fi title="$(grep "mp4" "$GRPOPPRO_PLAYLIST_FILE" | head -n1 | awk -F/ '{print $(NF-1)}')" title="${title//_/ }" title="${title//-/ }" - seasonEpisode="$resume_episode" - streamurl="$resume_streamurl" - dumpData "$title" "$seasonEpisode" - play + local seasonEpisode="$resume_episode" + local streamurl="$resume_streamurl" + dumpData "$title" "$seasonEpisode" "$streamurl" + play "$streamurl" resume } @@ -410,15 +470,22 @@ function resumeUnfinishedEpisode { message "Nothing to resume" exit 0 fi - sourceData + local data + local lastSeriesPlayed + local lastSeasonEpisodePlayed + local lastEpisodePlayedURL + data="$(sourceData)" + lastSeriesPlayed="$(echo "$data" | cut -d '|' -f1)" + lastSeasonEpisodePlayed="$(echo "$data" | cut -d '|' -f2)" + lastEpisodePlayedURL="$(echo "$data" | cut -d '|' -f3)" message "Continuing $lastSeriesPlayed from $lastSeasonEpisodePlayed" - streamurl="$lastEpisodePlayedURL" + local streamurl="$lastEpisodePlayedURL" if [[ "$player" == "mpv" ]]; then MPVPID="$(pidof mpv | cut -d' ' -f1)" [[ -n "$MPVPID" ]] && kill -s SIGTERM "$MPVPID" player="mpv --resume-playback ${MPV_OPTS}" fi - [[ "$OSTYPE" != "linux-gnu" ]] && INTERACTIVE="off" && streamurl="${streamurl//https/http}" + [[ "$OSTYPE" != "linux-gnu" ]] && GRPOPPRO_INTERACTIVE="off" && streamurl="${streamurl//https/http}" # No setsid -f here because we need to wait for mpv to finish eval "$player" "$streamurl" resume @@ -426,9 +493,13 @@ function resumeUnfinishedEpisode { # Open in browser to watch function openInBrowser { + local title="$2" + local simpleurl + # One request to the api - basics "$2" - getInternalID "$simpleurl" + simpleurl="$(basics "$title")" + local internalid + internalid="$(getInternalID "$simpleurl")" xdg-open "$simpleurl" exit 0 } @@ -439,6 +510,7 @@ function getHistory { exit 0 fi + local history history="$(awk -F'|' '{print $1,":<=> At =>",$2}' "$GRPOPPRO_HISTORY_FILE" | column -t -s':')" message "$history" @@ -446,12 +518,18 @@ function getHistory { } function getSeries { + local title="$1" + local season="$2" + local episode="$3" + local simpleurl + simpleurl="$(basics "$title")" + local internalid + internalid="$(getInternalID "$simpleurl")" + local response + # Two requests to the api - basics "$1" - getInternalID "$simpleurl" - season="$2" - episode="$3" response="$(curlRequest "$apiurl/uploads/playlists/$internalid.txt")" + local streamurl streamurl="$(echo "$response" \ | jq '.[]' \ | grep "mp4" \ @@ -460,25 +538,30 @@ function getSeries { | awk -F\" '{print $4}' )" title="${title//%20/ }" + local capitalized_title capitalized_title="$(echo "$title" | awk '{for(i=1;i<=NF;i++) $i=toupper(substr($i,1,1)) substr($i,2)}1')" message "Loading $capitalized_title at season $season on episode $episode" - play + play "$streamurl" exit 0 } function getMovie { + local simpleurl # Two requests to the api if [[ "$1" == *"tt"* ]]; then simpleurl="$1" else - basics "$1" # Gets the title, performs one request to imdb and gets the complete url + simpleurl="$(basics "$1")" # Gets the title, performs one request to imdb and gets the complete url fi - getInternalID "$simpleurl" # Gets the complete url and performs one request to get the internal id or inform us it does not exist - getMovieStreamUrl "$internalid" # Gets the internal id and performs one request to get the stream url - title="${title//%20/ }" + local internalid + internalid="$(getInternalID "$simpleurl")" # Gets the complete url and performs one request to get the internal id or inform us it does not exist + local streamurl + streamurl="$(getMovieStreamUrl "$internalid")" # Gets the internal id and performs one request to get the stream url + local title="${title//%20/ }" + local capitalized_title capitalized_title="$(echo "$title" | awk '{for(i=1;i<=NF;i++) $i=toupper(substr($i,1,1)) substr($i,2)}1')" message "Loading $capitalized_title" - play # It uses mpv to stream the file + play "$streamurl" # It uses mpv to stream the file exit 0 } @@ -502,7 +585,7 @@ if [[ "$OSTYPE" == "linux-gnu" ]]; then fi # Prepare the necessary steps for Termux environment -[[ "$OSTYPE" != "linux-gnu" ]] && INTERACTIVE="off" && menu="fzf -i --prompt=seasonXepisode" && player="am start -n is.xyz.mpv/.MPVActivity -a android.intent.action.VIEW -d" && getFzfForTermux +[[ "$OSTYPE" != "linux-gnu" ]] && GRPOPPRO_INTERACTIVE="off" && menu="fzf -i --prompt=seasonXepisode" && player="am start -n is.xyz.mpv/.MPVActivity -a android.intent.action.VIEW -d" && getFzfForTermux [[ "$#" -lt 1 ]] && usage [[ "$#" -gt 3 ]] && usage