Files
AynaLivePlayer/controller/provider.go

78 lines
1.9 KiB
Go

package controller
import (
"AynaLivePlayer/config"
"AynaLivePlayer/player"
"AynaLivePlayer/provider"
)
func PrepareMedia(media *player.Media) error {
var err error
if media.Title == "" || media.Cover == "" {
l().Trace("fetching media info")
if err = provider.UpdateMedia(media); err != nil {
l().Warn("fail to prepare media when fetch info", err)
}
}
if media.Url == "" {
l().Trace("fetching media url")
if err = provider.UpdateMediaUrl(media); err != nil {
l().Warn("fail to prepare media when url", err)
}
}
if media.Lyric == "" {
l().Trace("fetching media lyric")
if err = provider.UpdateMediaLyric(media); err != nil {
l().Warn("fail to prepare media when lyric", err)
}
}
return err
}
func Search(keyword string) ([]*player.Media, error) {
l().Infof("Search for %s", keyword)
for _, p := range config.Provider.Priority {
if pr, ok := provider.Providers[p]; ok {
r, err := pr.Search(keyword)
if err != nil {
l().Warn("Provider %s return err", err)
continue
}
return r, err
} else {
l().Warnf("Provider %s not exist", p)
}
}
return nil, provider.ErrorNoSuchProvider
}
func SearchWithProvider(keyword string, p string) ([]*player.Media, error) {
l().Infof("Search for %s using %s", keyword, p)
if pr, ok := provider.Providers[p]; ok {
r, err := pr.Search(keyword)
return r, err
}
l().Warnf("Provider %s not exist", p)
return nil, provider.ErrorNoSuchProvider
}
func ApplyUser(medias []*player.Media, user interface{}) {
for _, m := range medias {
m.User = user
}
}
func PreparePlaylist(playlist *player.Playlist) error {
l().Debug("Prepare playlist ", playlist.Meta.(provider.Meta))
medias, err := provider.GetPlaylist(playlist.Meta.(provider.Meta))
if err != nil {
l().Warn("prepare playlist failed ", err)
return err
}
ApplyUser(medias, player.SystemUser)
playlist.Replace(medias)
return nil
}