package main import ( "errors" "net/url" "sort" "strings" ) func (file *TreeFile) CategoriesAsUrl() string { escapedCategories := []string{} for _, c := range file.Category { escapedCategories = append(escapedCategories, url.QueryEscape(c)) } return strings.Join(escapedCategories, "/") } func (file *TreeFile) GmiName() string { return strings.Replace(file.Name, ".md", ".gmi", 1) } func (tree *Tree) GetIndexFile() (*TreeFile, error) { for _, file := range tree.RootFiles { if file.Name == "index.md" { return file, nil } } return nil, errors.New("index file not found") } func (tree *Tree) HasIndexFile() bool { _, err := tree.GetIndexFile() if err != nil { return false } return true } func GetLastFiles(files []*TreeFile) []*TreeFile { sortingFiles := make(map[string]*TreeFile) for _, f := range files { sortingFiles[f.Created+f.Id] = f } keys := make([]string, 0, len(sortingFiles)) for k := range sortingFiles { keys = append(keys, k) } sort.Strings(keys) sort.Reverse(sort.StringSlice(keys)) length := 10 if len(keys) < 10 { length = len(keys) } lastFiles := make([]*TreeFile, 0, length) for i, k := range keys { if i == length { break } lastFiles = append(lastFiles, sortingFiles[k]) } return lastFiles }