U-pod/pod.go

73 lines
1.3 KiB
Go

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
}