@@ -0,0 +1,65 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user