fileserver: Add total file size to directory listing (#6003)

* browse: Add total file size to directory listing

* Apply suggestion to remove "in "

Co-authored-by: Matt Holt <mholt@users.noreply.github.com>

---------

Co-authored-by: Matt Holt <mholt@users.noreply.github.com>
This commit is contained in:
Steffen Busch 2023-12-30 19:47:13 +01:00 committed by GitHub
parent f976c84d9e
commit 8f9ffc587e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 0 deletions

View File

@ -790,6 +790,9 @@ footer {
<span class="meta-item"> <span class="meta-item">
<b>{{.NumFiles}}</b> file{{if ne 1 .NumFiles}}s{{end}} <b>{{.NumFiles}}</b> file{{if ne 1 .NumFiles}}s{{end}}
</span> </span>
<span class="meta-item">
<b>{{.HumanTotalFileSize}}</b> total
</span>
{{- if ne 0 .Limit}} {{- if ne 0 .Limit}}
<span class="meta-item"> <span class="meta-item">
(of which only <b>{{.Limit}}</b> are displayed) (of which only <b>{{.Limit}}</b> are displayed)

View File

@ -86,6 +86,10 @@ func (fsrv *FileServer) directoryListing(ctx context.Context, entries []fs.DirEn
// was already set above. // was already set above.
} }
if !isDir {
tplCtx.TotalFileSize += size
}
u := url.URL{Path: "./" + name} // prepend with "./" to fix paths with ':' in the name u := url.URL{Path: "./" + name} // prepend with "./" to fix paths with ':' in the name
tplCtx.Items = append(tplCtx.Items, fileInfo{ tplCtx.Items = append(tplCtx.Items, fileInfo{
@ -129,6 +133,9 @@ type browseTemplateContext struct {
// The number of files (items that aren't directories) in the listing. // The number of files (items that aren't directories) in the listing.
NumFiles int `json:"num_files"` NumFiles int `json:"num_files"`
// The total size of all files in the listing.
TotalFileSize int64 `json:"total_file_size"`
// Sort column used // Sort column used
Sort string `json:"sort,omitempty"` Sort string `json:"sort,omitempty"`
@ -252,6 +259,13 @@ func (fi fileInfo) HumanSize() string {
return humanize.IBytes(uint64(fi.Size)) return humanize.IBytes(uint64(fi.Size))
} }
// HumanTotalFileSize returns the total size of all files
// in the listing as a human-readable string in IEC format
// (i.e. power of 2 or base 1024).
func (btc browseTemplateContext) HumanTotalFileSize() string {
return humanize.IBytes(uint64(btc.TotalFileSize))
}
// HumanModTime returns the modified time of the file // HumanModTime returns the modified time of the file
// as a human-readable string given by format. // as a human-readable string given by format.
func (fi fileInfo) HumanModTime(format string) string { func (fi fileInfo) HumanModTime(format string) string {