diff --git a/internal/debridlink/client.go b/internal/debridlink/client.go
index 7ef7ea2..dd58e37 100644
--- a/internal/debridlink/client.go
+++ b/internal/debridlink/client.go
@@ -16,7 +16,7 @@ import (
"gorm.io/gorm"
)
-const baseURL = "https://api.debrid-link.com/"
+const baseURL = "https://debrid-link.com/api/v2/"
type Client struct {
http *http.Client
diff --git a/internal/route/main.go b/internal/route/main.go
index 4c10996..8bd5fe2 100644
--- a/internal/route/main.go
+++ b/internal/route/main.go
@@ -58,11 +58,11 @@ func RoutesProtected(r *mux.Router, bd *gorm.DB) {
r.HandleFunc("/api/download/all", renders.HandleListJobsPartial(bd)).Methods("GET")
r.HandleFunc("/downloads", renders.GoDownload2(bd))
r.HandleFunc("/stream/{id}", download.HandleStreamPage()).Methods("GET")
-r.HandleFunc("/api/download/start/{id}", renders.HandleStartJob(bd)).Methods("POST")
-r.HandleFunc("/api/download/pause/{id}", renders.HandlePauseJob).Methods("POST")
-r.HandleFunc("/api/download/resume/{id}", renders.HandleResumeJob(bd)).Methods("POST")
-r.HandleFunc("/api/download/delete/{id}", renders.HandleDeleteJob).Methods("DELETE")
-
+ r.HandleFunc("/api/download/start/{id}", renders.HandleStartJob(bd)).Methods("POST")
+ r.HandleFunc("/api/download/pause/{id}", renders.HandlePauseJob).Methods("POST")
+ r.HandleFunc("/api/download/resume/{id}", renders.HandleResumeJob(bd)).Methods("POST")
+ r.HandleFunc("/api/download/delete/{id}", renders.HandleDeleteJob).Methods("DELETE")
+
// API user
r.HandleFunc("/api/user/create", users.CreateUser(bd)).Methods("POST")
diff --git a/renders/renders.go b/renders/renders.go
index 96df969..d4478b6 100644
--- a/renders/renders.go
+++ b/renders/renders.go
@@ -305,9 +305,12 @@ func HandleAddJob(db *gorm.DB) http.HandlerFunc {
PathID: uint(parsedID),
Size: l.Size,
Host: l.Host,
- CreatedAt: time.Now(),
+ Progress: 0, // obligatoire si valeur attendue
+ StreamURL: "", // vide par défaut
}
- download.RegisterJobWithDB(job,db) // => stocke en mémoire ou DB selon ton implémentation
+ if err := download.RegisterJobWithDB(job, db); err != nil {
+ log.Printf("[ERROR] Job non enregistré : %v\n", err)
+ }
}
// Met à jour la vue partielle (tableau des jobs)
@@ -335,16 +338,30 @@ var (
func HandleStartJob(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
id := mux.Vars(r)["id"]
+ log.Printf("[id] job id= "+id)
+ // 1. Récupérer depuis la map
jobsMu.Lock()
job, exists := jobs[id]
jobsMu.Unlock()
+ // 2. Sinon fallback base de données
if !exists {
- http.Error(w, "Job introuvable", http.StatusNotFound)
- return
+ var j download.DownloadJob
+ if err := db.First(&j, "id = ?", id).Error; err != nil {
+ http.Error(w, "Job introuvable", http.StatusNotFound)
+ return
+ }
+
+ // important : on copie vers un pointeur pour que la map pointe bien dessus
+ jobCopy := j
+ jobsMu.Lock()
+ jobs[id] = &jobCopy
+ job = &jobCopy
+ jobsMu.Unlock()
}
+ // 3. Setup client Debrid-Link
client := debridlink.NewClient(db)
account := download.GetFirstActiveAccount(client)
if account == nil {
@@ -353,11 +370,13 @@ func HandleStartJob(db *gorm.DB) http.HandlerFunc {
}
client.SetAccount(account)
- go download.StartDownload(job, job.Link, client, db)
+ // 4. Lancer le téléchargement réel
+ go download.StartDownload(job,job.Link,client, db)
w.WriteHeader(http.StatusNoContent)
}
}
+
func HandlePauseJob(w http.ResponseWriter, r *http.Request) {
id := mux.Vars(r)["id"]
download.UpdateJobStatus(id, "paused", nil)
@@ -367,15 +386,27 @@ func HandleResumeJob(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
id := mux.Vars(r)["id"]
+ // 1. Chercher en mémoire
jobsMu.Lock()
job, exists := jobs[id]
jobsMu.Unlock()
+ // 2. Si absent, fallback DB
if !exists {
- http.Error(w, "Job introuvable", http.StatusNotFound)
- return
+ var j download.DownloadJob
+ if err := db.First(&j, "id = ?", id).Error; err != nil {
+ http.Error(w, "Job introuvable", http.StatusNotFound)
+ return
+ }
+
+ jobCopy := j
+ jobsMu.Lock()
+ jobs[id] = &jobCopy
+ job = &jobCopy
+ jobsMu.Unlock()
}
+ // 3. Initialiser le client Debrid-Link
client := debridlink.NewClient(db)
account := download.GetFirstActiveAccount(client)
if account == nil {
@@ -384,10 +415,12 @@ func HandleResumeJob(db *gorm.DB) http.HandlerFunc {
}
client.SetAccount(account)
- go download.StartDownload(job, job.Link, client, db)
+ // 4. Redémarrer le téléchargement
+ go download.StartDownload(job,job.Link,client,db)
w.WriteHeader(http.StatusNoContent)
}
}
+
func HandleDeleteJob(w http.ResponseWriter, r *http.Request) {
id := mux.Vars(r)["id"]
download.DeleteJob(id)
diff --git a/shelfly_db.db b/shelfly_db.db
index 5ebc959..c5cb33d 100644
Binary files a/shelfly_db.db and b/shelfly_db.db differ
diff --git a/templates/downloads_table.pages.tmpl b/templates/downloads_table.pages.tmpl
index 8e687da..f2523ef 100644
--- a/templates/downloads_table.pages.tmpl
+++ b/templates/downloads_table.pages.tmpl
@@ -11,11 +11,11 @@
{{ range .jobs }}
-
{{ .FileName }}
+
{{ .Name }}
{{ .Status }}
-
{{ .Speed }}
+
{{ .Progress }}
- {{ if eq .Status "added" }}
+ {{ if eq .Status "waiting" }}
{{ end }}
{{ if eq .Status "paused" }}
diff --git a/tmp/main b/tmp/main
index 8f42ad6..d379cb7 100755
Binary files a/tmp/main and b/tmp/main differ
diff --git a/tmp/stdout b/tmp/stdout
index 4c65af2..0f5fcea 100644
--- a/tmp/stdout
+++ b/tmp/stdout
@@ -1 +1 @@
-exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1
\ No newline at end of file
+exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1
\ No newline at end of file