Commit hoarding is a problem
This commit is contained in:
74
pkg/track.go
Normal file
74
pkg/track.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package gomus
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/faiface/beep"
|
||||
bflac "github.com/faiface/beep/flac"
|
||||
"github.com/mewkiz/flac"
|
||||
"github.com/mewkiz/flac/meta"
|
||||
)
|
||||
|
||||
type track struct {
|
||||
Title string
|
||||
Album string
|
||||
Artist string
|
||||
TrackPath string
|
||||
TrackTotal uint8
|
||||
TrackNumber uint8
|
||||
}
|
||||
|
||||
func (t track) FilterValue() string { return "" }
|
||||
func (t track) fullName() string { return fmt.Sprintf("%s - %s", t.Artist, t.Title) }
|
||||
|
||||
func (t track) GetStream() (beep.StreamSeekCloser, beep.Format, error) {
|
||||
f, err := os.Open(t.TrackPath)
|
||||
check(err)
|
||||
|
||||
if strings.HasSuffix(t.TrackPath, ".flac") {
|
||||
streamer, format, err := bflac.Decode(f)
|
||||
check(err)
|
||||
return streamer, format, nil
|
||||
}
|
||||
|
||||
return nil, beep.Format{}, fmt.Errorf("Could not parse track")
|
||||
}
|
||||
|
||||
func TrackFromFlac(path string) track {
|
||||
path, err := filepath.Abs(path)
|
||||
check(err)
|
||||
|
||||
s, err := flac.ParseFile(path)
|
||||
check(err)
|
||||
|
||||
t := track{TrackPath: path}
|
||||
for _, block := range s.Blocks {
|
||||
if block.Header.Type == meta.TypeVorbisComment {
|
||||
c := block.Body.(*meta.VorbisComment)
|
||||
for _, tagTuple := range c.Tags {
|
||||
tag, val := tagTuple[0], tagTuple[1]
|
||||
switch tag {
|
||||
case "TITLE":
|
||||
t.Title = val
|
||||
case "ARTIST":
|
||||
t.Artist = val
|
||||
case "ALBUM":
|
||||
t.Album = val
|
||||
case "TRACKNUMBER":
|
||||
trackNum, err := strconv.ParseUint(val, 10, 8)
|
||||
check(err)
|
||||
t.TrackNumber = uint8(trackNum)
|
||||
case "TRACKTOTAL":
|
||||
trackTotal, err := strconv.ParseUint(val, 10, 8)
|
||||
check(err)
|
||||
t.TrackTotal = uint8(trackTotal)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return t
|
||||
}
|
||||
Reference in New Issue
Block a user