From 91f7c40479aa9ef18c7927913be49a014a8a3115 Mon Sep 17 00:00:00 2001 From: Gabriel Arakaki Giovanini Date: Sun, 1 Oct 2023 16:29:10 +0200 Subject: feat: Add detail page --- pkg/view/media.go | 39 +++++++++++++++++++++++++++++++++++++++ templates/detail.qtpl | 34 ++++++++++++++++++++++++++++++++++ templates/mosaic.qtpl | 8 +++++--- 3 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 templates/detail.qtpl diff --git a/pkg/view/media.go b/pkg/view/media.go index 8a10fe0..88ecaf2 100644 --- a/pkg/view/media.go +++ b/pkg/view/media.go @@ -3,6 +3,7 @@ package view import ( "net/http" "strconv" + "strings" "git.sr.ht/~gabrielgio/img/pkg/database/repository" "git.sr.ht/~gabrielgio/img/pkg/ext" @@ -103,6 +104,41 @@ func (self *MediaView) Index(w http.ResponseWriter, r *http.Request) error { return nil } +func (self *MediaView) Detail(w http.ResponseWriter, r *http.Request) error { + user := ext.GetUserFromCtx(r) + + userPath, err := self.userRepository.GetPathFromUserID(r.Context(), user.ID) + if err != nil { + return err + } + + pathHash := r.FormValue("path_hash") + + media, err := self.mediaRepository.Get(r.Context(), pathHash) + if err != nil { + return err + } + + if !strings.Contains(media.Path, userPath) { + ext.NotFound(w) + return nil + } + + settings, err := self.settingsRepository.Load(r.Context()) + if err != nil { + return err + } + + page := &templates.DetailPage{ + Settings: settings, + Media: media, + } + + templates.WritePageTemplate(w, page, user.IsAdmin) + + return nil +} + func (self *MediaView) GetImage(w http.ResponseWriter, r *http.Request) error { pathHash := r.FormValue("path_hash") @@ -135,6 +171,9 @@ func (self *MediaView) SetMyselfIn(r *ext.Router) { r.GET("/media", self.Index) r.POST("/media", self.Index) + r.GET("/detail", self.Detail) + r.POST("/detail", self.Detail) + r.GET("/media/image", self.GetImage) r.GET("/media/thumbnail", self.GetThumbnail) } diff --git a/templates/detail.qtpl b/templates/detail.qtpl new file mode 100644 index 0000000..a981be9 --- /dev/null +++ b/templates/detail.qtpl @@ -0,0 +1,34 @@ +{% import "git.sr.ht/~gabrielgio/img/pkg/database/repository" %} + +{% code +type DetailPage struct { + Media *repository.Media + Settings *repository.Settings +} + +func (m *DetailPage) PreloadAttr() string { + if m.Settings.PreloadVideoMetadata { + return "metadata" + } + return "none" +} +%} + +{% func (p *DetailPage) Title() %}Media{% endfunc %} + +{% func (p *DetailPage) Content() %} +
+ {% if p.Media.IsVideo() %} + + {% else %} +
+ +
+ {% endif %} +
+{% endfunc %} + +{% func (p *DetailPage) Script() %} +{% endfunc %} diff --git a/templates/mosaic.qtpl b/templates/mosaic.qtpl index 18dbcba..21a8bae 100644 --- a/templates/mosaic.qtpl +++ b/templates/mosaic.qtpl @@ -7,14 +7,16 @@
{% for _, media := range c %} {% endfor %} -- cgit v1.2.3