Skip to main content

mangofetch_core/core/
errors.rs

1pub fn classify_download_error(error: &str) -> (&str, &str) {
2    let lower = error.to_lowercase();
3
4    if lower.contains("cookie")
5        || lower.contains("login")
6        || lower.contains("sign in")
7        || lower.contains("authentication")
8        || lower.contains("403")
9    {
10        return ("auth_required", "This content requires login. Install the browser extension and visit the site while logged in.");
11    }
12
13    if lower.contains("captcha")
14        || lower.contains("blocking")
15        || lower.contains("rate limit")
16        || lower.contains("429")
17        || lower.contains("too many")
18    {
19        return (
20            "rate_limited",
21            "Too many requests. Try again in a few minutes.",
22        );
23    }
24
25    if lower.contains("private") || lower.contains("restricted") || lower.contains("age") {
26        return ("restricted", "This content is private or age-restricted.");
27    }
28
29    if lower.contains("downloaded file") && lower.contains("not found") {
30        return (
31            "file_missing",
32            "Downloaded file could not be located in the output folder.",
33        );
34    }
35
36    if lower.contains("not found")
37        || lower.contains("404")
38        || lower.contains("unavailable")
39        || lower.contains("deleted")
40    {
41        return ("not_found", "Content not found or has been deleted.");
42    }
43
44    if lower.contains("ffmpeg") || lower.contains("mux") || lower.contains("merge") {
45        return (
46            "ffmpeg_needed",
47            "FFmpeg is required for this download. Install it from Settings.",
48        );
49    }
50
51    if lower.contains("yt-dlp") || lower.contains("ytdlp") || lower.contains("no downloader") {
52        return (
53            "ytdlp_needed",
54            "yt-dlp is required. Install it from Settings.",
55        );
56    }
57
58    if lower.contains("nsig") || lower.contains("signature") || lower.contains("cipher") {
59        return (
60            "ytdlp_outdated",
61            "yt-dlp needs updating. Restart the app to auto-update.",
62        );
63    }
64
65    ("unknown", error)
66}