Add retry mechanism to yt-dlp
This commit is contained in:
parent
24e0bfc106
commit
ee82dd245b
1 changed files with 66 additions and 32 deletions
|
|
@ -91,6 +91,10 @@ in
|
||||||
DOWNLOAD_DIR="${cfg.downloadDir}"
|
DOWNLOAD_DIR="${cfg.downloadDir}"
|
||||||
DOWNLOAD_DIR="''${DOWNLOAD_DIR/#\~/$HOME}"
|
DOWNLOAD_DIR="''${DOWNLOAD_DIR/#\~/$HOME}"
|
||||||
|
|
||||||
|
# Retry configuration
|
||||||
|
MAX_RETRIES=5
|
||||||
|
BASE_DELAY=5
|
||||||
|
|
||||||
# Helper function to create writable cookie file
|
# Helper function to create writable cookie file
|
||||||
_setup_temp_cookies() {
|
_setup_temp_cookies() {
|
||||||
local cookies_file="$1"
|
local cookies_file="$1"
|
||||||
|
|
@ -104,6 +108,36 @@ in
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Retry wrapper function with exponential backoff
|
||||||
|
_retry_download() {
|
||||||
|
local cmd="$1"
|
||||||
|
local attempt=1
|
||||||
|
local delay=$BASE_DELAY
|
||||||
|
|
||||||
|
while [[ $attempt -le $MAX_RETRIES ]]; do
|
||||||
|
echo "Attempt $attempt/$MAX_RETRIES..."
|
||||||
|
|
||||||
|
eval "$cmd"
|
||||||
|
local result=$?
|
||||||
|
|
||||||
|
if [[ $result -eq 0 ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $attempt -lt $MAX_RETRIES ]]; then
|
||||||
|
echo "Download failed, retrying in ''${delay}s..."
|
||||||
|
sleep $delay
|
||||||
|
delay=$((delay * 2)) # Exponential backoff
|
||||||
|
else
|
||||||
|
echo "All retry attempts failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
((attempt++))
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
# YouTube single video download
|
# YouTube single video download
|
||||||
download-youtube() {
|
download-youtube() {
|
||||||
local url="$*"
|
local url="$*"
|
||||||
|
|
@ -125,18 +159,18 @@ in
|
||||||
[[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies"
|
[[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies"
|
||||||
cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'"
|
cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'"
|
||||||
|
|
||||||
eval $cmd
|
if _retry_download "$cmd"; then
|
||||||
local result=$?
|
echo "✓ Download completed successfully"
|
||||||
|
local result=0
|
||||||
|
else
|
||||||
|
echo "✗ Download failed after $MAX_RETRIES attempts"
|
||||||
|
local result=1
|
||||||
|
fi
|
||||||
|
|
||||||
# Clean up temp cookies
|
# Clean up temp cookies
|
||||||
[[ -n "$temp_cookies" ]] && rm -f "$temp_cookies"
|
[[ -n "$temp_cookies" ]] && rm -f "$temp_cookies"
|
||||||
|
|
||||||
if [[ $result -eq 0 ]]; then
|
return $result
|
||||||
echo "✓ Download completed successfully"
|
|
||||||
else
|
|
||||||
echo "✗ Download failed"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# YouTube playlist download
|
# YouTube playlist download
|
||||||
|
|
@ -160,18 +194,18 @@ in
|
||||||
[[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies"
|
[[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies"
|
||||||
cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'"
|
cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'"
|
||||||
|
|
||||||
eval $cmd
|
if _retry_download "$cmd"; then
|
||||||
local result=$?
|
echo "✓ Playlist download completed successfully"
|
||||||
|
local result=0
|
||||||
|
else
|
||||||
|
echo "✗ Playlist download failed after $MAX_RETRIES attempts"
|
||||||
|
local result=1
|
||||||
|
fi
|
||||||
|
|
||||||
# Clean up temp cookies
|
# Clean up temp cookies
|
||||||
[[ -n "$temp_cookies" ]] && rm -f "$temp_cookies"
|
[[ -n "$temp_cookies" ]] && rm -f "$temp_cookies"
|
||||||
|
|
||||||
if [[ $result -eq 0 ]]; then
|
return $result
|
||||||
echo "✓ Playlist download completed successfully"
|
|
||||||
else
|
|
||||||
echo "✗ Playlist download failed"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Bilibili single video download
|
# Bilibili single video download
|
||||||
|
|
@ -195,18 +229,18 @@ in
|
||||||
[[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies"
|
[[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies"
|
||||||
cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'"
|
cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'"
|
||||||
|
|
||||||
eval $cmd
|
if _retry_download "$cmd"; then
|
||||||
local result=$?
|
echo "✓ Download completed successfully"
|
||||||
|
local result=0
|
||||||
|
else
|
||||||
|
echo "✗ Download failed after $MAX_RETRIES attempts"
|
||||||
|
local result=1
|
||||||
|
fi
|
||||||
|
|
||||||
# Clean up temp cookies
|
# Clean up temp cookies
|
||||||
[[ -n "$temp_cookies" ]] && rm -f "$temp_cookies"
|
[[ -n "$temp_cookies" ]] && rm -f "$temp_cookies"
|
||||||
|
|
||||||
if [[ $result -eq 0 ]]; then
|
return $result
|
||||||
echo "✓ Download completed successfully"
|
|
||||||
else
|
|
||||||
echo "✗ Download failed"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Bilibili playlist/collection download
|
# Bilibili playlist/collection download
|
||||||
|
|
@ -230,18 +264,18 @@ in
|
||||||
[[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies"
|
[[ -n "$temp_cookies" ]] && cmd="$cmd --cookies '$temp_cookies'" || cmd="$cmd --no-cookies"
|
||||||
cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'"
|
cmd="$cmd --download-archive '$archive_file' -o '$output_template' '$url'"
|
||||||
|
|
||||||
eval $cmd
|
if _retry_download "$cmd"; then
|
||||||
local result=$?
|
echo "✓ Playlist download completed successfully"
|
||||||
|
local result=0
|
||||||
|
else
|
||||||
|
echo "✗ Playlist download failed after $MAX_RETRIES attempts"
|
||||||
|
local result=1
|
||||||
|
fi
|
||||||
|
|
||||||
# Clean up temp cookies
|
# Clean up temp cookies
|
||||||
[[ -n "$temp_cookies" ]] && rm -f "$temp_cookies"
|
[[ -n "$temp_cookies" ]] && rm -f "$temp_cookies"
|
||||||
|
|
||||||
if [[ $result -eq 0 ]]; then
|
return $result
|
||||||
echo "✓ Playlist download completed successfully"
|
|
||||||
else
|
|
||||||
echo "✗ Playlist download failed"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Function to show help and instructions
|
# Function to show help and instructions
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue