strip-beats/app/print.go
2023-10-29 11:14:44 -05:00

83 lines
1.5 KiB
Go

package app
import (
"fmt"
"strconv"
"codeberg.org/danjones000/strip-beats/input/list"
"codeberg.org/danjones000/strip-beats/media"
"codeberg.org/danjones000/strip-beats/media/brainz"
"codeberg.org/danjones000/strip-beats/utils"
)
type recOpt struct {
rec brainz.Recording
num int
}
func (o recOpt) Title() string {
return o.rec.Title
}
func (o recOpt) Text() string {
return fmt.Sprintf(
"By %s - First Released %s - %s %s",
o.rec.FirstArtist().Name,
o.rec.FirstReleaseDate,
o.rec.FirstGenre().Name,
utils.Tern(o.rec.Video, "(Video)", ""))
}
func (o recOpt) Rune() rune {
s := strconv.Itoa(o.num)
for _, c := range s {
return c
}
return 0
}
func (o recOpt) Selected() func() {
return nil
}
func print() {
if file == nil {
PickFileWithConf()
}
fp, err := media.Fingerprint(file.Format.Path)
if err != nil {
panic(err)
}
ids, err := media.LookupFingerprint(fp)
if err != nil {
panic(err)
}
rec := chooseRec(ids)
fmt.Println(rec.Title)
tags.Title = rec.Title
tags.MusicbrainzRecordingId = rec.Id
tags.Date = rec.FirstReleaseDate
fmt.Printf("%+v\n", tags)
}
func chooseRec(ids media.IdResults) brainz.Recording {
var recs []list.Option
var rec brainz.Recording
var err error
i := 1
for _, res := range ids.Results {
for _, rec = range res.Recordings {
err = brainz.FillRecording(&rec)
if err != nil {
panic(err)
}
recs = append(recs, recOpt{rec, i})
i = (i + 1) % 10
}
}
return list.List("Which recording is the correct one?", recs, nil).(recOpt).rec
}