fix(downloads): don't classify per-item download 404s as source-level Not Found

gallery-dl logs `[download][error] Failed to download <file>.part` when a
single post attachment's media URL expires or is deleted, then recovers
and proceeds with the rest of the run. Our error categorizer was letting
a urllib3 debug line like `"HEAD /media-u/v3/<id> HTTP/1.1" 404 0` match
the NOT_FOUND_PATTERNS list, flagging the whole source as deleted even
though gallery-dl kept downloading subsequent items successfully.

Adds "failed to download" to the per-item allowlist so the mask flips
when skip activity is present, matching the shape of the campaign-ID
fix. Total-failure runs still classify as failures.

Also renames the Download Details modal's "Error Log" panel to
"Verbose Log (stderr)" — gallery-dl's `-v` flag sends all logging
(including [debug] lines) to stderr, so the original label was
misleading. Drops the blanket red text color for the same reason.
This commit is contained in:
2026-04-19 14:07:50 -04:00
parent 24c3999f55
commit edbb349c58
3 changed files with 43 additions and 2 deletions
+4
View File
@@ -441,11 +441,15 @@ class GalleryDLService:
# - "failed to extract campaign id": logged when the vanity-URL HTML path
# fails, but gallery-dl falls back to the /cw/<vanity> redirect and
# recovers the campaign_id on its own.
# - "failed to download": per-item download failure (e.g., a single
# Patreon attachment whose media URL expired / was deleted). The
# downloader logs [download][error] and moves to the next item.
if has_actual_error and (skip_line_count > 0 or has_skip_text):
per_item_patterns = [
"not allowed to view",
"unable to get post",
"failed to extract campaign id",
"failed to download",
]
error_lines = [
line for line in combined.split('\n')