From 72d19a7f6327a05aec64b5334c2f22d4410fcc64 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Wed, 6 May 2026 13:31:28 +0200 Subject: [PATCH] feat: add sfw checkbox in browse --- api/anime/handler.go | 7 ++-- integrations/jikan/search.go | 7 ++-- templates/browse.gohtml | 4 +-- templates/components/filter_bar.gohtml | 49 +++++++++++++++++--------- 4 files changed, 44 insertions(+), 23 deletions(-) diff --git a/api/anime/handler.go b/api/anime/handler.go index fc175d6..be8aba1 100644 --- a/api/anime/handler.go +++ b/api/anime/handler.go @@ -141,6 +141,7 @@ func (h *Handler) HandleBrowse(w http.ResponseWriter, r *http.Request) { status := r.URL.Query().Get("status") orderBy := r.URL.Query().Get("order_by") sort := r.URL.Query().Get("sort") + sfw := r.URL.Query().Get("sfw") != "false" var genres []int for _, g := range r.URL.Query()["genres"] { @@ -155,7 +156,7 @@ func (h *Handler) HandleBrowse(w http.ResponseWriter, r *http.Request) { ctx, cancel := context.WithTimeout(r.Context(), 20*time.Second) defer cancel() - res, err := h.service.jikanClient.SearchAdvanced(ctx, q, animeType, status, orderBy, sort, genres, page, 24) + res, err := h.service.jikanClient.SearchAdvanced(ctx, q, animeType, status, orderBy, sort, genres, sfw, page, 24) if err != nil { if errors.Is(err, context.Canceled) { return @@ -183,6 +184,7 @@ func (h *Handler) HandleBrowse(w http.ResponseWriter, r *http.Request) { "OrderBy": orderBy, "Sort": sort, "Genres": genres, + "SFW": sfw, "WatchlistMap": watchlistMap, }) if err != nil { @@ -220,6 +222,7 @@ func (h *Handler) HandleBrowse(w http.ResponseWriter, r *http.Request) { "OrderBy": orderBy, "Sort": sort, "Genres": genres, + "SFW": sfw, "GenresList": genresList, "Animes": res.Animes, "HasNextPage": res.HasNextPage, @@ -398,7 +401,7 @@ func (h *Handler) HandleQuickSearch(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode([]quickSearchResult{}) return } - res, err := h.service.jikanClient.SearchAdvanced(r.Context(), query, "", "", "", "", nil, 1, 5) + res, err := h.service.jikanClient.SearchAdvanced(r.Context(), query, "", "", "", "", nil, true, 1, 5) if err != nil { log.Printf("quick search error: %v", err) w.WriteHeader(http.StatusOK) diff --git a/integrations/jikan/search.go b/integrations/jikan/search.go index a372322..9b0f0c7 100644 --- a/integrations/jikan/search.go +++ b/integrations/jikan/search.go @@ -12,7 +12,7 @@ func (c *Client) Search(ctx context.Context, query string, page int) (SearchResu return c.search(ctx, query, page, 0) } -func (c *Client) SearchAdvanced(ctx context.Context, query, animeType, status, orderBy, sort string, genres []int, page, limit int) (SearchResult, error) { +func (c *Client) SearchAdvanced(ctx context.Context, query, animeType, status, orderBy, sort string, genres []int, sfw bool, page, limit int) (SearchResult, error) { if page < 1 { page = 1 } @@ -29,10 +29,13 @@ func (c *Client) SearchAdvanced(ctx context.Context, query, animeType, status, o genresParam = strings.Join(ids, ",") } - cacheKey := fmt.Sprintf("search:%s:%s:%s:%s:%s:%s:%d:%d", query, animeType, status, orderBy, sort, genresParam, page, limit) + cacheKey := fmt.Sprintf("search:%s:%s:%s:%s:%s:%s:%v:%d:%d", query, animeType, status, orderBy, sort, genresParam, sfw, page, limit) var result SearchResponse reqURL := fmt.Sprintf("%s/anime?page=%d", c.baseURL, page) + if sfw { + reqURL += "&sfw=true" + } if query != "" { reqURL += "&q=" + url.QueryEscape(query) } diff --git a/templates/browse.gohtml b/templates/browse.gohtml index e33da8d..31f1d15 100644 --- a/templates/browse.gohtml +++ b/templates/browse.gohtml @@ -23,7 +23,7 @@ {{range $i, $anime := .Animes}} {{$isThreshold := eq (add $i 1) (sub (len $.Animes) 8)}} {{if and $isThreshold $.HasNextPage}} -
{{end}} {{if .OrderBy}}{{end}} {{if .Sort}}{{end}} + {{if not .SFW}}{{end}} {{range $g := .Genres}}{{end}}
+
+ +
+
@@ -78,12 +93,12 @@ @@ -98,17 +113,17 @@ - + {{if eq .Sort "asc"}} {{else}}