star/gdu/tui/sort.go

106 lines
2.3 KiB
Go
Raw Normal View History

2025-04-26 19:33:14 +08:00
package tui
import (
"sort"
"b612.me/apps/b612/gdu/pkg/device"
"b612.me/apps/b612/gdu/pkg/fs"
)
const (
nameSortKey = "name"
sizeSortKey = "size"
itemCountSortKey = "itemCount"
mtimeSortKey = "mtime"
ascOrder = "asc"
descOrder = "desc"
)
// SetDefaultSorting sets the default sorting
func (ui *UI) SetDefaultSorting(by, order string) {
if by != "" {
ui.defaultSortBy = by
}
if order == ascOrder || order == descOrder {
ui.defaultSortOrder = order
}
}
func (ui *UI) setSorting(newOrder string) {
ui.markedRows = make(map[int]struct{})
if newOrder == ui.sortBy {
if ui.sortOrder == ascOrder {
ui.sortOrder = descOrder
} else {
ui.sortOrder = ascOrder
}
} else {
ui.sortBy = newOrder
ui.sortOrder = ascOrder
}
if ui.currentDir != nil {
ui.showDir()
} else if ui.devices != nil && (newOrder == sizeSortKey || newOrder == nameSortKey) {
ui.showDevices()
}
}
func (ui *UI) sortItems() {
if ui.sortBy == sizeSortKey {
if ui.ShowApparentSize {
if ui.sortOrder == descOrder {
sort.Sort(sort.Reverse(fs.ByApparentSize(ui.currentDir.GetFiles())))
} else {
sort.Sort(fs.ByApparentSize(ui.currentDir.GetFiles()))
}
} else {
if ui.sortOrder == descOrder {
sort.Sort(sort.Reverse(ui.currentDir.GetFiles()))
} else {
sort.Sort(ui.currentDir.GetFiles())
}
}
}
if ui.sortBy == itemCountSortKey {
if ui.sortOrder == descOrder {
sort.Sort(sort.Reverse(fs.ByItemCount(ui.currentDir.GetFiles())))
} else {
sort.Sort(fs.ByItemCount(ui.currentDir.GetFiles()))
}
}
if ui.sortBy == nameSortKey {
if ui.sortOrder == descOrder {
sort.Sort(sort.Reverse(fs.ByName(ui.currentDir.GetFiles())))
} else {
sort.Sort(fs.ByName(ui.currentDir.GetFiles()))
}
}
if ui.sortBy == mtimeSortKey {
if ui.sortOrder == descOrder {
sort.Sort(sort.Reverse(fs.ByMtime(ui.currentDir.GetFiles())))
} else {
sort.Sort(fs.ByMtime(ui.currentDir.GetFiles()))
}
}
}
func (ui *UI) sortDevices() {
if ui.sortBy == sizeSortKey {
if ui.sortOrder == descOrder {
sort.Sort(sort.Reverse(device.ByUsedSize(ui.devices)))
} else {
sort.Sort(device.ByUsedSize(ui.devices))
}
}
if ui.sortBy == nameSortKey {
if ui.sortOrder == descOrder {
sort.Sort(sort.Reverse(device.ByName(ui.devices)))
} else {
sort.Sort(device.ByName(ui.devices))
}
}
}