🚧 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 ( import (
"fmt" "fmt"
"strconv"
"codeberg.org/danjones000/strip-beats/input/list"
"codeberg.org/danjones000/strip-beats/media" "codeberg.org/danjones000/strip-beats/media"
"codeberg.org/danjones000/strip-beats/media/brainz" "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() { func print() {
if file == nil { if file == nil {
PickFileWithConf() 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 { if err != nil {
panic(err) panic(err)
} }
@ -19,17 +52,21 @@ func print() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
var recs []brainz.Recording var recs []list.Option
var rec brainz.Recording
i := 1
for _, res := range ids.Results { for _, res := range ids.Results {
for _, rec := range res.Recordings { for _, rec = range res.Recordings {
err = brainz.FillRecording(&rec) err = brainz.FillRecording(&rec)
if err != nil { if err != nil {
panic(err) 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 Video bool
Releases []Release Releases []Release
Genres []Genre 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 { type Genre struct {

View file

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