🚧 More of fingerprinting

This commit is contained in:
Dan Jones 2023-09-24 22:34:30 -05:00
commit c87dc5e04f
3 changed files with 89 additions and 6 deletions

View file

@ -2,16 +2,49 @@ 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("/home/drj/MyFiles/Videos/WebShows/YouTube/Dolly_Parton_-_Topic/Just_Because_I_m_a_Woman.Dolly_Parton_-_Topic.Fmv-XQerVkM.webm")
fp, err := media.Fingerprint(file.Format.Path)
if err != nil {
panic(err)
}
@ -19,17 +52,21 @@ func print() {
if err != nil {
panic(err)
}
var recs []brainz.Recording
var recs []list.Option
var rec brainz.Recording
i := 1
for _, res := range ids.Results {
for _, rec := range res.Recordings {
for _, rec = range res.Recordings {
err = brainz.FillRecording(&rec)
if err != nil {
panic(err)
}
recs = append(recs, rec)
recs = append(recs, recOpt{rec, i})
i = (i + 1) % 10
}
}
fmt.Printf("%+v\n", recs)
rec = list.List("Which recording is the correct one?", recs, nil).(recOpt).rec
fmt.Printf("%+v\n", rec.Title)
}

View file

@ -19,6 +19,45 @@ type Recording struct {
Video bool
Releases []Release
Genres []Genre
ArtistCredit []ArtistCredit `json:"artist-credit"`
}
func (r Recording) FirstArtist() Artist {
var a Artist
for _, ac := range r.ArtistCredit {
if ac.Artist.Name != "" {
return ac.Artist
}
}
for _, rel := range r.Releases {
for _, ac := range rel.ArtistCredit {
if ac.Artist.Name != "" {
return ac.Artist
}
}
}
if a.Name == "" {
a.Name = "Unknown Artist"
}
return a
}
func (r Recording) FirstGenre() Genre {
var g Genre
for _, g = range r.Genres {
if g.Name != "" {
return g
}
}
for _, rel := range r.Releases {
for _, g = range rel.Genres {
if g.Name != "" {
return g
}
}
}
return g
}
type Genre struct {

View file

@ -29,3 +29,10 @@ func HourMinSecToSeconds(time string) (float64, error) {
dur, _ := t.ParseDuration(f)
return dur.Seconds(), nil
}
func Tern[V any](choice bool, one, two V) V {
if choice {
return one
}
return two
}