Added arn to the main repository
This commit is contained in:
66
arn/search/AMVs.go
Normal file
66
arn/search/AMVs.go
Normal file
@ -0,0 +1,66 @@
|
||||
package search
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/animenotifier/notify.moe/arn"
|
||||
"github.com/animenotifier/notify.moe/arn/stringutils"
|
||||
)
|
||||
|
||||
// AMVs searches all anime music videos.
|
||||
func AMVs(originalTerm string, maxLength int) []*arn.AMV {
|
||||
term := strings.ToLower(stringutils.RemoveSpecialCharacters(originalTerm))
|
||||
results := make([]*Result, 0, maxLength)
|
||||
|
||||
for amv := range arn.StreamAMVs() {
|
||||
if amv.ID == originalTerm {
|
||||
return []*arn.AMV{amv}
|
||||
}
|
||||
|
||||
if amv.IsDraft {
|
||||
continue
|
||||
}
|
||||
|
||||
text := strings.ToLower(amv.Title.Canonical)
|
||||
similarity := stringutils.AdvancedStringSimilarity(term, text)
|
||||
|
||||
if similarity >= MinimumStringSimilarity {
|
||||
results = append(results, &Result{
|
||||
obj: amv,
|
||||
similarity: similarity,
|
||||
})
|
||||
continue
|
||||
}
|
||||
|
||||
text = strings.ToLower(amv.Title.Native)
|
||||
similarity = stringutils.AdvancedStringSimilarity(term, text)
|
||||
|
||||
if similarity >= MinimumStringSimilarity {
|
||||
results = append(results, &Result{
|
||||
obj: amv,
|
||||
similarity: similarity,
|
||||
})
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
// Sort
|
||||
sort.Slice(results, func(i, j int) bool {
|
||||
return results[i].similarity > results[j].similarity
|
||||
})
|
||||
|
||||
// Limit
|
||||
if len(results) >= maxLength {
|
||||
results = results[:maxLength]
|
||||
}
|
||||
|
||||
// Final list
|
||||
final := make([]*arn.AMV, len(results))
|
||||
|
||||
for i, result := range results {
|
||||
final[i] = result.obj.(*arn.AMV)
|
||||
}
|
||||
|
||||
return final
|
||||
}
|
Reference in New Issue
Block a user