mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-15 22:48:16 +08:00
config panel, kuwo source, playlist operation, bug fix @6, panic handling
This commit is contained in:
@@ -19,15 +19,93 @@ func l() *logrus.Entry {
|
||||
return logger.Logger.WithField("Module", MODULE_CONTROLLER)
|
||||
}
|
||||
|
||||
func Initialize() {
|
||||
func PlayNext() {
|
||||
l().Info("try to play next possible media")
|
||||
if UserPlaylist.Size() == 0 && SystemPlaylist.Size() == 0 {
|
||||
return
|
||||
}
|
||||
var media *player.Media
|
||||
if UserPlaylist.Size() != 0 {
|
||||
media = UserPlaylist.Pop()
|
||||
} else if SystemPlaylist.Size() != 0 {
|
||||
media = SystemPlaylist.Next()
|
||||
}
|
||||
Play(media)
|
||||
}
|
||||
|
||||
AddCommand(CommandDiange)
|
||||
func Play(media *player.Media) {
|
||||
l().Info("prepare media")
|
||||
err := PrepareMedia(media)
|
||||
if err != nil {
|
||||
l().Warn("prepare media failed. try play next")
|
||||
PlayNext()
|
||||
return
|
||||
}
|
||||
CurrentMedia = media
|
||||
if err := MainPlayer.Play(media); err != nil {
|
||||
l().Warn("play failed", err)
|
||||
}
|
||||
CurrentLyric.Reload(media.Lyric)
|
||||
// reset
|
||||
media.Url = ""
|
||||
}
|
||||
|
||||
MainPlayer.ObserveProperty("idle-active", handleMpvIdlePlayNext)
|
||||
UserPlaylist.Handler.RegisterA(player.EventPlaylistInsert, "controller.playnextwhenadd", handlePlaylistAdd)
|
||||
MainPlayer.ObserveProperty("time-pos", handleLyricUpdate)
|
||||
func Add(keyword string, user interface{}) {
|
||||
medias, err := Search(keyword)
|
||||
if err != nil {
|
||||
l().Warnf("search for %s, got error %s", keyword, err)
|
||||
return
|
||||
}
|
||||
if len(medias) == 0 {
|
||||
l().Info("search for %s, got no result", keyword)
|
||||
return
|
||||
}
|
||||
media := medias[0]
|
||||
media.User = user
|
||||
l().Infof("add media %s (%s)", media.Title, media.Artist)
|
||||
UserPlaylist.Insert(-1, media)
|
||||
}
|
||||
|
||||
MainPlayer.Start()
|
||||
func AddWithProvider(keyword string, pname string, user interface{}) {
|
||||
medias, err := provider.Search(pname, keyword)
|
||||
if err != nil {
|
||||
l().Warnf("search for %s, got error %s", keyword, err)
|
||||
return
|
||||
}
|
||||
if len(medias) == 0 {
|
||||
l().Info("search for %s, got no result", keyword)
|
||||
}
|
||||
media := medias[0]
|
||||
media.User = user
|
||||
l().Info("add media %s (%s)", media.Title, media.Artist)
|
||||
UserPlaylist.Insert(-1, media)
|
||||
}
|
||||
|
||||
func Seek(position float64, absolute bool) {
|
||||
if err := MainPlayer.Seek(position, absolute); err != nil {
|
||||
l().Warnf("seek to position %f (%t) failed, %s", position, absolute, err)
|
||||
}
|
||||
}
|
||||
|
||||
func Toggle() (b bool) {
|
||||
var err error
|
||||
if MainPlayer.IsPaused() {
|
||||
err = MainPlayer.Unpause()
|
||||
b = false
|
||||
} else {
|
||||
err = MainPlayer.Pause()
|
||||
b = true
|
||||
}
|
||||
if err != nil {
|
||||
l().Warn("toggle failed", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func SetVolume(volume float64) {
|
||||
if MainPlayer.SetVolume(volume) != nil {
|
||||
l().Warnf("set mpv volume to %f failed", volume)
|
||||
}
|
||||
}
|
||||
|
||||
func Destroy() {
|
||||
@@ -51,6 +129,10 @@ func SetDanmuClient(roomId string) {
|
||||
Name: "controller.commandexecutor",
|
||||
Handler: danmuCommandHandler,
|
||||
})
|
||||
LiveClient.Handler().RegisterA(
|
||||
liveclient.EventMessageReceive,
|
||||
"controller.danmu.handler",
|
||||
danmuHandler)
|
||||
l().Infof("setting live client for %s success", roomId)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user