diff --git a/drivers/native.go b/drivers/native.go index a4633d52..73e88778 100644 --- a/drivers/native.go +++ b/drivers/native.go @@ -28,6 +28,20 @@ func (n Native) Items() []Item { Type: "string", 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 } -// TODO sort files func (n Native) Path(path string, account *model.Account) (*model.File, []model.File, error) { fullPath := filepath.Join(account.RootFolder, path) 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) } + model.SortFiles(result, account) return nil, result, nil } f, err := os.Stat(fullPath) diff --git a/model/file.go b/model/file.go index b8fd297a..647626db 100644 --- a/model/file.go +++ b/model/file.go @@ -1,6 +1,10 @@ package model -import "time" +import ( + "sort" + "strings" + "time" +) type File struct { Name string `json:"name"` @@ -10,4 +14,35 @@ type File struct { UpdatedAt *time.Time `json:"updated_at"` Thumbnail string `json:"thumbnail"` Url string `json:"url"` -} \ No newline at end of file +} + +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 + }) +}