You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
925 B
Go
51 lines
925 B
Go
2 years ago
|
package common
|
||
|
|
||
|
import (
|
||
|
"path"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
type filenameMeta struct {
|
||
|
artists []string
|
||
|
title string
|
||
|
album string
|
||
|
}
|
||
|
|
||
|
func (f *filenameMeta) GetArtists() []string {
|
||
|
return f.artists
|
||
|
}
|
||
|
|
||
|
func (f *filenameMeta) GetTitle() string {
|
||
|
return f.title
|
||
|
}
|
||
|
|
||
|
func (f *filenameMeta) GetAlbum() string {
|
||
|
return f.album
|
||
|
}
|
||
|
|
||
|
func ParseFilenameMeta(filename string) (meta AudioMeta) {
|
||
|
partName := strings.TrimSuffix(filename, path.Ext(filename))
|
||
|
items := strings.Split(partName, "-")
|
||
|
ret := &filenameMeta{}
|
||
|
|
||
|
switch len(items) {
|
||
|
case 0:
|
||
|
// no-op
|
||
|
case 1:
|
||
|
ret.title = strings.TrimSpace(items[0])
|
||
|
default:
|
||
|
ret.title = strings.TrimSpace(items[len(items)-1])
|
||
|
|
||
|
for _, v := range items[:len(items)-1] {
|
||
|
artists := strings.FieldsFunc(v, func(r rune) bool {
|
||
|
return r == ',' || r == '_'
|
||
|
})
|
||
|
for _, artist := range artists {
|
||
|
ret.artists = append(ret.artists, strings.TrimSpace(artist))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ret
|
||
|
}
|