🚧 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 ( | 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) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -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 { | ||||||
|  |  | ||||||
|  | @ -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 | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue