package listing import ( "net/url" "os" ) // FromDirEntries converts os.DirEntry slice to []FileInfo. // baseURL is the URL prefix for this directory (must end with "/"). // Hidden files (starting with ".") are excluded. func FromDirEntries(entries []os.DirEntry, baseURL string) ([]FileInfo, error) { var result []FileInfo for _, entry := range entries { name := entry.Name() // Skip hidden files and dotfiles if len(name) == 0 || name[0] == '.' { continue } info, err := entry.Info() if err != nil { continue } isDir := entry.IsDir() entryName := name entryURL := baseURL + url.PathEscape(name) if isDir { entryName = name + "/" entryURL = baseURL + url.PathEscape(name) + "/" } fi := FileInfo{ Name: entryName, Size: info.Size(), URL: entryURL, ModTime: info.ModTime(), Mode: uint32(info.Mode()), IsDir: isDir, IsSymlink: false, } result = append(result, fi) } return result, nil }