bug en attente de reso

This commit is contained in:
julien 2025-06-13 17:12:32 +02:00
parent e0d753a927
commit 10c265141a
7 changed files with 51 additions and 18 deletions

View File

@ -16,7 +16,7 @@ import (
"gorm.io/gorm" "gorm.io/gorm"
) )
const baseURL = "https://api.debrid-link.com/" const baseURL = "https://debrid-link.com/api/v2/"
type Client struct { type Client struct {
http *http.Client http *http.Client

View File

@ -305,9 +305,12 @@ func HandleAddJob(db *gorm.DB) http.HandlerFunc {
PathID: uint(parsedID), PathID: uint(parsedID),
Size: l.Size, Size: l.Size,
Host: l.Host, Host: l.Host,
CreatedAt: time.Now(), Progress: 0, // obligatoire si valeur attendue
StreamURL: "", // vide par défaut
}
if err := download.RegisterJobWithDB(job, db); err != nil {
log.Printf("[ERROR] Job non enregistré : %v\n", err)
} }
download.RegisterJobWithDB(job,db) // => stocke en mémoire ou DB selon ton implémentation
} }
// Met à jour la vue partielle (tableau des jobs) // Met à jour la vue partielle (tableau des jobs)
@ -335,16 +338,30 @@ var (
func HandleStartJob(db *gorm.DB) http.HandlerFunc { func HandleStartJob(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
id := mux.Vars(r)["id"] id := mux.Vars(r)["id"]
log.Printf("[id] job id= "+id)
// 1. Récupérer depuis la map
jobsMu.Lock() jobsMu.Lock()
job, exists := jobs[id] job, exists := jobs[id]
jobsMu.Unlock() jobsMu.Unlock()
// 2. Sinon fallback base de données
if !exists { if !exists {
var j download.DownloadJob
if err := db.First(&j, "id = ?", id).Error; err != nil {
http.Error(w, "Job introuvable", http.StatusNotFound) http.Error(w, "Job introuvable", http.StatusNotFound)
return 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) client := debridlink.NewClient(db)
account := download.GetFirstActiveAccount(client) account := download.GetFirstActiveAccount(client)
if account == nil { if account == nil {
@ -353,11 +370,13 @@ func HandleStartJob(db *gorm.DB) http.HandlerFunc {
} }
client.SetAccount(account) client.SetAccount(account)
// 4. Lancer le téléchargement réel
go download.StartDownload(job,job.Link,client, db) go download.StartDownload(job,job.Link,client, db)
w.WriteHeader(http.StatusNoContent) w.WriteHeader(http.StatusNoContent)
} }
} }
func HandlePauseJob(w http.ResponseWriter, r *http.Request) { func HandlePauseJob(w http.ResponseWriter, r *http.Request) {
id := mux.Vars(r)["id"] id := mux.Vars(r)["id"]
download.UpdateJobStatus(id, "paused", nil) download.UpdateJobStatus(id, "paused", nil)
@ -367,15 +386,27 @@ func HandleResumeJob(db *gorm.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {
id := mux.Vars(r)["id"] id := mux.Vars(r)["id"]
// 1. Chercher en mémoire
jobsMu.Lock() jobsMu.Lock()
job, exists := jobs[id] job, exists := jobs[id]
jobsMu.Unlock() jobsMu.Unlock()
// 2. Si absent, fallback DB
if !exists { if !exists {
var j download.DownloadJob
if err := db.First(&j, "id = ?", id).Error; err != nil {
http.Error(w, "Job introuvable", http.StatusNotFound) http.Error(w, "Job introuvable", http.StatusNotFound)
return return
} }
jobCopy := j
jobsMu.Lock()
jobs[id] = &jobCopy
job = &jobCopy
jobsMu.Unlock()
}
// 3. Initialiser le client Debrid-Link
client := debridlink.NewClient(db) client := debridlink.NewClient(db)
account := download.GetFirstActiveAccount(client) account := download.GetFirstActiveAccount(client)
if account == nil { if account == nil {
@ -384,10 +415,12 @@ func HandleResumeJob(db *gorm.DB) http.HandlerFunc {
} }
client.SetAccount(account) client.SetAccount(account)
// 4. Redémarrer le téléchargement
go download.StartDownload(job,job.Link,client,db) go download.StartDownload(job,job.Link,client,db)
w.WriteHeader(http.StatusNoContent) w.WriteHeader(http.StatusNoContent)
} }
} }
func HandleDeleteJob(w http.ResponseWriter, r *http.Request) { func HandleDeleteJob(w http.ResponseWriter, r *http.Request) {
id := mux.Vars(r)["id"] id := mux.Vars(r)["id"]
download.DeleteJob(id) download.DeleteJob(id)

Binary file not shown.

View File

@ -11,11 +11,11 @@
<tbody> <tbody>
{{ range .jobs }} {{ range .jobs }}
<tr class="border-b {{ if eq .Status "error" }}bg-red-100 text-red-800{{ end }}"> <tr class="border-b {{ if eq .Status "error" }}bg-red-100 text-red-800{{ end }}">
<td class="px-2 py-1 text-sm">{{ .FileName }}</td> <td class="px-2 py-1 text-sm">{{ .Name }}</td>
<td class="px-2 py-1 text-sm">{{ .Status }}</td> <td class="px-2 py-1 text-sm">{{ .Status }}</td>
<td class="px-2 py-1 text-sm">{{ .Speed }}</td> <td class="px-2 py-1 text-sm">{{ .Progress }}</td>
<td class="px-2 py-1 text-sm"> <td class="px-2 py-1 text-sm">
{{ if eq .Status "added" }} {{ if eq .Status "waiting" }}
<button hx-post="/api/download/start/{{ .ID }}" class="text-indigo-600">⬇ Télécharger</button> <button hx-post="/api/download/start/{{ .ID }}" class="text-indigo-600">⬇ Télécharger</button>
{{ end }} {{ end }}
{{ if eq .Status "paused" }} {{ if eq .Status "paused" }}

BIN
tmp/main

Binary file not shown.

View File

@ -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 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