From 1e4613aa1113b373a8d841c28e222599237a33c5 Mon Sep 17 00:00:00 2001 From: Gabriel Arakaki Giovanini Date: Thu, 20 Jul 2023 20:52:13 +0200 Subject: feat: Add option to preload metadata Let the use pick if they want to preload videos' metadata. --- cmd/server/main.go | 2 +- pkg/database/repository/settings.go | 5 +++-- pkg/database/sql/settings.go | 11 +++++++---- pkg/service/auth_test.go | 1 - pkg/view/media.go | 17 +++++++++++++---- pkg/view/settings.go | 10 ++++++---- templates/media.qtpl | 14 +++++++++++--- templates/settings.qtpl | 8 ++++++++ 8 files changed, 49 insertions(+), 19 deletions(-) diff --git a/cmd/server/main.go b/cmd/server/main.go index b940145..c7f9019 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -108,7 +108,7 @@ func main() { view.NewAuthView(userController), view.NewFileSystemView(*fileSystemController, settingsRepository), view.NewSettingsView(settingsRepository, userRepository), - view.NewMediaView(mediaRepository, userRepository), + view.NewMediaView(mediaRepository, userRepository, settingsRepository), } { v.SetMyselfIn(extRouter) } diff --git a/pkg/database/repository/settings.go b/pkg/database/repository/settings.go index 6ed1eb6..c3d8fbb 100644 --- a/pkg/database/repository/settings.go +++ b/pkg/database/repository/settings.go @@ -4,8 +4,9 @@ import "context" type ( Settings struct { - ShowMode bool - ShowOwner bool + ShowMode bool + ShowOwner bool + PreloadVideoMetadata bool } SettingsRepository interface { diff --git a/pkg/database/sql/settings.go b/pkg/database/sql/settings.go index 4e73878..3f4ad08 100644 --- a/pkg/database/sql/settings.go +++ b/pkg/database/sql/settings.go @@ -11,8 +11,9 @@ import ( type ( Settings struct { gorm.Model - ShowMode bool - ShowOwner bool + ShowMode bool + ShowOwner bool + PreloadVideoMetadata bool } SettingsRepository struct { @@ -51,6 +52,7 @@ func (self *SettingsRepository) Save(ctx context.Context, toSaveSettings *reposi s.ShowMode = toSaveSettings.ShowMode s.ShowOwner = toSaveSettings.ShowOwner + s.PreloadVideoMetadata = toSaveSettings.PreloadVideoMetadata result := db.Save(s) return result.Error @@ -63,7 +65,8 @@ func (self *SettingsRepository) Load(ctx context.Context) (*repository.Settings, } return &repository.Settings{ - ShowMode: s.ShowMode, - ShowOwner: s.ShowOwner, + ShowMode: s.ShowMode, + ShowOwner: s.ShowOwner, + PreloadVideoMetadata: s.PreloadVideoMetadata, }, nil } diff --git a/pkg/service/auth_test.go b/pkg/service/auth_test.go index 7083d0c..179ded7 100644 --- a/pkg/service/auth_test.go +++ b/pkg/service/auth_test.go @@ -7,7 +7,6 @@ import ( "testing" "git.sr.ht/~gabrielgio/img/pkg/database/repository" - "git.sr.ht/~gabrielgio/img/pkg/ext" "git.sr.ht/~gabrielgio/img/pkg/testkit" ) diff --git a/pkg/view/media.go b/pkg/view/media.go index e247940..6e34fd6 100644 --- a/pkg/view/media.go +++ b/pkg/view/media.go @@ -12,8 +12,9 @@ import ( type ( MediaView struct { - mediaRepository repository.MediaRepository - userRepository repository.UserRepository + mediaRepository repository.MediaRepository + userRepository repository.UserRepository + settingsRepository repository.SettingsRepository } ) @@ -50,10 +51,12 @@ func getPagination(ctx *fasthttp.RequestCtx) *repository.Pagination { func NewMediaView( mediaRepository repository.MediaRepository, userRepository repository.UserRepository, + settingsRepository repository.SettingsRepository, ) *MediaView { return &MediaView{ - mediaRepository: mediaRepository, - userRepository: userRepository, + mediaRepository: mediaRepository, + userRepository: userRepository, + settingsRepository: settingsRepository, } } @@ -72,12 +75,18 @@ func (self *MediaView) Index(ctx *fasthttp.RequestCtx) error { return err } + settings, err := self.settingsRepository.Load(ctx) + if err != nil { + return err + } + page := &templates.MediaPage{ Medias: medias, Next: &repository.Pagination{ Size: p.Size, Page: p.Page + 1, }, + Settings: settings, } templates.WritePageTemplate(ctx, page) diff --git a/pkg/view/settings.go b/pkg/view/settings.go index bee3dc2..ffce86b 100644 --- a/pkg/view/settings.go +++ b/pkg/view/settings.go @@ -47,13 +47,15 @@ func (self *SettingsView) Index(ctx *fasthttp.RequestCtx) error { func (self *SettingsView) Save(ctx *fasthttp.RequestCtx) error { var ( - showMode = string(ctx.FormValue("showMode")) == "on" - showOwner = string(ctx.FormValue("showOwner")) == "on" + showMode = string(ctx.FormValue("showMode")) == "on" + showOwner = string(ctx.FormValue("showOwner")) == "on" + preloadVideoMetadata = string(ctx.FormValue("preloadVideoMetadata")) == "on" ) err := self.settingsRepository.Save(ctx, &repository.Settings{ - ShowMode: showMode, - ShowOwner: showOwner, + ShowMode: showMode, + ShowOwner: showOwner, + PreloadVideoMetadata: preloadVideoMetadata, }) if err != nil { return err diff --git a/templates/media.qtpl b/templates/media.qtpl index 18eac0d..6217899 100644 --- a/templates/media.qtpl +++ b/templates/media.qtpl @@ -2,8 +2,16 @@ {% code type MediaPage struct { - Medias []*repository.Media - Next *repository.Pagination + Medias []*repository.Media + Next *repository.Pagination + Settings *repository.Settings +} + +func (m *MediaPage) PreloadAttr() string { + if m.Settings.PreloadVideoMetadata { + return "metadata" + } + return "none" } %} @@ -14,7 +22,7 @@ type MediaPage struct { {% for _, media := range p.Medias %}
{% if media.IsVideo() %} -
+
+
+ +
+
-- cgit v1.2.3