forked from Mirrors/gomuks
media: make thumbnail size configurable
This commit is contained in:
parent
6d12e6e009
commit
947a853bae
2 changed files with 14 additions and 18 deletions
|
@ -35,6 +35,7 @@ type Config struct {
|
||||||
Web WebConfig `yaml:"web"`
|
Web WebConfig `yaml:"web"`
|
||||||
Matrix MatrixConfig `yaml:"matrix"`
|
Matrix MatrixConfig `yaml:"matrix"`
|
||||||
Push PushConfig `yaml:"push"`
|
Push PushConfig `yaml:"push"`
|
||||||
|
Media MediaConfig `yaml:"media"`
|
||||||
Logging zeroconfig.Config `yaml:"logging"`
|
Logging zeroconfig.Config `yaml:"logging"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,6 +47,10 @@ type PushConfig struct {
|
||||||
FCMGateway string `yaml:"fcm_gateway"`
|
FCMGateway string `yaml:"fcm_gateway"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MediaConfig struct {
|
||||||
|
ThumbnailSize int `yaml:"thumbnail_size"`
|
||||||
|
}
|
||||||
|
|
||||||
type WebConfig struct {
|
type WebConfig struct {
|
||||||
ListenAddress string `yaml:"listen_address"`
|
ListenAddress string `yaml:"listen_address"`
|
||||||
Username string `yaml:"username"`
|
Username string `yaml:"username"`
|
||||||
|
@ -74,6 +79,9 @@ func makeDefaultConfig() Config {
|
||||||
Matrix: MatrixConfig{
|
Matrix: MatrixConfig{
|
||||||
DisableHTTP2: false,
|
DisableHTTP2: false,
|
||||||
},
|
},
|
||||||
|
Media: MediaConfig{
|
||||||
|
ThumbnailSize: 120,
|
||||||
|
},
|
||||||
Logging: zeroconfig.Config{
|
Logging: zeroconfig.Config{
|
||||||
MinLevel: ptr.Ptr(zerolog.DebugLevel),
|
MinLevel: ptr.Ptr(zerolog.DebugLevel),
|
||||||
Writers: []zeroconfig.WriterConfig{{
|
Writers: []zeroconfig.WriterConfig{{
|
||||||
|
@ -130,6 +138,10 @@ func (gmx *Gomuks) LoadConfig() error {
|
||||||
gmx.Config.Push.FCMGateway = "https://push.gomuks.app"
|
gmx.Config.Push.FCMGateway = "https://push.gomuks.app"
|
||||||
changed = true
|
changed = true
|
||||||
}
|
}
|
||||||
|
if gmx.Config.Media.ThumbnailSize == 0 {
|
||||||
|
gmx.Config.Media.ThumbnailSize = 120
|
||||||
|
changed = true
|
||||||
|
}
|
||||||
if len(gmx.Config.Web.OriginPatterns) == 0 {
|
if len(gmx.Config.Web.OriginPatterns) == 0 {
|
||||||
gmx.Config.Web.OriginPatterns = []string{"localhost:*", "*.localhost:*"}
|
gmx.Config.Web.OriginPatterns = []string{"localhost:*", "*.localhost:*"}
|
||||||
changed = true
|
changed = true
|
||||||
|
|
|
@ -89,7 +89,7 @@ func (gmx *Gomuks) downloadMediaFromCache(ctx context.Context, w http.ResponseWr
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if entry.ThumbnailHash == nil {
|
if entry.ThumbnailHash == nil {
|
||||||
err := gmx.generateAvatarThumbnail(entry, thumbnailMaxSize)
|
err := gmx.generateAvatarThumbnail(entry, gmx.Config.Media.ThumbnailSize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Err(err).Msg("Failed to generate avatar thumbnail")
|
log.Err(err).Msg("Failed to generate avatar thumbnail")
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
@ -100,7 +100,7 @@ func (gmx *Gomuks) downloadMediaFromCache(ctx context.Context, w http.ResponseWr
|
||||||
}
|
}
|
||||||
cacheFile, err := os.Open(gmx.cacheEntryToPath(hash[:]))
|
cacheFile, err := os.Open(gmx.cacheEntryToPath(hash[:]))
|
||||||
if useThumbnail && errors.Is(err, os.ErrNotExist) {
|
if useThumbnail && errors.Is(err, os.ErrNotExist) {
|
||||||
err = gmx.generateAvatarThumbnail(entry, thumbnailMaxSize)
|
err = gmx.generateAvatarThumbnail(entry, gmx.Config.Media.ThumbnailSize)
|
||||||
if errors.Is(err, os.ErrNotExist) {
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
// Fall through to next error handler
|
// Fall through to next error handler
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
|
@ -151,8 +151,6 @@ func cacheEntryToHeaders(w http.ResponseWriter, entry *database.Media, thumbnail
|
||||||
w.Header().Set("ETag", entry.ETag(thumbnail))
|
w.Header().Set("ETag", entry.ETag(thumbnail))
|
||||||
}
|
}
|
||||||
|
|
||||||
const thumbnailMaxSize = 80
|
|
||||||
|
|
||||||
func (gmx *Gomuks) generateAvatarThumbnail(entry *database.Media, size int) error {
|
func (gmx *Gomuks) generateAvatarThumbnail(entry *database.Media, size int) error {
|
||||||
cacheFile, err := os.Open(gmx.cacheEntryToPath(entry.Hash[:]))
|
cacheFile, err := os.Open(gmx.cacheEntryToPath(entry.Hash[:]))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -162,20 +160,6 @@ func (gmx *Gomuks) generateAvatarThumbnail(entry *database.Media, size int) erro
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to decode image: %w", err)
|
return fmt.Errorf("failed to decode image: %w", err)
|
||||||
}
|
}
|
||||||
//bounds := img.Bounds()
|
|
||||||
//origWidth := bounds.Dx()
|
|
||||||
//origHeight := bounds.Dy()
|
|
||||||
//var width, height int
|
|
||||||
//if origWidth == origHeight {
|
|
||||||
// width = size
|
|
||||||
// height = size
|
|
||||||
//} else if origWidth > origHeight {
|
|
||||||
// width = size
|
|
||||||
// height = origHeight * size / origWidth
|
|
||||||
//} else {
|
|
||||||
// width = origWidth * size / origHeight
|
|
||||||
// height = size
|
|
||||||
//}
|
|
||||||
|
|
||||||
tempFile, err := os.CreateTemp(gmx.TempDir, "thumbnail-*")
|
tempFile, err := os.CreateTemp(gmx.TempDir, "thumbnail-*")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Add table
Reference in a new issue