mirror of
https://github.com/gabehf/music-importer.git
synced 2026-04-22 11:31:52 -07:00
better artist rg -> release picking
This commit is contained in:
parent
eca7f4ba31
commit
a937f4a38e
1 changed files with 23 additions and 9 deletions
32
discover.go
32
discover.go
|
|
@ -91,9 +91,9 @@ func searchMBArtists(query string) ([]mbArtist, error) {
|
||||||
func releaseFormatScore(r mbRelease) int {
|
func releaseFormatScore(r mbRelease) int {
|
||||||
for _, m := range r.Media {
|
for _, m := range r.Media {
|
||||||
switch m.Format {
|
switch m.Format {
|
||||||
case "CD":
|
|
||||||
return 2
|
|
||||||
case "Digital Media":
|
case "Digital Media":
|
||||||
|
return 2
|
||||||
|
case "CD":
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -104,16 +104,28 @@ func releaseFormatScore(r mbRelease) int {
|
||||||
// Higher is better. KR=3, JP=2, XW=1, anything else=0.
|
// Higher is better. KR=3, JP=2, XW=1, anything else=0.
|
||||||
func releaseCountryScore(r mbRelease) int {
|
func releaseCountryScore(r mbRelease) int {
|
||||||
switch r.Country {
|
switch r.Country {
|
||||||
case "KR":
|
|
||||||
return 3
|
|
||||||
case "JP":
|
|
||||||
return 2
|
|
||||||
case "XW":
|
case "XW":
|
||||||
|
return 2
|
||||||
|
case "KR":
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// returns true if strings formatted 'YYYY-MM-DD" ts1 is before ts2
|
||||||
|
func timeStringIsBefore(ts1, ts2 string) (bool, error) {
|
||||||
|
datefmt := "2006-02-01"
|
||||||
|
t1, err := time.Parse(datefmt, ts1)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
t2, err := time.Parse(datefmt, ts2)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
return t1.Unix() <= t2.Unix(), nil
|
||||||
|
}
|
||||||
|
|
||||||
// pickBestRelease selects the preferred release from a list.
|
// pickBestRelease selects the preferred release from a list.
|
||||||
// Format (CD > Digital Media > *) is the primary sort key;
|
// Format (CD > Digital Media > *) is the primary sort key;
|
||||||
// country (KR > JP > XW > *) breaks ties.
|
// country (KR > JP > XW > *) breaks ties.
|
||||||
|
|
@ -124,9 +136,11 @@ func pickBestRelease(releases []mbRelease) *mbRelease {
|
||||||
best := &releases[0]
|
best := &releases[0]
|
||||||
for i := 1; i < len(releases); i++ {
|
for i := 1; i < len(releases); i++ {
|
||||||
r := &releases[i]
|
r := &releases[i]
|
||||||
rf, bf := releaseFormatScore(*r), releaseFormatScore(*best)
|
if before, err := timeStringIsBefore(r.Date, best.Date); before && err == nil {
|
||||||
if rf > bf || (rf == bf && releaseCountryScore(*r) > releaseCountryScore(*best)) {
|
rf, bf := releaseFormatScore(*r), releaseFormatScore(*best)
|
||||||
best = r
|
if rf > bf || (rf == bf && releaseCountryScore(*r) > releaseCountryScore(*best)) {
|
||||||
|
best = r
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return best
|
return best
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue