73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/Xhofe/alist/alidrive"
|
|
"github.com/Xhofe/alist/conf"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/patrickmn/go-cache"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type ListReq struct {
|
|
Password string `json:"password"`
|
|
alidrive.ListReq
|
|
}
|
|
|
|
func List(c *gin.Context) {
|
|
var list ListReq
|
|
if err := c.ShouldBindJSON(&list);err!=nil {
|
|
c.JSON(200, metaResponse(400,"Bad Request"))
|
|
return
|
|
}
|
|
log.Debugf("list:%+v",list)
|
|
// cache
|
|
cacheKey:=fmt.Sprintf("%s-%s-%s","l",list.ParentFileId,list.Password)
|
|
if conf.Conf.Cache.Enable {
|
|
files,exist:=conf.Cache.Get(cacheKey)
|
|
if exist {
|
|
log.Debugf("使用了缓存:%s",cacheKey)
|
|
c.JSON(200, dataResponse(files))
|
|
return
|
|
}
|
|
}
|
|
var (
|
|
files *alidrive.Files
|
|
err error
|
|
)
|
|
if list.Limit == 0 {
|
|
list.Limit=50
|
|
}
|
|
if conf.Conf.AliDrive.MaxFilesCount!=0 {
|
|
list.Limit=conf.Conf.AliDrive.MaxFilesCount
|
|
}
|
|
if list.ParentFileId == "root" {
|
|
files,err=alidrive.GetRoot(list.Limit,list.Marker,list.OrderBy,list.OrderDirection)
|
|
}else {
|
|
files,err=alidrive.GetList(list.ParentFileId,list.Limit,list.Marker,list.OrderBy,list.OrderDirection)
|
|
}
|
|
if err!=nil {
|
|
c.JSON(200, metaResponse(500,err.Error()))
|
|
return
|
|
}
|
|
password:=alidrive.HasPassword(files)
|
|
if password!="" && password!=list.Password {
|
|
if list.Password=="" {
|
|
c.JSON(200, metaResponse(401,"need password."))
|
|
return
|
|
}
|
|
c.JSON(200, metaResponse(401,"wrong password."))
|
|
return
|
|
}
|
|
paths,err:=alidrive.GetPaths(list.ParentFileId)
|
|
if err!=nil {
|
|
c.JSON(200, metaResponse(500,err.Error()))
|
|
return
|
|
}
|
|
files.Paths=*paths
|
|
files.Readme=alidrive.HasReadme(files)
|
|
if conf.Conf.Cache.Enable {
|
|
conf.Cache.Set(cacheKey,files,cache.DefaultExpiration)
|
|
}
|
|
c.JSON(200, dataResponse(files))
|
|
} |