Files
alist/server/controllers/v1/search.go
2021-03-05 21:25:44 +08:00

52 lines
1.3 KiB
Go

package v1
import (
"fmt"
"github.com/Xhofe/alist/alidrive"
"github.com/Xhofe/alist/conf"
"github.com/Xhofe/alist/server/controllers"
"github.com/gin-gonic/gin"
"github.com/patrickmn/go-cache"
log "github.com/sirupsen/logrus"
)
// handle search request
func Search(c *gin.Context) {
if !conf.Conf.Server.Search {
c.JSON(200, controllers.MetaResponse(403, "Not allow search."))
return
}
var search alidrive.SearchReq
if err := c.ShouldBindJSON(&search); err != nil {
c.JSON(200, controllers.MetaResponse(400, "Bad Request"))
return
}
log.Debugf("search:%+v", search)
// cache
cacheKey := fmt.Sprintf("%s-%s", "s", search.Query)
if conf.Conf.Cache.Enable {
files, exist := conf.Cache.Get(cacheKey)
if exist {
log.Debugf("使用了缓存:%s", cacheKey)
c.JSON(200, controllers.DataResponse(files))
return
}
}
if search.Limit == 0 {
search.Limit = 50
}
// Search只支持0-100
//if conf.Conf.AliDrive.MaxFilesCount!=0 {
// search.Limit=conf.Conf.AliDrive.MaxFilesCount
//}
files, err := alidrive.Search(search.Query, search.Limit, search.OrderBy)
if err != nil {
c.JSON(200, controllers.MetaResponse(500, err.Error()))
return
}
if conf.Conf.Cache.Enable {
conf.Cache.Set(cacheKey, files, cache.DefaultExpiration)
}
c.JSON(200, controllers.DataResponse(files))
}