Local variables instead of global ones
This commit is contained in:
167
grpoppro
167
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
|
||||
|
||||
Reference in New Issue
Block a user