meta.go 925 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package common
  2. import (
  3. "path"
  4. "strings"
  5. )
  6. type filenameMeta struct {
  7. artists []string
  8. title string
  9. album string
  10. }
  11. func (f *filenameMeta) GetArtists() []string {
  12. return f.artists
  13. }
  14. func (f *filenameMeta) GetTitle() string {
  15. return f.title
  16. }
  17. func (f *filenameMeta) GetAlbum() string {
  18. return f.album
  19. }
  20. func ParseFilenameMeta(filename string) (meta AudioMeta) {
  21. partName := strings.TrimSuffix(filename, path.Ext(filename))
  22. items := strings.Split(partName, "-")
  23. ret := &filenameMeta{}
  24. switch len(items) {
  25. case 0:
  26. // no-op
  27. case 1:
  28. ret.title = strings.TrimSpace(items[0])
  29. default:
  30. ret.title = strings.TrimSpace(items[len(items)-1])
  31. for _, v := range items[:len(items)-1] {
  32. artists := strings.FieldsFunc(v, func(r rune) bool {
  33. return r == ',' || r == '_'
  34. })
  35. for _, artist := range artists {
  36. ret.artists = append(ret.artists, strings.TrimSpace(artist))
  37. }
  38. }
  39. }
  40. return ret
  41. }