X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=dirlist.go;h=0670692b02b77950578d33a37dbda6a51dfae01d;hb=HEAD;hp=c7c7e6ab3fd320f4063e911347570a3a186934d3;hpb=a65ca9f1e9917d3c8193297ce20b59352a009c55;p=godlighty.git diff --git a/dirlist.go b/dirlist.go index c7c7e6a..b0b2918 100644 --- a/dirlist.go +++ b/dirlist.go @@ -1,19 +1,17 @@ -/* -godlighty -- highly-customizable HTTP, HTTP/2, HTTPS server -Copyright (C) 2021 Sergey Matveev - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, version 3 of the License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ +// godlighty -- highly-customizable HTTP, HTTP/2, HTTPS server +// Copyright (C) 2021-2025 Sergey Matveev +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . package godlighty @@ -22,6 +20,7 @@ import ( "html/template" "io/fs" "os" + "path" "sort" "time" @@ -51,17 +50,18 @@ func (a ByName) Less(i, j int) bool { } type DirListFile struct { - Idx int - Name string + Name template.URL Size string - IsDir bool Type string ModTime string + Symlink string + Idx int + IsDir bool } func dirList( cfg *HostCfg, - dir string, + dir, pth string, entries []os.DirEntry, readme string, ) (*os.File, error) { @@ -74,14 +74,17 @@ func dirList( } file := DirListFile{ Idx: i, - Name: fi.Name(), + Name: template.URL(fi.Name()), Size: humanize.IBytes(uint64(fi.Size())), ModTime: fi.ModTime().UTC().Truncate(time.Second).Format(MTimeFmt), } if fi.IsDir() { file.IsDir = true } else { - file.Type = mediaType(file.Name, cfg.MIMEs) + file.Type = mediaType(fi.Name(), cfg.MIMEs) + } + if (entry.Type() & fs.ModeSymlink) > 0 { + file.Symlink, _ = os.Readlink(path.Join(pth, fi.Name())) } files = append(files, file) } @@ -98,13 +101,13 @@ func dirList( err = DirListTmpl.Execute(fd, struct { Root string Dir string - Files []DirListFile Readme string + Files []DirListFile }{ Root: root, Dir: dir, - Files: files, Readme: readme, + Files: files, }) if err != nil { fd.Close()