🚧 More of fingerprinting
This commit is contained in:
parent
4c5c46a5f2
commit
c87dc5e04f
3 changed files with 89 additions and 6 deletions
49
app/print.go
49
app/print.go
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue