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)
}