Files
kleiax 904d14b64c
CI / test (push) Canceled after 0s
Initial commit
2026-09-12 22:22:17 +02:00

66 lines
1.7 KiB
Go

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)
}