navidrome/scanner/itunes_scanner.go

38 lines
917 B
Go
Raw Normal View History

package scanner
import (
"github.com/dhowden/itl"
"net/url"
"os"
"strings"
)
type ItunesScanner struct {}
func (s *ItunesScanner) LoadFolder(path string) []Track {
xml, _ := os.Open(path)
l, _ := itl.ReadFromXML(xml)
mediaFiles := make([]Track, len(l.Tracks))
i := 0
for id, t := range l.Tracks {
2016-02-28 15:44:32 +01:00
// TODO Decode XML entities (&)
if t.Location != "" && strings.Contains(t.Kind, "audio") {
mediaFiles[i].Id = id
mediaFiles[i].Album = t.Album
mediaFiles[i].Title = t.Name
mediaFiles[i].Artist = t.Artist
2016-02-27 09:35:01 +01:00
mediaFiles[i].AlbumArtist = t.AlbumArtist
mediaFiles[i].Compilation = t.Compilation
2016-02-28 19:50:05 +01:00
mediaFiles[i].Year = t.Year
path, _ = url.QueryUnescape(t.Location)
mediaFiles[i].Path = strings.TrimPrefix(path, "file://")
mediaFiles[i].CreatedAt = t.DateAdded
mediaFiles[i].UpdatedAt = t.DateModified
i++
}
}
return mediaFiles[0:i]
}
var _ Scanner = (*ItunesScanner)(nil)