79 lines
1.5 KiB
Go
79 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/dhowden/tag"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
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 generateUUIDFromString(input string) uuid.UUID {
|
|
namespace := uuid.NameSpaceDNS // Namespace fisso per consistenza
|
|
return uuid.NewSHA1(namespace, []byte(input))
|
|
}
|
|
|
|
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
|
|
}
|