diff --git a/assets b/assets index 8a94d68..1a47ca8 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 8a94d68f17c170a1055e2d57c2a2a55d18868a9e +Subproject commit 1a47ca8674654a2507fc77764b3ac1f295b04cad diff --git a/models/defaults.go b/models/defaults.go new file mode 100644 index 0000000..bd7d4a4 --- /dev/null +++ b/models/defaults.go @@ -0,0 +1,117 @@ +package model + +import ( + "github.com/cloudreve/Cloudreve/v3/pkg/conf" + "github.com/cloudreve/Cloudreve/v3/pkg/util" + "github.com/gofrs/uuid" +) + +var defaultSettings = []Setting{ + {Name: "siteURL", Value: `http://localhost`, Type: "basic"}, + {Name: "siteName", Value: `Cloudreve`, Type: "basic"}, + {Name: "siteICPId", Value: ``, Type: "basic"}, + {Name: "register_enabled", Value: `1`, Type: "register"}, + {Name: "default_group", Value: `2`, Type: "register"}, + {Name: "siteKeywords", Value: `网盘,网盘`, Type: "basic"}, + {Name: "siteDes", Value: `Cloudreve`, Type: "basic"}, + {Name: "siteTitle", Value: `平步云端`, Type: "basic"}, + {Name: "siteScript", Value: ``, Type: "basic"}, + {Name: "siteID", Value: uuid.Must(uuid.NewV4()).String(), Type: "basic"}, + {Name: "fromName", Value: `Cloudreve`, Type: "mail"}, + {Name: "mail_keepalive", Value: `30`, Type: "mail"}, + {Name: "fromAdress", Value: `no-reply@acg.blue`, Type: "mail"}, + {Name: "smtpHost", Value: `smtp.mxhichina.com`, Type: "mail"}, + {Name: "smtpPort", Value: `25`, Type: "mail"}, + {Name: "replyTo", Value: `abslant@126.com`, Type: "mail"}, + {Name: "smtpUser", Value: `no-reply@acg.blue`, Type: "mail"}, + {Name: "smtpPass", Value: ``, Type: "mail"}, + {Name: "smtpEncryption", Value: `0`, Type: "mail"}, + {Name: "maxEditSize", Value: `4194304`, Type: "file_edit"}, + {Name: "archive_timeout", Value: `60`, Type: "timeout"}, + {Name: "download_timeout", Value: `60`, Type: "timeout"}, + {Name: "preview_timeout", Value: `60`, Type: "timeout"}, + {Name: "doc_preview_timeout", Value: `60`, Type: "timeout"}, + {Name: "upload_credential_timeout", Value: `1800`, Type: "timeout"}, + {Name: "upload_session_timeout", Value: `86400`, Type: "timeout"}, + {Name: "slave_api_timeout", Value: `60`, Type: "timeout"}, + {Name: "slave_node_retry", Value: `3`, Type: "slave"}, + {Name: "slave_ping_interval", Value: `60`, Type: "slave"}, + {Name: "slave_recover_interval", Value: `120`, Type: "slave"}, + {Name: "slave_transfer_timeout", Value: `172800`, Type: "timeout"}, + {Name: "onedrive_monitor_timeout", Value: `600`, Type: "timeout"}, + {Name: "share_download_session_timeout", Value: `2073600`, Type: "timeout"}, + {Name: "onedrive_callback_check", Value: `20`, Type: "timeout"}, + {Name: "folder_props_timeout", Value: `300`, Type: "timeout"}, + {Name: "chunk_retries", Value: `5`, Type: "retry"}, + {Name: "onedrive_source_timeout", Value: `1800`, Type: "timeout"}, + {Name: "reset_after_upload_failed", Value: `0`, Type: "upload"}, + {Name: "login_captcha", Value: `0`, Type: "login"}, + {Name: "reg_captcha", Value: `0`, Type: "login"}, + {Name: "email_active", Value: `0`, Type: "register"}, + {Name: "mail_activation_template", Value: `激活您的账户
激活{siteTitle}账户
亲爱的{userName}
感谢您注册{siteTitle},请点击下方按钮完成账户激活。
激活账户
感谢您选择{siteTitle}。
`, Type: "mail_template"}, + {Name: "forget_captcha", Value: `0`, Type: "login"}, + {Name: "mail_reset_pwd_template", Value: `重设密码
重设{siteTitle}密码
亲爱的{userName}
请点击下方按钮完成密码重设。如果非你本人操作,请忽略此邮件。
重设密码
感谢您选择{siteTitle}。
`, Type: "mail_template"}, + {Name: "db_version_" + conf.RequiredDBVersion, Value: `installed`, Type: "version"}, + {Name: "hot_share_num", Value: `10`, Type: "share"}, + {Name: "gravatar_server", Value: `https://www.gravatar.com/`, Type: "avatar"}, + {Name: "defaultTheme", Value: `#3f51b5`, Type: "basic"}, + {Name: "themes", Value: `{"#3f51b5":{"palette":{"primary":{"main":"#3f51b5"},"secondary":{"main":"#f50057"}}},"#2196f3":{"palette":{"primary":{"main":"#2196f3"},"secondary":{"main":"#FFC107"}}},"#673AB7":{"palette":{"primary":{"main":"#673AB7"},"secondary":{"main":"#2196F3"}}},"#E91E63":{"palette":{"primary":{"main":"#E91E63"},"secondary":{"main":"#42A5F5","contrastText":"#fff"}}},"#FF5722":{"palette":{"primary":{"main":"#FF5722"},"secondary":{"main":"#3F51B5"}}},"#FFC107":{"palette":{"primary":{"main":"#FFC107"},"secondary":{"main":"#26C6DA"}}},"#8BC34A":{"palette":{"primary":{"main":"#8BC34A","contrastText":"#fff"},"secondary":{"main":"#FF8A65","contrastText":"#fff"}}},"#009688":{"palette":{"primary":{"main":"#009688"},"secondary":{"main":"#4DD0E1","contrastText":"#fff"}}},"#607D8B":{"palette":{"primary":{"main":"#607D8B"},"secondary":{"main":"#F06292"}}},"#795548":{"palette":{"primary":{"main":"#795548"},"secondary":{"main":"#4CAF50","contrastText":"#fff"}}}}`, Type: "basic"}, + {Name: "max_worker_num", Value: `10`, Type: "task"}, + {Name: "max_parallel_transfer", Value: `4`, Type: "task"}, + {Name: "secret_key", Value: util.RandStringRunes(256), Type: "auth"}, + {Name: "temp_path", Value: "temp", Type: "path"}, + {Name: "avatar_path", Value: "avatar", Type: "path"}, + {Name: "avatar_size", Value: "2097152", Type: "avatar"}, + {Name: "avatar_size_l", Value: "200", Type: "avatar"}, + {Name: "avatar_size_m", Value: "130", Type: "avatar"}, + {Name: "avatar_size_s", Value: "50", Type: "avatar"}, + {Name: "home_view_method", Value: "icon", Type: "view"}, + {Name: "share_view_method", Value: "list", Type: "view"}, + {Name: "cron_garbage_collect", Value: "@hourly", Type: "cron"}, + {Name: "cron_recycle_upload_session", Value: "@every 1h30m", Type: "cron"}, + {Name: "authn_enabled", Value: "0", Type: "authn"}, + {Name: "captcha_type", Value: "normal", Type: "captcha"}, + {Name: "captcha_height", Value: "60", Type: "captcha"}, + {Name: "captcha_width", Value: "240", Type: "captcha"}, + {Name: "captcha_mode", Value: "3", Type: "captcha"}, + {Name: "captcha_ComplexOfNoiseText", Value: "0", Type: "captcha"}, + {Name: "captcha_ComplexOfNoiseDot", Value: "0", Type: "captcha"}, + {Name: "captcha_IsShowHollowLine", Value: "0", Type: "captcha"}, + {Name: "captcha_IsShowNoiseDot", Value: "1", Type: "captcha"}, + {Name: "captcha_IsShowNoiseText", Value: "0", Type: "captcha"}, + {Name: "captcha_IsShowSlimeLine", Value: "1", Type: "captcha"}, + {Name: "captcha_IsShowSineLine", Value: "0", Type: "captcha"}, + {Name: "captcha_CaptchaLen", Value: "6", Type: "captcha"}, + {Name: "captcha_ReCaptchaKey", Value: "defaultKey", Type: "captcha"}, + {Name: "captcha_ReCaptchaSecret", Value: "defaultSecret", Type: "captcha"}, + {Name: "captcha_TCaptcha_CaptchaAppId", Value: "", Type: "captcha"}, + {Name: "captcha_TCaptcha_AppSecretKey", Value: "", Type: "captcha"}, + {Name: "captcha_TCaptcha_SecretId", Value: "", Type: "captcha"}, + {Name: "captcha_TCaptcha_SecretKey", Value: "", Type: "captcha"}, + {Name: "thumb_width", Value: "400", Type: "thumb"}, + {Name: "thumb_height", Value: "300", Type: "thumb"}, + {Name: "thumb_file_suffix", Value: "._thumb", Type: "thumb"}, + {Name: "thumb_max_task_count", Value: "-1", Type: "thumb"}, + {Name: "thumb_encode_method", Value: "jpg", Type: "thumb"}, + {Name: "thumb_gc_after_gen", Value: "false", Type: "thumb"}, + {Name: "thumb_encode_quality", Value: "85", Type: "thumb"}, + {Name: "pwa_small_icon", Value: "/static/img/favicon.ico", Type: "pwa"}, + {Name: "pwa_medium_icon", Value: "/static/img/logo192.png", Type: "pwa"}, + {Name: "pwa_large_icon", Value: "/static/img/logo512.png", Type: "pwa"}, + {Name: "pwa_display", Value: "standalone", Type: "pwa"}, + {Name: "pwa_theme_color", Value: "#000000", Type: "pwa"}, + {Name: "pwa_background_color", Value: "#ffffff", Type: "pwa"}, + {Name: "office_preview_service", Value: "https://view.officeapps.live.com/op/view.aspx?src={$src}", Type: "preview"}, +} diff --git a/models/migration.go b/models/migration.go index e383f7e..d3ba8df 100644 --- a/models/migration.go +++ b/models/migration.go @@ -7,7 +7,6 @@ import ( "github.com/cloudreve/Cloudreve/v3/pkg/conf" "github.com/cloudreve/Cloudreve/v3/pkg/util" "github.com/fatih/color" - "github.com/gofrs/uuid" "github.com/hashicorp/go-version" "github.com/jinzhu/gorm" "sort" @@ -86,113 +85,6 @@ func addDefaultPolicy() { } func addDefaultSettings() { - siteID, _ := uuid.NewV4() - - defaultSettings := []Setting{ - {Name: "siteURL", Value: `http://localhost`, Type: "basic"}, - {Name: "siteName", Value: `Cloudreve`, Type: "basic"}, - {Name: "siteICPId", Value: ``, Type: "basic"}, - {Name: "register_enabled", Value: `1`, Type: "register"}, - {Name: "default_group", Value: `2`, Type: "register"}, - {Name: "siteKeywords", Value: `网盘,网盘`, Type: "basic"}, - {Name: "siteDes", Value: `Cloudreve`, Type: "basic"}, - {Name: "siteTitle", Value: `平步云端`, Type: "basic"}, - {Name: "siteScript", Value: ``, Type: "basic"}, - {Name: "siteID", Value: siteID.String(), Type: "basic"}, - {Name: "fromName", Value: `Cloudreve`, Type: "mail"}, - {Name: "mail_keepalive", Value: `30`, Type: "mail"}, - {Name: "fromAdress", Value: `no-reply@acg.blue`, Type: "mail"}, - {Name: "smtpHost", Value: `smtp.mxhichina.com`, Type: "mail"}, - {Name: "smtpPort", Value: `25`, Type: "mail"}, - {Name: "replyTo", Value: `abslant@126.com`, Type: "mail"}, - {Name: "smtpUser", Value: `no-reply@acg.blue`, Type: "mail"}, - {Name: "smtpPass", Value: ``, Type: "mail"}, - {Name: "smtpEncryption", Value: `0`, Type: "mail"}, - {Name: "maxEditSize", Value: `4194304`, Type: "file_edit"}, - {Name: "archive_timeout", Value: `60`, Type: "timeout"}, - {Name: "download_timeout", Value: `60`, Type: "timeout"}, - {Name: "preview_timeout", Value: `60`, Type: "timeout"}, - {Name: "doc_preview_timeout", Value: `60`, Type: "timeout"}, - {Name: "upload_credential_timeout", Value: `1800`, Type: "timeout"}, - {Name: "upload_session_timeout", Value: `86400`, Type: "timeout"}, - {Name: "slave_api_timeout", Value: `60`, Type: "timeout"}, - {Name: "slave_node_retry", Value: `3`, Type: "slave"}, - {Name: "slave_ping_interval", Value: `60`, Type: "slave"}, - {Name: "slave_recover_interval", Value: `120`, Type: "slave"}, - {Name: "slave_transfer_timeout", Value: `172800`, Type: "timeout"}, - {Name: "onedrive_monitor_timeout", Value: `600`, Type: "timeout"}, - {Name: "share_download_session_timeout", Value: `2073600`, Type: "timeout"}, - {Name: "onedrive_callback_check", Value: `20`, Type: "timeout"}, - {Name: "folder_props_timeout", Value: `300`, Type: "timeout"}, - {Name: "chunk_retries", Value: `5`, Type: "retry"}, - {Name: "onedrive_source_timeout", Value: `1800`, Type: "timeout"}, - {Name: "reset_after_upload_failed", Value: `0`, Type: "upload"}, - {Name: "login_captcha", Value: `0`, Type: "login"}, - {Name: "reg_captcha", Value: `0`, Type: "login"}, - {Name: "email_active", Value: `0`, Type: "register"}, - {Name: "mail_activation_template", Value: `激活您的账户
激活{siteTitle}账户
亲爱的{userName}
感谢您注册{siteTitle},请点击下方按钮完成账户激活。
激活账户
感谢您选择{siteTitle}。
`, Type: "mail_template"}, - {Name: "forget_captcha", Value: `0`, Type: "login"}, - {Name: "mail_reset_pwd_template", Value: `重设密码
重设{siteTitle}密码
亲爱的{userName}
请点击下方按钮完成密码重设。如果非你本人操作,请忽略此邮件。
重设密码
感谢您选择{siteTitle}。
`, Type: "mail_template"}, - {Name: "db_version_" + conf.RequiredDBVersion, Value: `installed`, Type: "version"}, - {Name: "hot_share_num", Value: `10`, Type: "share"}, - {Name: "gravatar_server", Value: `https://www.gravatar.com/`, Type: "avatar"}, - {Name: "defaultTheme", Value: `#3f51b5`, Type: "basic"}, - {Name: "themes", Value: `{"#3f51b5":{"palette":{"primary":{"main":"#3f51b5"},"secondary":{"main":"#f50057"}}},"#2196f3":{"palette":{"primary":{"main":"#2196f3"},"secondary":{"main":"#FFC107"}}},"#673AB7":{"palette":{"primary":{"main":"#673AB7"},"secondary":{"main":"#2196F3"}}},"#E91E63":{"palette":{"primary":{"main":"#E91E63"},"secondary":{"main":"#42A5F5","contrastText":"#fff"}}},"#FF5722":{"palette":{"primary":{"main":"#FF5722"},"secondary":{"main":"#3F51B5"}}},"#FFC107":{"palette":{"primary":{"main":"#FFC107"},"secondary":{"main":"#26C6DA"}}},"#8BC34A":{"palette":{"primary":{"main":"#8BC34A","contrastText":"#fff"},"secondary":{"main":"#FF8A65","contrastText":"#fff"}}},"#009688":{"palette":{"primary":{"main":"#009688"},"secondary":{"main":"#4DD0E1","contrastText":"#fff"}}},"#607D8B":{"palette":{"primary":{"main":"#607D8B"},"secondary":{"main":"#F06292"}}},"#795548":{"palette":{"primary":{"main":"#795548"},"secondary":{"main":"#4CAF50","contrastText":"#fff"}}}}`, Type: "basic"}, - {Name: "max_worker_num", Value: `10`, Type: "task"}, - {Name: "max_parallel_transfer", Value: `4`, Type: "task"}, - {Name: "secret_key", Value: util.RandStringRunes(256), Type: "auth"}, - {Name: "temp_path", Value: "temp", Type: "path"}, - {Name: "avatar_path", Value: "avatar", Type: "path"}, - {Name: "avatar_size", Value: "2097152", Type: "avatar"}, - {Name: "avatar_size_l", Value: "200", Type: "avatar"}, - {Name: "avatar_size_m", Value: "130", Type: "avatar"}, - {Name: "avatar_size_s", Value: "50", Type: "avatar"}, - {Name: "home_view_method", Value: "icon", Type: "view"}, - {Name: "share_view_method", Value: "list", Type: "view"}, - {Name: "cron_garbage_collect", Value: "@hourly", Type: "cron"}, - {Name: "cron_recycle_upload_session", Value: "@every 1h30m", Type: "cron"}, - {Name: "authn_enabled", Value: "0", Type: "authn"}, - {Name: "captcha_type", Value: "normal", Type: "captcha"}, - {Name: "captcha_height", Value: "60", Type: "captcha"}, - {Name: "captcha_width", Value: "240", Type: "captcha"}, - {Name: "captcha_mode", Value: "3", Type: "captcha"}, - {Name: "captcha_ComplexOfNoiseText", Value: "0", Type: "captcha"}, - {Name: "captcha_ComplexOfNoiseDot", Value: "0", Type: "captcha"}, - {Name: "captcha_IsShowHollowLine", Value: "0", Type: "captcha"}, - {Name: "captcha_IsShowNoiseDot", Value: "1", Type: "captcha"}, - {Name: "captcha_IsShowNoiseText", Value: "0", Type: "captcha"}, - {Name: "captcha_IsShowSlimeLine", Value: "1", Type: "captcha"}, - {Name: "captcha_IsShowSineLine", Value: "0", Type: "captcha"}, - {Name: "captcha_CaptchaLen", Value: "6", Type: "captcha"}, - {Name: "captcha_ReCaptchaKey", Value: "defaultKey", Type: "captcha"}, - {Name: "captcha_ReCaptchaSecret", Value: "defaultSecret", Type: "captcha"}, - {Name: "captcha_TCaptcha_CaptchaAppId", Value: "", Type: "captcha"}, - {Name: "captcha_TCaptcha_AppSecretKey", Value: "", Type: "captcha"}, - {Name: "captcha_TCaptcha_SecretId", Value: "", Type: "captcha"}, - {Name: "captcha_TCaptcha_SecretKey", Value: "", Type: "captcha"}, - {Name: "thumb_width", Value: "400", Type: "thumb"}, - {Name: "thumb_height", Value: "300", Type: "thumb"}, - {Name: "pwa_small_icon", Value: "/static/img/favicon.ico", Type: "pwa"}, - {Name: "pwa_medium_icon", Value: "/static/img/logo192.png", Type: "pwa"}, - {Name: "pwa_large_icon", Value: "/static/img/logo512.png", Type: "pwa"}, - {Name: "pwa_display", Value: "standalone", Type: "pwa"}, - {Name: "pwa_theme_color", Value: "#000000", Type: "pwa"}, - {Name: "pwa_background_color", Value: "#ffffff", Type: "pwa"}, - {Name: "office_preview_service", Value: "https://view.officeapps.live.com/op/view.aspx?src={$src}", Type: "preview"}, - } - for _, value := range defaultSettings { DB.Where(Setting{Name: value.Name}).Create(&value) } diff --git a/models/setting.go b/models/setting.go index 1738c1d..643ca84 100644 --- a/models/setting.go +++ b/models/setting.go @@ -43,6 +43,15 @@ func GetSettingByName(name string) string { return "" } +// GetSettingByNameWithDefault 用 Name 获取设置值, 取不到时使用缺省值 +func GetSettingByNameWithDefault(name, fallback string) string { + res := GetSettingByName(name) + if res == "" { + return fallback + } + return res +} + // GetSettingByNames 用多个 Name 获取设置值 func GetSettingByNames(names ...string) map[string]string { var queryRes []Setting diff --git a/pkg/conf/conf.go b/pkg/conf/conf.go index 53fd4c1..4988ef3 100644 --- a/pkg/conf/conf.go +++ b/pkg/conf/conf.go @@ -45,21 +45,6 @@ type slave struct { SignatureTTL int `validate:"omitempty,gte=1"` } -// captcha 验证码配置 -type captcha struct { - Height int `validate:"gte=0"` - Width int `validate:"gte=0"` - Mode int `validate:"gte=0,lte=3"` - ComplexOfNoiseText int `validate:"gte=0,lte=2"` - ComplexOfNoiseDot int `validate:"gte=0,lte=2"` - IsShowHollowLine bool - IsShowNoiseDot bool - IsShowNoiseText bool - IsShowSlimeLine bool - IsShowSineLine bool - CaptchaLen int `validate:"gt=0"` -} - // redis 配置 type redis struct { Network string @@ -68,17 +53,6 @@ type redis struct { DB string } -// 缩略图 配置 -type thumb struct { - MaxWidth uint - MaxHeight uint - FileSuffix string `validate:"min=1"` - MaxTaskCount int - EncodeMethod string `validate:"eq=jpg|eq=png"` - EncodeQuality int `validate:"gte=1,lte=100"` - GCAfterGen bool -} - // 跨域配置 type cors struct { AllowOrigins []string @@ -132,7 +106,6 @@ func Init(path string) { "SSL": SSLConfig, "UnixSocket": UnixConfig, "Redis": RedisConfig, - "Thumbnail": ThumbConfig, "CORS": CORSConfig, "Slave": SlaveConfig, } diff --git a/pkg/conf/defaults.go b/pkg/conf/defaults.go index a998976..44c5371 100644 --- a/pkg/conf/defaults.go +++ b/pkg/conf/defaults.go @@ -32,17 +32,6 @@ var CORSConfig = &cors{ ExposeHeaders: nil, } -// ThumbConfig 缩略图配置 -var ThumbConfig = &thumb{ - MaxWidth: 400, - MaxHeight: 300, - FileSuffix: "._thumb", - MaxTaskCount: -1, - EncodeMethod: "jpg", - GCAfterGen: false, - EncodeQuality: 85, -} - // SlaveConfig 从机配置 var SlaveConfig = &slave{ CallbackTimeout: 20, diff --git a/pkg/filesystem/driver/local/handler.go b/pkg/filesystem/driver/local/handler.go index 85bb3eb..7e665c8 100644 --- a/pkg/filesystem/driver/local/handler.go +++ b/pkg/filesystem/driver/local/handler.go @@ -12,7 +12,6 @@ import ( model "github.com/cloudreve/Cloudreve/v3/models" "github.com/cloudreve/Cloudreve/v3/pkg/auth" "github.com/cloudreve/Cloudreve/v3/pkg/cache" - "github.com/cloudreve/Cloudreve/v3/pkg/conf" "github.com/cloudreve/Cloudreve/v3/pkg/filesystem/fsctx" "github.com/cloudreve/Cloudreve/v3/pkg/filesystem/response" "github.com/cloudreve/Cloudreve/v3/pkg/serializer" @@ -188,7 +187,7 @@ func (handler Driver) Delete(ctx context.Context, files []string) ([]string, err } // 尝试删除文件的缩略图(如果有) - _ = os.Remove(util.RelativePath(value + conf.ThumbConfig.FileSuffix)) + _ = os.Remove(util.RelativePath(value + model.GetSettingByNameWithDefault("thumb_file_suffix", "._thumb"))) } return deleteFailed, retErr @@ -196,7 +195,7 @@ func (handler Driver) Delete(ctx context.Context, files []string) ([]string, err // Thumb 获取文件缩略图 func (handler Driver) Thumb(ctx context.Context, path string) (*response.ContentResponse, error) { - file, err := handler.Get(ctx, path+conf.ThumbConfig.FileSuffix) + file, err := handler.Get(ctx, path+model.GetSettingByNameWithDefault("thumb_file_suffix", "._thumb")) if err != nil { return nil, err } diff --git a/pkg/filesystem/hooks.go b/pkg/filesystem/hooks.go index e73fa33..0cd1cb9 100644 --- a/pkg/filesystem/hooks.go +++ b/pkg/filesystem/hooks.go @@ -5,7 +5,6 @@ import ( model "github.com/cloudreve/Cloudreve/v3/models" "github.com/cloudreve/Cloudreve/v3/pkg/cache" "github.com/cloudreve/Cloudreve/v3/pkg/cluster" - "github.com/cloudreve/Cloudreve/v3/pkg/conf" "github.com/cloudreve/Cloudreve/v3/pkg/filesystem/driver/local" "github.com/cloudreve/Cloudreve/v3/pkg/filesystem/fsctx" "github.com/cloudreve/Cloudreve/v3/pkg/serializer" @@ -245,7 +244,7 @@ func HookGenerateThumb(ctx context.Context, fs *FileSystem, fileHeader fsctx.Fil fs.recycleLock.Lock() go func() { defer fs.recycleLock.Unlock() - _, _ = fs.Handler.Delete(ctx, []string{fileMode.SourceName + conf.ThumbConfig.FileSuffix}) + _, _ = fs.Handler.Delete(ctx, []string{fileMode.SourceName + model.GetSettingByNameWithDefault("thumb_file_suffix", "._thumb")}) fs.GenerateThumbnail(ctx, fileMode) }() } diff --git a/pkg/filesystem/image.go b/pkg/filesystem/image.go index 759ebca..30e80bf 100644 --- a/pkg/filesystem/image.go +++ b/pkg/filesystem/image.go @@ -3,7 +3,6 @@ package filesystem import ( "context" "fmt" - "strconv" "sync" "runtime" @@ -65,7 +64,7 @@ type Pool struct { // Init 初始化任务池 func getThumbWorker() *Pool { once.Do(func() { - maxWorker := conf.ThumbConfig.MaxTaskCount + maxWorker := model.GetIntSetting("thumb_max_task_count", -1) if maxWorker <= 0 { maxWorker = runtime.GOMAXPROCS(0) } @@ -118,9 +117,9 @@ func (fs *FileSystem) GenerateThumbnail(ctx context.Context, file *model.File) { // 生成缩略图 image.GetThumb(fs.GenerateThumbnailSize(w, h)) // 保存到文件 - err = image.Save(util.RelativePath(file.SourceName + conf.ThumbConfig.FileSuffix)) + err = image.Save(util.RelativePath(file.SourceName + model.GetSettingByNameWithDefault("thumb_file_suffix", "._thumb"))) image = nil - if conf.ThumbConfig.GCAfterGen { + if model.IsTrueVal(model.GetSettingByName("thumb_gc_after_gen")) { util.Log().Debug("GenerateThumbnail runtime.GC") runtime.GC() } @@ -139,17 +138,11 @@ func (fs *FileSystem) GenerateThumbnail(ctx context.Context, file *model.File) { // 失败时删除缩略图文件 if err != nil { - _, _ = fs.Handler.Delete(newCtx, []string{file.SourceName + conf.ThumbConfig.FileSuffix}) + _, _ = fs.Handler.Delete(newCtx, []string{file.SourceName + model.GetSettingByNameWithDefault("thumb_file_suffix", "._thumb")}) } } // GenerateThumbnailSize 获取要生成的缩略图的尺寸 func (fs *FileSystem) GenerateThumbnailSize(w, h int) (uint, uint) { - if conf.SystemConfig.Mode == "master" { - options := model.GetSettingByNames("thumb_width", "thumb_height") - w, _ := strconv.ParseUint(options["thumb_width"], 10, 32) - h, _ := strconv.ParseUint(options["thumb_height"], 10, 32) - return uint(w), uint(h) - } - return conf.ThumbConfig.MaxWidth, conf.ThumbConfig.MaxHeight + return uint(model.GetIntSetting("thumb_width", 400)), uint(model.GetIntSetting("thumb_width", 300)) } diff --git a/pkg/thumb/image.go b/pkg/thumb/image.go index 7b02620..69c73a3 100644 --- a/pkg/thumb/image.go +++ b/pkg/thumb/image.go @@ -12,7 +12,6 @@ import ( "strings" model "github.com/cloudreve/Cloudreve/v3/models" - "github.com/cloudreve/Cloudreve/v3/pkg/conf" "github.com/cloudreve/Cloudreve/v3/pkg/util" //"github.com/nfnt/resize" @@ -78,11 +77,11 @@ func (image *Thumb) Save(path string) (err error) { return err } defer out.Close() - switch conf.ThumbConfig.EncodeMethod { + switch model.GetSettingByNameWithDefault("thumb_encode_method", "jpg") { case "png": err = png.Encode(out, image.src) default: - err = jpeg.Encode(out, image.src, &jpeg.Options{Quality: conf.ThumbConfig.EncodeQuality}) + err = jpeg.Encode(out, image.src, &jpeg.Options{Quality: model.GetIntSetting("thumb_encode_quality", 85)}) } return err diff --git a/routers/controllers/file.go b/routers/controllers/file.go index 9b0d248..1141d7a 100644 --- a/routers/controllers/file.go +++ b/routers/controllers/file.go @@ -5,7 +5,7 @@ import ( "fmt" "net/http" - "github.com/cloudreve/Cloudreve/v3/pkg/conf" + model "github.com/cloudreve/Cloudreve/v3/models" "github.com/cloudreve/Cloudreve/v3/pkg/filesystem" "github.com/cloudreve/Cloudreve/v3/pkg/request" "github.com/cloudreve/Cloudreve/v3/pkg/serializer" @@ -174,7 +174,7 @@ func Thumb(c *gin.Context) { } defer resp.Content.Close() - http.ServeContent(c.Writer, c.Request, "thumb."+conf.ThumbConfig.EncodeMethod, fs.FileTarget[0].UpdatedAt, resp.Content) + http.ServeContent(c.Writer, c.Request, "thumb."+model.GetSettingByNameWithDefault("thumb_encode_method", "jpg"), fs.FileTarget[0].UpdatedAt, resp.Content) }