resolved #170 native driver sort

pull/548/head
微凉 2021-11-23 16:09:42 +08:00
parent 163ee1159e
commit 8cfabfd0f5
2 changed files with 52 additions and 3 deletions

View File

@ -28,6 +28,20 @@ func (n Native) Items() []Item {
Type: "string", Type: "string",
Required: true, Required: true,
}, },
{
Name: "order_by",
Label: "order_by",
Type: "select",
Values: "name,size,updated_at",
Required: false,
},
{
Name: "order_direction",
Label: "order_direction",
Type: "select",
Values: "ASC,DESC",
Required: false,
},
} }
} }
@ -51,7 +65,6 @@ func (n Native) Save(account *model.Account, old *model.Account) error {
return nil return nil
} }
// TODO sort files
func (n Native) Path(path string, account *model.Account) (*model.File, []model.File, error) { func (n Native) Path(path string, account *model.Account) (*model.File, []model.File, error) {
fullPath := filepath.Join(account.RootFolder, path) fullPath := filepath.Join(account.RootFolder, path)
log.Debugf("%s-%s-%s", account.RootFolder, path, fullPath) log.Debugf("%s-%s-%s", account.RootFolder, path, fullPath)
@ -83,6 +96,7 @@ func (n Native) Path(path string, account *model.Account) (*model.File, []model.
} }
result = append(result, file) result = append(result, file)
} }
model.SortFiles(result, account)
return nil, result, nil return nil, result, nil
} }
f, err := os.Stat(fullPath) f, err := os.Stat(fullPath)

View File

@ -1,6 +1,10 @@
package model package model
import "time" import (
"sort"
"strings"
"time"
)
type File struct { type File struct {
Name string `json:"name"` Name string `json:"name"`
@ -10,4 +14,35 @@ type File struct {
UpdatedAt *time.Time `json:"updated_at"` UpdatedAt *time.Time `json:"updated_at"`
Thumbnail string `json:"thumbnail"` Thumbnail string `json:"thumbnail"`
Url string `json:"url"` Url string `json:"url"`
} }
func SortFiles(files []File, account *Account) {
if account.OrderBy == "" {
return
}
sort.Slice(files, func(i, j int) bool {
switch account.OrderBy {
case "name":
{
c := strings.Compare(files[i].Name, files[j].Name)
if account.OrderDirection == "DESC" {
return c >= 0
}
return c <= 0
}
case "size":
{
if account.OrderDirection == "DESC" {
return files[i].Size >= files[j].Size
}
return files[i].Size <= files[j].Size
}
case "updated_at":
if account.OrderDirection == "DESC" {
return files[i].UpdatedAt.After(*files[j].UpdatedAt)
}
return files[i].UpdatedAt.Before(*files[j].UpdatedAt)
}
return false
})
}