From 8f98bf7a39960bf753be1abf19738d889962cb0e Mon Sep 17 00:00:00 2001 From: julien Date: Thu, 26 Jun 2025 11:11:21 +0200 Subject: [PATCH] UP ADD ZIP RAR --- Dockerfile.dev | 7 ++-- internal/download/jobs.go | 68 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 70 insertions(+), 5 deletions(-) diff --git a/Dockerfile.dev b/Dockerfile.dev index bf9c1d3..49f3eb5 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,7 +1,8 @@ FROM golang:1.24-bullseye -# Installer ffmpeg et air + +# Installer ffmpeg, curl, unrar et air RUN apt-get update && \ - apt-get install -y ffmpeg curl && \ + apt-get install -y ffmpeg curl unrar && \ curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b /usr/local/bin && \ apt-get clean && rm -rf /var/lib/apt/lists/* @@ -13,4 +14,4 @@ RUN go mod download COPY . . # Lancer Air avec le bon chemin -CMD ["air", "-c", ".air.toml"] \ No newline at end of file +CMD ["air", "-c", ".air.toml"] diff --git a/internal/download/jobs.go b/internal/download/jobs.go index fe89396..6fc241d 100644 --- a/internal/download/jobs.go +++ b/internal/download/jobs.go @@ -14,7 +14,7 @@ import ( "strings" "sync" "time" - + "archive/zip" "gorm.io/gorm" ) @@ -274,8 +274,30 @@ func StartDownload(job *DownloadJob, downloadURL string, client *debridlink.Clie part.Close() os.Remove(tmpPath) } - UpdateJobProgress(job.ID, 100, db) + ext := strings.ToLower(filepath.Ext(finalPath)) + videoExts := map[string]bool{".mkv": true, ".avi": true, ".mp4": true} + + if !videoExts[ext] { + switch ext { + case ".zip": + if err := unzip(finalPath, path.Path); err != nil { + log.Printf("[ERROR] Décompression ZIP échouée : %v\n", err) + UpdateJobStatus(job.ID, "failed", db) + return + } + case ".rar": + if err := unrarExtract(finalPath, path.Path); err != nil { + log.Printf("[ERROR] Décompression RAR échouée : %v\n", err) + UpdateJobStatus(job.ID, "failed", db) + return + } + default: + log.Printf("[INFO] Extension non gérée : %s\n", ext) + } + } + + UpdateJobStatus(job.ID, "done", db) log.Printf("[OK] Fichier téléchargé : %s\n", finalPath) } @@ -452,4 +474,46 @@ func Broadcast() { } } } +func unzip(srcZip, destDir string) error { + r, err := zip.OpenReader(srcZip) + if err != nil { + return err + } + defer r.Close() + + for _, f := range r.File { + fpath := filepath.Join(destDir, f.Name) + if f.FileInfo().IsDir() { + os.MkdirAll(fpath, os.ModePerm) + continue + } + if err := os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil { + return err + } + in, err := f.Open() + if err != nil { + return err + } + defer in.Close() + + out, err := os.OpenFile(fpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode()) + if err != nil { + return err + } + defer out.Close() + + if _, err := io.Copy(out, in); err != nil { + return err + } + } + return nil +} +func unrarExtract(srcRar, destDir string) error { + cmd := exec.Command("unrar", "x", "-y", srcRar, destDir) + output, err := cmd.CombinedOutput() + if err != nil { + return fmt.Errorf("unrar error: %v, output: %s", err, string(output)) + } + return nil +} //***//