mirror of
https://github.com/rclone/rclone.git
synced 2025-07-01 04:50:12 +02:00
lsf: add 'e' format to show encrypted names and 'o' for original IDs
This brings it up to par with lsjson. This commit also reworks the framework to use ListJSON internally which removes duplicated code and makes testing easier.
This commit is contained in:
@ -1479,8 +1479,7 @@ type ListFormat struct {
|
||||
separator string
|
||||
dirSlash bool
|
||||
absolute bool
|
||||
output []func() string
|
||||
entry fs.DirEntry
|
||||
output []func(entry *ListJSONItem) string
|
||||
csv *csv.Writer
|
||||
buf bytes.Buffer
|
||||
}
|
||||
@ -1516,76 +1515,91 @@ func (l *ListFormat) SetCSV(useCSV bool) {
|
||||
}
|
||||
|
||||
// SetOutput sets functions used to create files information
|
||||
func (l *ListFormat) SetOutput(output []func() string) {
|
||||
func (l *ListFormat) SetOutput(output []func(entry *ListJSONItem) string) {
|
||||
l.output = output
|
||||
}
|
||||
|
||||
// AddModTime adds file's Mod Time to output
|
||||
func (l *ListFormat) AddModTime() {
|
||||
l.AppendOutput(func() string { return l.entry.ModTime().Local().Format("2006-01-02 15:04:05") })
|
||||
l.AppendOutput(func(entry *ListJSONItem) string {
|
||||
return entry.ModTime.When.Local().Format("2006-01-02 15:04:05")
|
||||
})
|
||||
}
|
||||
|
||||
// AddSize adds file's size to output
|
||||
func (l *ListFormat) AddSize() {
|
||||
l.AppendOutput(func() string {
|
||||
return strconv.FormatInt(l.entry.Size(), 10)
|
||||
l.AppendOutput(func(entry *ListJSONItem) string {
|
||||
return strconv.FormatInt(entry.Size, 10)
|
||||
})
|
||||
}
|
||||
|
||||
// normalisePath makes sure the path has the correct slashes for the current mode
|
||||
func (l *ListFormat) normalisePath(entry *ListJSONItem, remote string) string {
|
||||
if l.absolute && !strings.HasPrefix(remote, "/") {
|
||||
remote = "/" + remote
|
||||
}
|
||||
if entry.IsDir && l.dirSlash {
|
||||
remote += "/"
|
||||
}
|
||||
return remote
|
||||
}
|
||||
|
||||
// AddPath adds path to file to output
|
||||
func (l *ListFormat) AddPath() {
|
||||
l.AppendOutput(func() string {
|
||||
remote := l.entry.Remote()
|
||||
if l.absolute && !strings.HasPrefix(remote, "/") {
|
||||
remote = "/" + remote
|
||||
}
|
||||
_, isDir := l.entry.(fs.Directory)
|
||||
if isDir && l.dirSlash {
|
||||
remote += "/"
|
||||
}
|
||||
return remote
|
||||
l.AppendOutput(func(entry *ListJSONItem) string {
|
||||
return l.normalisePath(entry, entry.Path)
|
||||
})
|
||||
}
|
||||
|
||||
// AddEncrypted adds the encrypted path to file to output
|
||||
func (l *ListFormat) AddEncrypted() {
|
||||
l.AppendOutput(func(entry *ListJSONItem) string {
|
||||
return l.normalisePath(entry, entry.Encrypted)
|
||||
})
|
||||
}
|
||||
|
||||
// AddHash adds the hash of the type given to the output
|
||||
func (l *ListFormat) AddHash(ht hash.Type) {
|
||||
l.AppendOutput(func() string {
|
||||
o, ok := l.entry.(fs.Object)
|
||||
if !ok {
|
||||
hashName := ht.String()
|
||||
l.AppendOutput(func(entry *ListJSONItem) string {
|
||||
if entry.IsDir {
|
||||
return ""
|
||||
}
|
||||
return hashSum(ht, o)
|
||||
return entry.Hashes[hashName]
|
||||
})
|
||||
}
|
||||
|
||||
// AddID adds file's ID to the output if known
|
||||
func (l *ListFormat) AddID() {
|
||||
l.AppendOutput(func() string {
|
||||
if do, ok := l.entry.(fs.IDer); ok {
|
||||
return do.ID()
|
||||
}
|
||||
return ""
|
||||
l.AppendOutput(func(entry *ListJSONItem) string {
|
||||
return entry.ID
|
||||
})
|
||||
}
|
||||
|
||||
// AddOrigID adds file's Original ID to the output if known
|
||||
func (l *ListFormat) AddOrigID() {
|
||||
l.AppendOutput(func(entry *ListJSONItem) string {
|
||||
return entry.OrigID
|
||||
})
|
||||
}
|
||||
|
||||
// AddMimeType adds file's MimeType to the output if known
|
||||
func (l *ListFormat) AddMimeType() {
|
||||
l.AppendOutput(func() string {
|
||||
return fs.MimeTypeDirEntry(l.entry)
|
||||
l.AppendOutput(func(entry *ListJSONItem) string {
|
||||
return entry.MimeType
|
||||
})
|
||||
}
|
||||
|
||||
// AppendOutput adds string generated by specific function to printed output
|
||||
func (l *ListFormat) AppendOutput(functionToAppend func() string) {
|
||||
func (l *ListFormat) AppendOutput(functionToAppend func(item *ListJSONItem) string) {
|
||||
l.output = append(l.output, functionToAppend)
|
||||
}
|
||||
|
||||
// Format prints information about the DirEntry in the format defined
|
||||
func (l *ListFormat) Format(entry fs.DirEntry) (result string) {
|
||||
l.entry = entry
|
||||
func (l *ListFormat) Format(entry *ListJSONItem) (result string) {
|
||||
var out []string
|
||||
for _, fun := range l.output {
|
||||
out = append(out, fun())
|
||||
out = append(out, fun(entry))
|
||||
}
|
||||
if l.csv != nil {
|
||||
l.buf.Reset()
|
||||
|
Reference in New Issue
Block a user