package web import ( "errors" "net/http" "gardomatic.kleiax.de/lib/client" ) func (app *application) loadImageLibrary(r *http.Request, gardenID int) ([]client.Image, error) { images, _, err := client.FromContext(r.Context()).Images(r.Context(), gardenID, "", "") if err != nil { var apiError *client.APIError if errors.As(err, &apiError) && apiError.StatusCode == http.StatusNotFound { return nil, nil } } return images, err } func (app *application) images(w http.ResponseWriter, r *http.Request) { gardenID, err := app.readPathID(r, "gardenID") if err != nil { app.notFound(w) return } apiClient := client.FromContext(r.Context()) garden, _, err := apiClient.Garden(r.Context(), gardenID) if err != nil { app.handleAPIError(w, r, err) return } filters := collectionFilters(r, "q", "source") images, _, err := apiClient.Images(r.Context(), gardenID, filters["q"], filters["source"]) if err != nil { app.handleAPIError(w, r, err) return } data := app.newTemplateData(r) data.Garden = &garden data.Images, data.Pagination = paginateCollection(r, images) data.Filters = filters app.render(w, http.StatusOK, "images.tmpl", data) } func (app *application) imageData(w http.ResponseWriter, r *http.Request) { gardenID, err := app.readPathID(r, "gardenID") if err != nil { app.notFound(w) return } imageID, err := app.readPathID(r, "imageID") if err != nil { app.notFound(w) return } data, mediaType, _, err := client.FromContext(r.Context()).ImageData(r.Context(), gardenID, imageID) if err != nil { app.handleAPIError(w, r, err) return } w.Header().Set("Content-Type", mediaType) w.Header().Set("Cache-Control", "private, max-age=86400") _, _ = w.Write(data) }