diff --git a/internal/download/jobs.go b/internal/download/jobs.go index 8f50b1f..1a817b8 100644 --- a/internal/download/jobs.go +++ b/internal/download/jobs.go @@ -511,23 +511,38 @@ func unzip(srcZip, destDir string) error { return nil } func unrarExtract(srcRar, destDir string) error { - cmd := exec.Command("unrar", "x", "-y", srcRar, destDir) - output, err := cmd.CombinedOutput() - if err == nil { + log.Printf("[DEBUG] Début de l’extraction RAR – src: %q, dest: %q", srcRar, destDir) + + // 1) Tentative avec unrar + cmdUnrar := exec.Command("unrar", "x", "-y", srcRar, destDir) + log.Printf("[DEBUG] Exécution de la commande unrar : %s", strings.Join(cmdUnrar.Args, " ")) + outputUnrar, errUnrar := cmdUnrar.CombinedOutput() + log.Printf("[DEBUG] Résultat unrar – err: %v, output:\n%s", errUnrar, string(outputUnrar)) + + if errUnrar == nil { + log.Printf("[INFO] Extraction réussie avec unrar.") return nil } + log.Printf("[WARN] Échec de unrar, passage à 7z.") - + // 2) Repli sur 7z cmd7z := exec.Command("7z", "x", srcRar, "-y", "-o"+destDir) + log.Printf("[DEBUG] Exécution de la commande 7z : %s", strings.Join(cmd7z.Args, " ")) output7z, err7z := cmd7z.CombinedOutput() + log.Printf("[DEBUG] Résultat 7z – err: %v, output:\n%s", err7z, string(output7z)) + if err7z == nil { + log.Printf("[INFO] Extraction réussie avec 7z.") return nil } - return fmt.Errorf( - "unrar failed: %v, output: %s\n7z fallback failed: %v, output: %s", - err, string(output), + // 3) Les deux ont échoué + errMsg := fmt.Errorf( + "unrar a échoué : %v\nSortie unrar : %s\n\n7z a échoué : %v\nSortie 7z : %s", + errUnrar, string(outputUnrar), err7z, string(output7z), ) + log.Printf("[ERROR] %v", errMsg) + return errMsg }