Retry oversized video downloads instead of giving up permanently
VK can briefly serve a not-yet-transcoded master stream on a capped-height URL right after a video is published, tripping the size check on the very first attempt. Treat that as transient (retry with a longer backoff) instead of failing permanently, and merge the fallback note into a single "Смотреть видео в VK" link instead of two separate lines. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -112,11 +112,16 @@ class MediaProcessor:
|
||||
return path, err, is_permanent
|
||||
last_result = (path, err, is_permanent)
|
||||
if attempt <= settings.yt_dlp_retry_attempts:
|
||||
# A fresh upload's lower-quality renditions can still be mid-transcode on
|
||||
# VK's side - the "720p" URL then briefly serves the full-res master until
|
||||
# the ladder catches up, which trips our size cap. That's not a permanent
|
||||
# rejection, just needs more time than a stalled connection does.
|
||||
delay = 60.0 if "exceeds size limit" in (err or "") else 3.0
|
||||
logger.warning(
|
||||
"yt-dlp attempt {}/{} failed transiently for {}: {} - retrying",
|
||||
attempt, settings.yt_dlp_retry_attempts + 1, url, err,
|
||||
"yt-dlp attempt {}/{} failed transiently for {}: {} - retrying in {}s",
|
||||
attempt, settings.yt_dlp_retry_attempts + 1, url, err, delay,
|
||||
)
|
||||
await asyncio.sleep(3.0)
|
||||
await asyncio.sleep(delay)
|
||||
return last_result
|
||||
|
||||
async def _download_video_ytdlp_attempt(
|
||||
@@ -219,7 +224,7 @@ class MediaProcessor:
|
||||
)
|
||||
output_path.unlink(missing_ok=True)
|
||||
await unregister_active_path(output_path)
|
||||
return None, "video exceeds size limit", True
|
||||
return None, "video exceeds size limit", False
|
||||
|
||||
return output_path, None, False
|
||||
|
||||
|
||||
Reference in New Issue
Block a user