From a2d80c62c1c17962e566f68fb7cac6960ed3e4cb Mon Sep 17 00:00:00 2001 From: Ariel Leyva Date: Mon, 29 Dec 2025 02:25:49 -0500 Subject: [PATCH] feat: add "disable image resolution calculation" flag (#5638) --- cmd/config.go | 3 +++ cmd/root.go | 6 ++++++ files/file.go | 25 ++++++++++++++----------- http/public.go | 1 + settings/settings.go | 1 + www/docs/cli/filebrowser-config-init.md | 1 + www/docs/cli/filebrowser-config-set.md | 1 + www/docs/cli/filebrowser.md | 1 + 8 files changed, 28 insertions(+), 11 deletions(-) diff --git a/cmd/config.go b/cmd/config.go index 83e7620e..3fb2e7e4 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -308,6 +308,9 @@ func getSettings(flags *pflag.FlagSet, set *settings.Settings, ser *settings.Ser case "disableTypeDetectionByHeader": ser.TypeDetectionByHeader, err = flags.GetBool(flag.Name) ser.TypeDetectionByHeader = !ser.TypeDetectionByHeader + case "disableImageResolutionCalc": + ser.ImageResolutionCal, err = flags.GetBool(flag.Name) + ser.ImageResolutionCal = !ser.ImageResolutionCal // Settings flags from [addConfigFlags] case "signup": diff --git a/cmd/root.go b/cmd/root.go index 13bc3192..0f78535c 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -108,6 +108,7 @@ func addServerFlags(flags *pflag.FlagSet) { flags.Bool("disablePreviewResize", false, "disable resize of image previews") flags.Bool("disableExec", true, "disables Command Runner feature") flags.Bool("disableTypeDetectionByHeader", false, "disables type detection by reading file headers") + flags.Bool("disableImageResolutionCalc", false, "disables image resolution calculation by reading image files") } var rootCmd = &cobra.Command{ @@ -336,6 +337,10 @@ func getServerSettings(v *viper.Viper, st *storage.Storage) (*settings.Server, e server.TypeDetectionByHeader = !v.GetBool("disableTypeDetectionByHeader") } + if v.IsSet("disableImageResolutionCalc") { + server.ImageResolutionCal = !v.GetBool("disableImageResolutionCalc") + } + if v.IsSet("disableExec") { server.EnableExec = !v.GetBool("disableExec") } @@ -444,6 +449,7 @@ func quickSetup(v *viper.Viper, s *storage.Storage) error { ResizePreview: !v.GetBool("disablePreviewResize"), EnableExec: !v.GetBool("disableExec"), TypeDetectionByHeader: !v.GetBool("disableTypeDetectionByHeader"), + ImageResolutionCal: !v.GetBool("disableImageResolutionCalc"), } err = s.Settings.SaveServer(ser) diff --git a/files/file.go b/files/file.go index 5ce0aee7..2ba432dc 100644 --- a/files/file.go +++ b/files/file.go @@ -60,6 +60,7 @@ type FileOptions struct { Modify bool Expand bool ReadHeader bool + CalcImgRes bool Token string Checker rules.Checker Content bool @@ -90,13 +91,13 @@ func NewFileInfo(opts *FileOptions) (*FileInfo, error) { if opts.Expand { if file.IsDir { - if err := file.readListing(opts.Checker, opts.ReadHeader); err != nil { + if err := file.readListing(opts.Checker, opts.ReadHeader, opts.CalcImgRes); err != nil { return nil, err } return file, nil } - err = file.detectType(opts.Modify, opts.Content, true) + err = file.detectType(opts.Modify, opts.Content, true, opts.CalcImgRes) if err != nil { return nil, err } @@ -218,7 +219,7 @@ func (i *FileInfo) RealPath() string { return i.Path } -func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error { +func (i *FileInfo) detectType(modify, saveContent, readHeader bool, calcImgRes bool) error { if IsNamedPipe(i.Mode) { i.Type = "blob" return nil @@ -249,11 +250,13 @@ func (i *FileInfo) detectType(modify, saveContent, readHeader bool) error { return nil case strings.HasPrefix(mimetype, "image"): i.Type = "image" - resolution, err := calculateImageResolution(i.Fs, i.Path) - if err != nil { - log.Printf("Error calculating image resolution: %v", err) - } else { - i.Resolution = resolution + if calcImgRes { + resolution, err := calculateImageResolution(i.Fs, i.Path) + if err != nil { + log.Printf("Error calculating image resolution: %v", err) + } else { + i.Resolution = resolution + } } return nil case strings.HasSuffix(mimetype, "pdf"): @@ -387,7 +390,7 @@ func (i *FileInfo) addSubtitle(fPath string) { i.Subtitles = append(i.Subtitles, fPath) } -func (i *FileInfo) readListing(checker rules.Checker, readHeader bool) error { +func (i *FileInfo) readListing(checker rules.Checker, readHeader bool, calcImgRes bool) error { afs := &afero.Afero{Fs: i.Fs} dir, err := afs.ReadDir(i.Path) if err != nil { @@ -434,7 +437,7 @@ func (i *FileInfo) readListing(checker rules.Checker, readHeader bool) error { currentDir: dir, } - if !file.IsDir && strings.HasPrefix(mime.TypeByExtension(file.Extension), "image/") { + if !file.IsDir && strings.HasPrefix(mime.TypeByExtension(file.Extension), "image/") && calcImgRes { resolution, err := calculateImageResolution(file.Fs, file.Path) if err != nil { log.Printf("Error calculating resolution for image %s: %v", file.Path, err) @@ -451,7 +454,7 @@ func (i *FileInfo) readListing(checker rules.Checker, readHeader bool) error { if isInvalidLink { file.Type = "invalid_link" } else { - err := file.detectType(true, false, readHeader) + err := file.detectType(true, false, readHeader, calcImgRes) if err != nil { return err } diff --git a/http/public.go b/http/public.go index 9b344a55..6dcdaff1 100644 --- a/http/public.go +++ b/http/public.go @@ -41,6 +41,7 @@ var withHashFile = func(fn handleFunc) handleFunc { Modify: d.user.Perm.Modify, Expand: false, ReadHeader: d.server.TypeDetectionByHeader, + CalcImgRes: d.server.TypeDetectionByHeader, Checker: d, Token: link.Token, }) diff --git a/settings/settings.go b/settings/settings.go index 6bcc36f8..d71be16a 100644 --- a/settings/settings.go +++ b/settings/settings.go @@ -59,6 +59,7 @@ type Server struct { ResizePreview bool `json:"resizePreview"` EnableExec bool `json:"enableExec"` TypeDetectionByHeader bool `json:"typeDetectionByHeader"` + ImageResolutionCal bool `json:"imageResolutionCalculation"` AuthHook string `json:"authHook"` TokenExpirationTime string `json:"tokenExpirationTime"` } diff --git a/www/docs/cli/filebrowser-config-init.md b/www/docs/cli/filebrowser-config-init.md index 1029890f..c1f8734d 100644 --- a/www/docs/cli/filebrowser-config-init.md +++ b/www/docs/cli/filebrowser-config-init.md @@ -39,6 +39,7 @@ filebrowser config init [flags] --disablePreviewResize disable resize of image previews --disableThumbnails disable image thumbnails --disableTypeDetectionByHeader disables type detection by reading file headers + --disableImageResolutionCalc disables image resolution calculation by reading image files --fileMode string mode bits that new files are created with (default "0o640") -h, --help help for init --hideDotfiles hide dotfiles diff --git a/www/docs/cli/filebrowser-config-set.md b/www/docs/cli/filebrowser-config-set.md index 3cacdcef..1b5ce2f6 100644 --- a/www/docs/cli/filebrowser-config-set.md +++ b/www/docs/cli/filebrowser-config-set.md @@ -36,6 +36,7 @@ filebrowser config set [flags] --disablePreviewResize disable resize of image previews --disableThumbnails disable image thumbnails --disableTypeDetectionByHeader disables type detection by reading file headers + --disableImageResolutionCalc disables image resolution calculation by reading image files --fileMode string mode bits that new files are created with (default "0o640") -h, --help help for set --hideDotfiles hide dotfiles diff --git a/www/docs/cli/filebrowser.md b/www/docs/cli/filebrowser.md index e2390238..17980550 100644 --- a/www/docs/cli/filebrowser.md +++ b/www/docs/cli/filebrowser.md @@ -60,6 +60,7 @@ filebrowser [flags] --disablePreviewResize disable resize of image previews --disableThumbnails disable image thumbnails --disableTypeDetectionByHeader disables type detection by reading file headers + --disableImageResolutionCalc disables image resolution calculation by reading image files -h, --help help for filebrowser --imageProcessors int image processors count (default 4) -k, --key string tls key