mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-14 05:58:17 +08:00
ui界面优化,event handler优化-新增任务池模式,歌词加载优化,新房间管理(可以自动连接) 本地音频搜索算法优化,
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"AynaLivePlayer/model"
|
||||
"AynaLivePlayer/player"
|
||||
"AynaLivePlayer/repo/provider"
|
||||
"errors"
|
||||
)
|
||||
|
||||
type PlayController struct {
|
||||
@@ -122,29 +123,33 @@ func (pc *PlayController) PlayNext() {
|
||||
media = pc.playlist.GetDefault().Next().Copy()
|
||||
media.User = controller.PlaylistUser
|
||||
}
|
||||
pc.Play(media)
|
||||
_ = pc.Play(media)
|
||||
}
|
||||
|
||||
func (pc *PlayController) Play(media *model.Media) {
|
||||
func (pc *PlayController) Play(media *model.Media) error {
|
||||
lg.Infof("[PlayController] prepare media %s", media.Title)
|
||||
err := pc.provider.PrepareMedia(media)
|
||||
if err != nil {
|
||||
lg.Warn("[PlayController] prepare media failed. try play next")
|
||||
pc.PlayNext()
|
||||
return
|
||||
lg.Warn("[PlayController] prepare media failed, try play next")
|
||||
//pc.PlayNext()
|
||||
return errors.New("prepare media failed")
|
||||
}
|
||||
pc.eventManager.CallA(model.EventPlay, model.PlayEvent{
|
||||
Media: media,
|
||||
})
|
||||
pc.playing = media
|
||||
pc.playlist.AddToHistory(media)
|
||||
if err := pc.player.Play(media); err != nil {
|
||||
lg.Warn("[PlayController] play failed", err)
|
||||
return
|
||||
return errors.New("player play failed")
|
||||
}
|
||||
pc.eventManager.CallA(model.EventPlay, model.PlayEvent{
|
||||
pc.eventManager.CallA(model.EventPlayed, model.PlayEvent{
|
||||
Media: media,
|
||||
})
|
||||
pc.lyric.Reload(media.Lyric)
|
||||
// reset
|
||||
media.Url = ""
|
||||
return nil
|
||||
}
|
||||
|
||||
func (pc *PlayController) Add(keyword string, user interface{}) {
|
||||
@@ -178,6 +183,7 @@ func (pc *PlayController) AddWithProvider(keyword string, pname string, user int
|
||||
lg.Infof("[PlayController] search for %s, got no result", keyword)
|
||||
return
|
||||
}
|
||||
|
||||
media = medias[0]
|
||||
}
|
||||
media.User = user
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"AynaLivePlayer/config"
|
||||
"AynaLivePlayer/controller"
|
||||
"AynaLivePlayer/model"
|
||||
provider2 "AynaLivePlayer/repo/provider"
|
||||
"AynaLivePlayer/repo/provider"
|
||||
)
|
||||
|
||||
type ProviderController struct {
|
||||
@@ -23,7 +23,7 @@ func NewProviderController() controller.IProviderController {
|
||||
LocalDir: "./music",
|
||||
}
|
||||
config.LoadConfig(p)
|
||||
provider2.NewLocal(p.LocalDir)
|
||||
provider.NewLocal(p.LocalDir)
|
||||
return p
|
||||
}
|
||||
|
||||
@@ -35,21 +35,21 @@ func (pc *ProviderController) PrepareMedia(media *model.Media) error {
|
||||
var err error
|
||||
if media.Title == "" || !media.Cover.Exists() {
|
||||
lg.Trace("fetching media info")
|
||||
if err = provider2.UpdateMedia(media); err != nil {
|
||||
if err = provider.UpdateMedia(media); err != nil {
|
||||
lg.Warn("fail to prepare media when fetch info", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
if media.Url == "" {
|
||||
lg.Trace("fetching media url")
|
||||
if err = provider2.UpdateMediaUrl(media); err != nil {
|
||||
if err = provider.UpdateMediaUrl(media); err != nil {
|
||||
lg.Warn("fail to prepare media when url", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
if media.Lyric == "" {
|
||||
lg.Trace("fetching media lyric")
|
||||
if err = provider2.UpdateMediaLyric(media); err != nil {
|
||||
if err = provider.UpdateMediaLyric(media); err != nil {
|
||||
lg.Warn("fail to prepare media when lyric", err)
|
||||
}
|
||||
}
|
||||
@@ -59,12 +59,12 @@ func (pc *ProviderController) PrepareMedia(media *model.Media) error {
|
||||
func (pc *ProviderController) MediaMatch(keyword string) *model.Media {
|
||||
lg.Infof("Match media for %s", keyword)
|
||||
for _, p := range pc.Priority {
|
||||
if pr, ok := provider2.Providers[p]; ok {
|
||||
if pr, ok := provider.Providers[p]; ok {
|
||||
m := pr.MatchMedia(keyword)
|
||||
if m == nil {
|
||||
continue
|
||||
}
|
||||
if err := provider2.UpdateMedia(m); err == nil {
|
||||
if err := provider.UpdateMedia(m); err == nil {
|
||||
return m
|
||||
}
|
||||
} else {
|
||||
@@ -77,7 +77,7 @@ func (pc *ProviderController) MediaMatch(keyword string) *model.Media {
|
||||
func (pc *ProviderController) Search(keyword string) ([]*model.Media, error) {
|
||||
lg.Infof("Search for %s", keyword)
|
||||
for _, p := range pc.Priority {
|
||||
if pr, ok := provider2.Providers[p]; ok {
|
||||
if pr, ok := provider.Providers[p]; ok {
|
||||
r, err := pr.Search(keyword)
|
||||
if err != nil {
|
||||
lg.Warn("Provider %s return err", err)
|
||||
@@ -88,22 +88,22 @@ func (pc *ProviderController) Search(keyword string) ([]*model.Media, error) {
|
||||
lg.Warnf("Provider %s not exist", p)
|
||||
}
|
||||
}
|
||||
return nil, provider2.ErrorNoSuchProvider
|
||||
return nil, provider.ErrorNoSuchProvider
|
||||
}
|
||||
|
||||
func (pc *ProviderController) SearchWithProvider(keyword string, p string) ([]*model.Media, error) {
|
||||
lg.Infof("Search for %s using %s", keyword, p)
|
||||
if pr, ok := provider2.Providers[p]; ok {
|
||||
if pr, ok := provider.Providers[p]; ok {
|
||||
r, err := pr.Search(keyword)
|
||||
return r, err
|
||||
}
|
||||
lg.Warnf("Provider %s not exist", p)
|
||||
return nil, provider2.ErrorNoSuchProvider
|
||||
return nil, provider.ErrorNoSuchProvider
|
||||
}
|
||||
|
||||
func (pc *ProviderController) PreparePlaylist(playlist controller.IPlaylist) error {
|
||||
lg.Debug("Prepare playlist ", playlist.Name())
|
||||
medias, err := provider2.GetPlaylist(&playlist.Model().Meta)
|
||||
medias, err := provider.GetPlaylist(&playlist.Model().Meta)
|
||||
if err != nil {
|
||||
lg.Warn("prepare playlist failed ", err)
|
||||
return err
|
||||
|
||||
@@ -11,7 +11,7 @@ type IPlayController interface {
|
||||
GetPlaying() *model.Media
|
||||
GetPlayer() player.IPlayer
|
||||
PlayNext()
|
||||
Play(media *model.Media)
|
||||
Play(media *model.Media) error
|
||||
Add(keyword string, user interface{})
|
||||
AddWithProvider(keyword string, provider string, user interface{})
|
||||
Seek(position float64, absolute bool)
|
||||
|
||||
Reference in New Issue
Block a user