This commit is contained in:
@@ -88,6 +88,10 @@ func RegisterRoutes(router *gin.Engine, app *App) {
|
||||
router.POST("/api/search", app.searchMedia)
|
||||
}
|
||||
|
||||
func (a *App) debug(message string, data any) {
|
||||
a.Hub.Broadcast("debug", gin.H{"message": message, "data": data})
|
||||
}
|
||||
|
||||
func (a *App) handleWS(c *gin.Context) {
|
||||
upgrader := websocket.Upgrader{
|
||||
CheckOrigin: func(r *http.Request) bool { return true },
|
||||
@@ -193,23 +197,28 @@ func (a *App) previewDownload(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
a.debug("download preview requested", gin.H{"url": req.URL})
|
||||
cmd := exec.Command("python3", a.WorkerScript, "--mode", "probe", "--url", req.URL)
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
a.debug("download preview failed", gin.H{"url": req.URL, "output": string(output), "error": err.Error()})
|
||||
c.JSON(http.StatusBadGateway, gin.H{"error": summarizeOutput("download preview probe failed", output, err)})
|
||||
return
|
||||
}
|
||||
|
||||
var preview PreviewResponse
|
||||
if err := json.Unmarshal(output, &preview); err != nil {
|
||||
a.debug("download preview invalid json", gin.H{"url": req.URL, "output": string(output)})
|
||||
c.JSON(http.StatusBadGateway, gin.H{"error": summarizeOutput("download preview returned invalid JSON", output, err)})
|
||||
return
|
||||
}
|
||||
a.debug("download preview succeeded", preview)
|
||||
c.JSON(http.StatusOK, preview)
|
||||
}
|
||||
|
||||
func (a *App) runDownload(recordID int64, url, start, end, quality, outputPath string) {
|
||||
a.Hub.Broadcast("progress", gin.H{"type": "download", "status": "queued", "progress": 0, "url": url})
|
||||
a.debug("download command started", gin.H{"url": url, "start": start, "end": end, "quality": quality, "outputPath": outputPath})
|
||||
cmd := exec.Command("python3", a.WorkerScript, "--url", url, "--start", start, "--end", end, "--quality", quality, "--output", outputPath)
|
||||
stdout, err := cmd.StdoutPipe()
|
||||
if err != nil {
|
||||
@@ -231,6 +240,7 @@ func (a *App) runDownload(recordID int64, url, start, end, quality, outputPath s
|
||||
var msg map[string]any
|
||||
if err := json.Unmarshal(line, &msg); err == nil {
|
||||
msg["type"] = "download"
|
||||
a.debug("download worker event", msg)
|
||||
a.Hub.Broadcast("progress", msg)
|
||||
}
|
||||
}
|
||||
@@ -242,7 +252,9 @@ func (a *App) runDownload(recordID int64, url, start, end, quality, outputPath s
|
||||
if err := cmd.Wait(); err != nil {
|
||||
status = "failed"
|
||||
a.Hub.Broadcast("progress", gin.H{"type": "download", "status": "error", "progress": 100, "message": err.Error()})
|
||||
a.debug("download command failed", gin.H{"url": url, "error": err.Error()})
|
||||
}
|
||||
a.debug("download command completed", gin.H{"url": url, "status": status, "outputPath": outputPath})
|
||||
_ = models.MarkDownloadCompleted(a.DB, recordID, status)
|
||||
}
|
||||
|
||||
@@ -265,15 +277,18 @@ func (a *App) searchMedia(c *gin.Context) {
|
||||
if len(queryVariants) == 0 {
|
||||
queryVariants = []string{req.Query}
|
||||
}
|
||||
a.debug("search query variants", gin.H{"query": req.Query, "variants": queryVariants, "platforms": req.Platforms})
|
||||
|
||||
enabledPlatforms := normalizePlatforms(req.Platforms)
|
||||
a.Hub.Broadcast("progress", gin.H{"type": "search", "status": "searching " + selectedPlatformLabel(enabledPlatforms), "progress": 35})
|
||||
results, err := a.SearchService.SearchMedia(queryVariants, enabledPlatforms)
|
||||
if err != nil {
|
||||
a.debug("search backend failed", gin.H{"error": err.Error(), "variants": queryVariants})
|
||||
a.Hub.Broadcast("progress", gin.H{"type": "search", "status": "search failed", "progress": 100, "message": err.Error()})
|
||||
c.JSON(http.StatusBadGateway, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
a.debug("search backend results", gin.H{"count": len(results), "results": results})
|
||||
if len(results) == 0 {
|
||||
warning := "SearXNG returned no renderable results."
|
||||
a.Hub.Broadcast("progress", gin.H{"type": "search", "status": "no renderable search results", "progress": 100, "message": warning})
|
||||
@@ -287,8 +302,10 @@ func (a *App) searchMedia(c *gin.Context) {
|
||||
rankQuery = strings.Join(queryVariants[:min(len(queryVariants), 3)], " ")
|
||||
}
|
||||
scored := rankSearchResults(rankQuery, results)
|
||||
a.debug("search ranked results", gin.H{"count": len(scored), "results": scored})
|
||||
a.Hub.Broadcast("progress", gin.H{"type": "search", "status": "analyzing all candidate visuals with Gemini Vision", "progress": 75})
|
||||
recommended := evaluateAllCandidatesWithGemini(a.GeminiService, req.Query, scored)
|
||||
a.debug("search gemini recommendations", gin.H{"count": len(recommended), "results": recommended})
|
||||
err = nil
|
||||
if len(recommended) == 0 {
|
||||
err = fmt.Errorf("gemini vision returned no recommended items across all candidate batches")
|
||||
|
||||
Reference in New Issue
Block a user