package main import ( "log" "os" "path/filepath" "strings" "sync" "time" "github.com/dhowden/tag" ) type Episode struct { Title string File string Cover string PubDate string Description string Artist string Size int64 } var ( lastMod time.Time rssLock sync.Mutex ) func scanEpisodes() ([]Episode, error) { var episodes []Episode err := filepath.Walk(audioDir, func(path string, info os.FileInfo, err error) error { if err != nil || info.IsDir() || !strings.HasSuffix(strings.ToLower(path), ".mp3") { return nil } file, err := os.Open(path) if err != nil { return err } defer file.Close() meta, err := tag.ReadFrom(file) if err != nil { log.Printf("File %s senza metadati ID3: %v", path, err) return nil } // relPath, _ := filepath.Rel(".", path) baseName := strings.TrimSuffix(filepath.Base(path), filepath.Ext(path)) // coverPath := filepath.Join(coversDir, baseName+".jpg") ep := Episode{ Title: meta.Title(), Artist: meta.Artist(), Description: meta.Comment(), File: baseName + ".mp3", Cover: baseName + ".jpg", PubDate: info.ModTime().Format(time.RFC1123), Size: info.Size(), } if ep.Description == "" { ep.Description = ep.Title } episodes = append(episodes, ep) return nil }) return episodes, err }