From d5b4df9d5649032bf4fd3e36dc773922e7b57825 Mon Sep 17 00:00:00 2001 From: Jamie Banks Date: Wed, 10 Jun 2026 23:20:40 +0100 Subject: [PATCH] feat: add folder filtering support to job reports and update UI filters --- internal/db/queries.go | 20 ++++++++++++++++---- internal/web/server.go | 21 ++++++++++++++++++++- web/templates/history.html | 26 ++++++++++++++++++++++---- 3 files changed, 58 insertions(+), 9 deletions(-) diff --git a/internal/db/queries.go b/internal/db/queries.go index 3b9d50a..d272e90 100644 --- a/internal/db/queries.go +++ b/internal/db/queries.go @@ -2,6 +2,7 @@ package db import ( "database/sql" + "strings" ) // Watch Folders @@ -151,21 +152,32 @@ func AddJobReport(j Job, status string, encodedSize int64, sizeSaved int64, proc return err } -func GetJobReports(limit, offset int, statusFilter string) ([]JobReport, int, error) { +func GetJobReports(limit, offset int, statusFilter string, folderFilter string) ([]JobReport, int, error) { var total int queryArgs := []interface{}{} countQuery := `SELECT COUNT(*) FROM job_reports` selectQuery := `SELECT id, file_path, media_type, status, original_size, encoded_size, size_saved, processing_time, target_resolution, ffmpeg_flags, error_message, created_at FROM job_reports` - whereClause := "" + + whereClauses := []string{} if statusFilter != "" && statusFilter != "all" { if statusFilter == "exclude_skipped" { - whereClause = ` WHERE status != 'skipped'` + whereClauses = append(whereClauses, `status != 'skipped'`) } else { - whereClause = ` WHERE status = ?` + whereClauses = append(whereClauses, `status = ?`) queryArgs = append(queryArgs, statusFilter) } } + + if folderFilter != "" && folderFilter != "all" { + whereClauses = append(whereClauses, `(file_path LIKE ? OR file_path = ?)`) + queryArgs = append(queryArgs, folderFilter+"/%", folderFilter) + } + + whereClause := "" + if len(whereClauses) > 0 { + whereClause = " WHERE " + strings.Join(whereClauses, " AND ") + } if err := DB.QueryRow(countQuery+whereClause, queryArgs...).Scan(&total); err != nil { return nil, 0, err diff --git a/internal/web/server.go b/internal/web/server.go index 7946ad4..230fa5c 100644 --- a/internal/web/server.go +++ b/internal/web/server.go @@ -281,6 +281,7 @@ func (s *Server) handleHistory(w http.ResponseWriter, r *http.Request) { limitStr := r.URL.Query().Get("limit") pageStr := r.URL.Query().Get("page") statusFilter := r.URL.Query().Get("status") + folderFilterIDStr := r.URL.Query().Get("folder") limit := 50 if l, err := strconv.Atoi(limitStr); err == nil && l > 0 { @@ -294,7 +295,21 @@ func (s *Server) handleHistory(w http.ResponseWriter, r *http.Request) { offset := (page - 1) * limit - reports, total, err := db.GetJobReports(limit, offset, statusFilter) + folders, _ := db.GetWatchFolders() + + folderFilterPath := "" + folderFilterID := 0 + if fID, err := strconv.Atoi(folderFilterIDStr); err == nil && fID > 0 { + folderFilterID = fID + for _, f := range folders { + if f.ID == fID { + folderFilterPath = f.FolderPath + break + } + } + } + + reports, total, err := db.GetJobReports(limit, offset, statusFilter, folderFilterPath) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return @@ -316,6 +331,8 @@ func (s *Server) handleHistory(w http.ResponseWriter, r *http.Request) { PrevPage int NextPage int FilterStatus string + FilterFolder int + Folders []db.WatchFolder Limit int }{ AuthEnabled: s.cfg.Auth.Username != "", @@ -328,6 +345,8 @@ func (s *Server) handleHistory(w http.ResponseWriter, r *http.Request) { PrevPage: page - 1, NextPage: page + 1, FilterStatus: statusFilter, + FilterFolder: folderFilterID, + Folders: folders, Limit: limit, } diff --git a/web/templates/history.html b/web/templates/history.html index 8d330a2..b833266 100644 --- a/web/templates/history.html +++ b/web/templates/history.html @@ -5,12 +5,21 @@
- + + +
Total Records: {{.Total}} @@ -64,7 +73,7 @@
- @@ -72,7 +81,7 @@
{{if .HasPrev}} - Previous + Previous {{else}} {{end}} @@ -80,7 +89,7 @@ Page {{.CurrentPage}} of {{.TotalPages}} {{if .HasNext}} - Next + Next {{else}} {{end}} @@ -89,6 +98,15 @@