mirror of https://github.com/cloudreve/Cloudreve
Feat: list tasks
parent
b4219927d6
commit
f91792bc64
|
@ -54,3 +54,21 @@ func GetTasksByID(id interface{}) (*Task, error) {
|
||||||
result := DB.Where("id = ?", id).First(task)
|
result := DB.Where("id = ?", id).First(task)
|
||||||
return task, result.Error
|
return task, result.Error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ListTasks 列出用户所属的任务
|
||||||
|
func ListTasks(uid uint, page, pageSize int, order string) ([]Task, int) {
|
||||||
|
var (
|
||||||
|
tasks []Task
|
||||||
|
total int
|
||||||
|
)
|
||||||
|
dbChain := DB
|
||||||
|
dbChain = dbChain.Where("user_id = ?", uid)
|
||||||
|
|
||||||
|
// 计算总数用于分页
|
||||||
|
dbChain.Model(&Share{}).Count(&total)
|
||||||
|
|
||||||
|
// 查询记录
|
||||||
|
dbChain.Limit(pageSize).Offset((page - 1) * pageSize).Order(order).Find(&tasks)
|
||||||
|
|
||||||
|
return tasks, total
|
||||||
|
}
|
||||||
|
|
|
@ -54,9 +54,8 @@ type User struct {
|
||||||
|
|
||||||
// UserOption 用户个性化配置字段
|
// UserOption 用户个性化配置字段
|
||||||
type UserOption struct {
|
type UserOption struct {
|
||||||
ProfileOn int `json:"profile_on"`
|
ProfileOff int `json:"profile_off,omitempty"`
|
||||||
PreferredPolicy uint `json:"preferred_policy"`
|
PreferredPolicy uint `json:"preferred_policy"`
|
||||||
WebDAVKey string `json:"webdav_key"`
|
|
||||||
PreferredTheme string `json:"preferred_theme"`
|
PreferredTheme string `json:"preferred_theme"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,33 @@ type SiteConfig struct {
|
||||||
User User `json:"user"`
|
User User `json:"user"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type task struct {
|
||||||
|
Status int `json:"status"`
|
||||||
|
Type int `json:"type"`
|
||||||
|
CreateDate string `json:"create_date"`
|
||||||
|
Progress int `json:"progress"`
|
||||||
|
Error string `json:"error"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// BuildTaskList 构建任务列表响应
|
||||||
|
func BuildTaskList(tasks []model.Task, total int) Response {
|
||||||
|
res := make([]task, 0, len(tasks))
|
||||||
|
for _, t := range tasks {
|
||||||
|
res = append(res, task{
|
||||||
|
Status: t.Status,
|
||||||
|
Type: t.Type,
|
||||||
|
CreateDate: t.CreatedAt.Format("2006-01-02 15:04:05"),
|
||||||
|
Progress: t.Progress,
|
||||||
|
Error: t.Error,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return Response{Data: map[string]interface{}{
|
||||||
|
"total": total,
|
||||||
|
"tasks": res,
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
func checkSettingValue(setting map[string]string, key string) string {
|
func checkSettingValue(setting map[string]string, key string) string {
|
||||||
if v, ok := setting[key]; ok {
|
if v, ok := setting[key]; ok {
|
||||||
return v
|
return v
|
||||||
|
|
|
@ -80,6 +80,7 @@ func (job *DecompressTask) Do() {
|
||||||
}
|
}
|
||||||
defer fs.Recycle()
|
defer fs.Recycle()
|
||||||
|
|
||||||
|
job.TaskModel.SetProgress(DecompressingProgress)
|
||||||
err = fs.Decompress(context.Background(), job.TaskProps.Src, job.TaskProps.Dst)
|
err = fs.Decompress(context.Background(), job.TaskProps.Src, job.TaskProps.Dst)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
job.SetErrorMsg("解压缩失败", err)
|
job.SetErrorMsg("解压缩失败", err)
|
||||||
|
|
|
@ -145,5 +145,15 @@ func UserAvailablePolicies(c *gin.Context) {
|
||||||
} else {
|
} else {
|
||||||
c.JSON(200, ErrorResponse(err))
|
c.JSON(200, ErrorResponse(err))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserTasks 获取任务队列
|
||||||
|
func UserTasks(c *gin.Context) {
|
||||||
|
var service user.SettingListService
|
||||||
|
if err := c.ShouldBindQuery(&service); err == nil {
|
||||||
|
res := service.ListTasks(c, CurrentUser(c))
|
||||||
|
c.JSON(200, res)
|
||||||
|
} else {
|
||||||
|
c.JSON(200, ErrorResponse(err))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -259,6 +259,8 @@ func InitMasterRouter() *gin.Engine {
|
||||||
{
|
{
|
||||||
// 获取用户可选存储策略
|
// 获取用户可选存储策略
|
||||||
setting.GET("policies", controllers.UserAvailablePolicies)
|
setting.GET("policies", controllers.UserAvailablePolicies)
|
||||||
|
// 任务队列
|
||||||
|
setting.GET("tasks", controllers.UserTasks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,17 @@ import (
|
||||||
type SettingService struct {
|
type SettingService struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SettingListService 通用设置列表服务
|
||||||
|
type SettingListService struct {
|
||||||
|
Page int `form:"page" binding:"required,min=1"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListTasks 列出任务
|
||||||
|
func (service *SettingListService) ListTasks(c *gin.Context, user *model.User) serializer.Response {
|
||||||
|
tasks, total := model.ListTasks(user.ID, service.Page, 10, "updated_at desc")
|
||||||
|
return serializer.BuildTaskList(tasks, total)
|
||||||
|
}
|
||||||
|
|
||||||
// Policy 获取用户存储策略设置
|
// Policy 获取用户存储策略设置
|
||||||
func (service *SettingService) Policy(c *gin.Context, user *model.User) serializer.Response {
|
func (service *SettingService) Policy(c *gin.Context, user *model.User) serializer.Response {
|
||||||
// 取得用户可用存储策略
|
// 取得用户可用存储策略
|
||||||
|
|
Loading…
Reference in New Issue