66 lines
1.7 KiB
Go
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)
|
|
}
|