From 51e419af6b9013d2f542a4e3ec954ca9ce9344dd Mon Sep 17 00:00:00 2001 From: Sam <100821827+01101sam@users.noreply.github.com> Date: Mon, 14 Aug 2023 12:57:07 +0800 Subject: [PATCH] feat(Thumb): Speed up thumbnail generation --- pkg/filesystem/image.go | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/pkg/filesystem/image.go b/pkg/filesystem/image.go index dc573dd3..1ee23b2d 100644 --- a/pkg/filesystem/image.go +++ b/pkg/filesystem/image.go @@ -117,11 +117,6 @@ func (fs *FileSystem) generateThumbnail(ctx context.Context, file *model.File) e defer cancel() // TODO: check file size - if file.Size > uint64(model.GetIntSetting("thumb_max_src_size", 31457280)) { - _ = updateThumbStatus(file, model.ThumbStatusNotAvailable) - return errors.New("file too large") - } - getThumbWorker().addWorker() defer getThumbWorker().releaseWorker() @@ -136,6 +131,24 @@ func (fs *FileSystem) generateThumbnail(ctx context.Context, file *model.File) e src := "" if conf.SystemConfig.Mode == "slave" || file.GetPolicy().Type == "local" { src = file.SourceName + } else { + ffmpegFormats := strings.Split(model.GetSettingByName("thumb_ffmpeg_exts"), ",") + vipsFormats := strings.Split(model.GetSettingByName("thumb_vips_exts"), ",") + // 如果文件格式支持 ffmpeg 或 vips 生成缩略图,则使用源文件链接 + if (util.IsInExtensionList(ffmpegFormats, file.Name) && + model.IsTrueVal(model.GetSettingByName("thumb_ffmpeg_enabled"))) || + (util.IsInExtensionList(vipsFormats, file.Name) && + model.IsTrueVal(model.GetSettingByName("thumb_vips_enabled"))) { + src, err = fs.Handler.Source(ctx, file.SourceName, 300, false, 0) + if err != nil { + util.Log().Warning("failed to get source url, fallback to source download method: %w", err) + } + } + } + + if src == "" && file.Size > uint64(model.GetIntSetting("thumb_max_src_size", 31457280)) { + _ = updateThumbStatus(file, model.ThumbStatusNotAvailable) + return errors.New("file too large") } thumbRes, err := thumb.Generators.Generate(ctx, source, src, file.Name, model.GetSettingByNames(