diff --git a/config.go b/config.go index cdc7a17..a34598b 100644 --- a/config.go +++ b/config.go @@ -29,6 +29,7 @@ type Config struct { SCGIPaths map[string]string CertificateZones map[string][]string DirectorySort string + DirectoriesFirst bool DirectoryReverse bool DirectoryTitles bool } @@ -42,6 +43,7 @@ type MollyFile struct { DefaultLang string DefaultEncoding string DirectorySort string + DirectoriesFirst bool DirectoryReverse bool DirectoryTitles bool } @@ -67,6 +69,7 @@ func getConfig(filename string) (Config, error) { config.CGIPaths = make([]string, 0) config.SCGIPaths = make(map[string]string) config.DirectorySort = "Name" + config.DirectoriesFirst = false // Return defaults if no filename given if filename == "" { @@ -144,6 +147,7 @@ func parseMollyFiles(path string, config *Config, errorLog *log.Logger) { mollyFile.DefaultLang = config.DefaultLang mollyFile.DefaultEncoding = config.DefaultEncoding mollyFile.DirectorySort = config.DirectorySort + mollyFile.DirectoriesFirst = config.DirectoriesFirst mollyFile.DirectoryReverse = config.DirectoryReverse mollyFile.DirectoryTitles = config.DirectoryTitles // Build list of directories to check @@ -182,6 +186,7 @@ func parseMollyFiles(path string, config *Config, errorLog *log.Logger) { config.DefaultLang = mollyFile.DefaultLang config.DefaultEncoding = mollyFile.DefaultEncoding config.DirectorySort = mollyFile.DirectorySort + config.DirectoriesFirst = mollyFile.DirectoriesFirst config.DirectoryReverse = mollyFile.DirectoryReverse config.DirectoryTitles = mollyFile.DirectoryTitles for key, value := range mollyFile.TempRedirects { diff --git a/dirlist.go b/dirlist.go index eb9a870..82adf7d 100644 --- a/dirlist.go +++ b/dirlist.go @@ -42,10 +42,52 @@ func generateDirectoryListing(URL *url.URL, path string, config Config) (string, i, j = j, i } if config.DirectorySort == "Name" { + if config.DirectoriesFirst { + if files[i].IsDir() { + if files[j].IsDir() { + return files[i].Name() < files[j].Name() + } + return true + } + if files[j].IsDir() { + if files[i].IsDir() { + return files[i].Name() < files[j].Name() + } + return false + } + } return files[i].Name() < files[j].Name() } else if config.DirectorySort == "Size" { + if config.DirectoriesFirst { + if files[i].IsDir() { + if files[j].IsDir() { + return files[i].Size() < files[j].Size() + } + return true + } + if files[j].IsDir() { + if files[i].IsDir() { + return files[i].Size() < files[j].Size() + } + return false + } + } return files[i].Size() < files[j].Size() } else if config.DirectorySort == "Time" { + if config.DirectoriesFirst { + if files[i].IsDir() { + if files[j].IsDir() { + return files[i].ModTime().Before(files[j].ModTime()) + } + return true + } + if files[j].IsDir() { + if files[i].IsDir() { + return files[i].ModTime().Before(files[j].ModTime()) + } + return false + } + } return files[i].ModTime().Before(files[j].ModTime()) } return false // Should not happen diff --git a/example.conf b/example.conf index 6ccc3c5..d9de819 100644 --- a/example.conf +++ b/example.conf @@ -15,6 +15,7 @@ ## Directory listing # #DirectorySort = "Time" +#DirectoriesFirst = false #DirectoryReverse = true #DirectoryTitles = true #