From 7903ed1f52f6fa58beaa33592bf93ae8d20dd242 Mon Sep 17 00:00:00 2001 From: Noah Hsu Date: Mon, 27 Jun 2022 21:34:13 +0800 Subject: [PATCH] chore: change fs get and list resp --- internal/bootstrap/data/setting.go | 1 + internal/setting/setting.go | 11 +++++++++-- server/controllers/fsget.go | 19 +++++++++---------- server/controllers/fslist.go | 10 ++++++++-- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/internal/bootstrap/data/setting.go b/internal/bootstrap/data/setting.go index 5af8b3c8..a5ecab25 100644 --- a/internal/bootstrap/data/setting.go +++ b/internal/bootstrap/data/setting.go @@ -12,6 +12,7 @@ import ( var initialSettingItems = []model.SettingItem{ // site settings {Key: "version", Value: conf.Version, Type: conf.TypeString, Group: model.SITE, Flag: model.READONLY}, + {Key: "base_url", Value: "", Type: conf.TypeString, Group: model.SITE}, {Key: "site_title", Value: "AList", Type: conf.TypeString, Group: model.SITE}, {Key: "site_logo", Value: "https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg", Type: conf.TypeString, Group: model.SITE}, {Key: "favicon", Value: "https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg", Type: conf.TypeString, Group: model.SITE}, diff --git a/internal/setting/setting.go b/internal/setting/setting.go index df0f44c5..dd4e8839 100644 --- a/internal/setting/setting.go +++ b/internal/setting/setting.go @@ -5,8 +5,15 @@ import ( "strconv" ) -func GetByKey(key string) string { - return db.GetSettingsMap()[key] +func GetByKey(key string, defaultValue ...string) string { + val, ok := db.GetSettingsMap()[key] + if !ok { + if len(defaultValue) > 0 { + return defaultValue[0] + } + return "" + } + return val } func GetIntSetting(key string, defaultVal int) int { diff --git a/server/controllers/fsget.go b/server/controllers/fsget.go index 16b87c55..85c59e32 100644 --- a/server/controllers/fsget.go +++ b/server/controllers/fsget.go @@ -7,7 +7,6 @@ import ( "github.com/alist-org/alist/v3/server/common" "github.com/gin-gonic/gin" stdpath "path" - "time" ) type FsGetReq struct { @@ -16,11 +15,8 @@ type FsGetReq struct { } type FsGetResp struct { - Name string `json:"name"` - Size int64 `json:"size"` - IsDir bool `json:"is_dir"` - Modified time.Time `json:"modified"` - URL string `json:"url"` + ObjResp + RawURL string `json:"raw_url"` } func FsGet(c *gin.Context) { @@ -43,9 +39,12 @@ func FsGet(c *gin.Context) { return } common.SuccessResp(c, FsGetResp{ - Name: data.GetName(), - Size: data.GetSize(), - IsDir: data.IsDir(), - Modified: data.ModTime(), + ObjResp: ObjResp{ + Name: data.GetName(), + Size: data.GetSize(), + IsDir: data.IsDir(), + Modified: data.ModTime(), + }, + // TODO: set raw url }) } diff --git a/server/controllers/fslist.go b/server/controllers/fslist.go index 6945c876..faeab084 100644 --- a/server/controllers/fslist.go +++ b/server/controllers/fslist.go @@ -1,9 +1,11 @@ package controllers import ( + "fmt" "github.com/alist-org/alist/v3/internal/db" "github.com/alist-org/alist/v3/internal/fs" "github.com/alist-org/alist/v3/internal/model" + "github.com/alist-org/alist/v3/internal/setting" "github.com/alist-org/alist/v3/pkg/utils" "github.com/alist-org/alist/v3/server/common" "github.com/gin-gonic/gin" @@ -22,6 +24,7 @@ type ObjResp struct { Size int64 `json:"size"` IsDir bool `json:"is_dir"` Modified time.Time `json:"modified"` + URL string `json:"url"` } type FsListResp struct { @@ -50,8 +53,9 @@ func FsList(c *gin.Context) { return } total, objs := pagination(objs, &req.PageReq) + baseURL := setting.GetByKey("base_url", c.Request.Host) common.SuccessResp(c, FsListResp{ - Content: toObjResp(objs), + Content: toObjResp(objs, req.Path, baseURL), Total: int64(total), }) } @@ -87,7 +91,7 @@ func pagination(objs []model.Obj, req *common.PageReq) (int, []model.Obj) { return total, objs[start:end] } -func toObjResp(objs []model.Obj) []ObjResp { +func toObjResp(objs []model.Obj, path string, baseURL string) []ObjResp { var resp []ObjResp for _, obj := range objs { resp = append(resp, ObjResp{ @@ -95,6 +99,8 @@ func toObjResp(objs []model.Obj) []ObjResp { Size: obj.GetSize(), IsDir: obj.IsDir(), Modified: obj.ModTime(), + // TODO: sign url + URL: fmt.Sprintf("%s/d%s", baseURL, stdpath.Join(path, obj.GetName())), }) } return resp