diff --git a/src/downloaders.go b/src/downloaders.go index 7678bbc..6532315 100644 --- a/src/downloaders.go +++ b/src/downloaders.go @@ -20,7 +20,7 @@ func removeBOM(input []byte) []byte { return input } -func downloadFile(item Item, jobInfo *JobInfo) error { +func downloadFile(drmdFilename string, item Item, jobInfo *JobInfo) error { logger.LogInfo("Download File", fmt.Sprintf("Starting download for: %s", item.Filename)) tempDir := filepath.Join(config.TempBaseDir, sanitizeFilename(item.Filename)) @@ -131,7 +131,9 @@ func downloadFile(item Item, jobInfo *JobInfo) error { go func() { for { if outputBuffer.Len() > 0 { - broadcast(outputBuffer.Bytes()) + message := outputBuffer.Bytes() + logger.LogInfo("Download File", fmt.Sprintf("Broadcasting message: %s", message)) + broadcast(drmdFilename, message) outputBuffer.Reset() } time.Sleep(1 * time.Second) diff --git a/src/handlers.go b/src/handlers.go index 0590199..7a6899e 100644 --- a/src/handlers.go +++ b/src/handlers.go @@ -382,19 +382,31 @@ func updateProgress(filename string, value float64, currentFile string) { } var upgrader = websocket.Upgrader{} -var clients = make(map[*websocket.Conn]bool) +var clients = make(map[string]map[*websocket.Conn]bool) var mu sync.Mutex func handleWebSocket(w http.ResponseWriter, r *http.Request) { + filename := r.URL.Query().Get("filename") + fmt.Println("Filename:", filename) + if filename == "" { + http.Error(w, "Filename is required", http.StatusBadRequest) + return + } + conn, err := upgrader.Upgrade(w, r, nil) if err != nil { - fmt.Println("Error while upgrading connection:", err) + logger.LogError("WebSocket", fmt.Sprintf("Error while upgrading connection: %v", err)) return } defer conn.Close() + logger.LogInfo("WebSocket", fmt.Sprintf("WebSocket connection established for filename: %s", filename)) + mu.Lock() - clients[conn] = true + if clients[filename] == nil { + clients[filename] = make(map[*websocket.Conn]bool) + } + clients[filename][conn] = true mu.Unlock() for { @@ -404,18 +416,23 @@ func handleWebSocket(w http.ResponseWriter, r *http.Request) { } mu.Lock() - delete(clients, conn) + delete(clients[filename], conn) mu.Unlock() + + logger.LogInfo("WebSocket", fmt.Sprintf("WebSocket connection closed for filename: %s", filename)) } -func broadcast(message []byte) { +func broadcast(filename string, message []byte) { mu.Lock() defer mu.Unlock() - for client := range clients { + logger.LogInfo("Broadcast", fmt.Sprintf("Broadcasting message for filename: %s", filename)) + + for client := range clients[filename] { if err := client.WriteMessage(websocket.TextMessage, message); err != nil { client.Close() - delete(clients, client) + delete(clients[filename], client) + logger.LogError("Broadcast", fmt.Sprintf("Error writing message to client: %v", err)) } } } diff --git a/src/templates/progress b/src/templates/progress index a33bbc1..7b6162c 100644 --- a/src/templates/progress +++ b/src/templates/progress @@ -145,9 +145,10 @@