mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2026-05-19 09:15:47 +08:00
gui refactor
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
||||
liveroomsdk "github.com/AynaLivePlayer/liveroom-sdk"
|
||||
"github.com/AynaLivePlayer/liveroom-sdk/provider/openblive"
|
||||
"github.com/AynaLivePlayer/liveroom-sdk/provider/webdm"
|
||||
"sort"
|
||||
)
|
||||
|
||||
type liveroom struct {
|
||||
@@ -101,8 +102,8 @@ func addLiveRoom(roomModel model.LiveRoom) {
|
||||
|
||||
func registerHandlers() {
|
||||
global.EventBus.Subscribe("",
|
||||
events.LiveRoomAddCmd, "internal.liveroom.add", func(event *eventbus.Event) {
|
||||
data := event.Data.(events.LiveRoomAddCmdEvent)
|
||||
events.CmdLiveRoomAdd, "internal.liveroom.add", func(event *eventbus.Event) {
|
||||
data := event.Data.(events.CmdLiveRoomAddData)
|
||||
addLiveRoom(model.LiveRoom{
|
||||
LiveRoom: liveroomsdk.LiveRoom{
|
||||
Provider: data.Provider,
|
||||
@@ -117,8 +118,8 @@ func registerHandlers() {
|
||||
})
|
||||
|
||||
global.EventBus.Subscribe("",
|
||||
events.LiveRoomRemoveCmd, "internal.liveroom.remove", func(event *eventbus.Event) {
|
||||
data := event.Data.(events.LiveRoomRemoveCmdEvent)
|
||||
events.CmdLiveRoomRemove, "internal.liveroom.remove", func(event *eventbus.Event) {
|
||||
data := event.Data.(events.CmdLiveRoomRemoveData)
|
||||
room, ok := liveRooms[data.Identifier]
|
||||
if !ok {
|
||||
log.Errorf("remove room failed, room %s not found", data.Identifier)
|
||||
@@ -134,8 +135,8 @@ func registerHandlers() {
|
||||
})
|
||||
|
||||
global.EventBus.Subscribe("",
|
||||
events.LiveRoomConfigChangeCmd, "internal.liveroom.config.change", func(event *eventbus.Event) {
|
||||
data := event.Data.(events.LiveRoomConfigChangeCmdEvent)
|
||||
events.CmdLiveRoomConfigChange, "internal.liveroom.config.change", func(event *eventbus.Event) {
|
||||
data := event.Data.(events.CmdLiveRoomConfigChangeData)
|
||||
if room, ok := liveRooms[data.Identifier]; ok {
|
||||
room.model.Config = data.Config
|
||||
sendRoomStatusUpdateEvent(data.Identifier)
|
||||
@@ -143,8 +144,8 @@ func registerHandlers() {
|
||||
})
|
||||
|
||||
global.EventBus.Subscribe("",
|
||||
events.LiveRoomOperationCmd, "internal.liveroom.operation", func(event *eventbus.Event) {
|
||||
data := event.Data.(events.LiveRoomOperationCmdEvent)
|
||||
events.CmdLiveRoomOperation, "internal.liveroom.operation", func(event *eventbus.Event) {
|
||||
data := event.Data.(events.CmdLiveRoomOperationData)
|
||||
log.Infof("Live room operation SetConnect %v", data.SetConnect)
|
||||
room, ok := liveRooms[data.Identifier]
|
||||
if !ok {
|
||||
@@ -164,8 +165,8 @@ func registerHandlers() {
|
||||
Error: err,
|
||||
})
|
||||
}
|
||||
_ = global.EventBus.Publish(
|
||||
events.LiveRoomOperationFinish, events.LiveRoomOperationFinishEvent{})
|
||||
_ = global.EventBus.Reply(event,
|
||||
events.ReplyLiveRoomOperation, events.ReplyLiveRoomOperationData{})
|
||||
sendRoomStatusUpdateEvent(data.Identifier)
|
||||
})
|
||||
}
|
||||
@@ -178,8 +179,8 @@ func sendRoomStatusUpdateEvent(roomId string) {
|
||||
}
|
||||
log.Infof("send room status update event, room %s", roomId)
|
||||
_ = global.EventBus.Publish(
|
||||
events.LiveRoomStatusUpdate,
|
||||
events.LiveRoomStatusUpdateEvent{
|
||||
events.UpdateLiveRoomStatus,
|
||||
events.UpdateLiveRoomStatusData{
|
||||
Room: room.model,
|
||||
})
|
||||
}
|
||||
@@ -189,9 +190,12 @@ func sendRoomsUpdateEvent() {
|
||||
for _, r := range liveRooms {
|
||||
rooms = append(rooms, r.model)
|
||||
}
|
||||
sort.Slice(rooms, func(i, j int) bool {
|
||||
return rooms[i].LiveRoom.Identifier() < rooms[j].LiveRoom.Identifier()
|
||||
})
|
||||
_ = global.EventBus.Publish(
|
||||
events.LiveRoomRoomsUpdate,
|
||||
events.LiveRoomRoomsUpdateEvent{
|
||||
events.UpdateLiveRoomRooms,
|
||||
events.UpdateLiveRoomRoomsData{
|
||||
Rooms: rooms,
|
||||
})
|
||||
}
|
||||
@@ -218,8 +222,8 @@ func callEvents() {
|
||||
for _, r := range liveRooms {
|
||||
if r.model.Config.AutoConnect {
|
||||
_ = global.EventBus.Publish(
|
||||
events.LiveRoomOperationCmd,
|
||||
events.LiveRoomOperationCmdEvent{
|
||||
events.CmdLiveRoomOperation,
|
||||
events.CmdLiveRoomOperationData{
|
||||
Identifier: r.room.Config().Identifier(),
|
||||
SetConnect: true,
|
||||
})
|
||||
|
||||
@@ -199,16 +199,20 @@ func registerCmdHandler() {
|
||||
})
|
||||
mediaInfo := evnt.Data.(events.PlayerPlayCmdEvent).Media.Info
|
||||
media := evnt.Data.(events.PlayerPlayCmdEvent).Media
|
||||
if m, err := miaosic.GetMediaInfo(media.Info.Meta); err == nil {
|
||||
media.Info = m
|
||||
resp, err := global.EventBus.Call(events.CmdMiaosicGetMediaInfo, events.ReplyMiaosicGetMediaInfo,
|
||||
events.CmdMiaosicGetMediaInfoData{Meta: media.Info.Meta})
|
||||
if err == nil && resp.Data.(events.ReplyMiaosicGetMediaInfoData).Error == nil {
|
||||
media.Info = resp.Data.(events.ReplyMiaosicGetMediaInfoData).Info
|
||||
}
|
||||
_ = global.EventBus.Publish(events.PlayerPlayingUpdate, events.PlayerPlayingUpdateEvent{
|
||||
Media: media,
|
||||
Removed: false,
|
||||
})
|
||||
log.Infof("[MPV Player] Play media %s", mediaInfo.Title)
|
||||
mediaUrls, err := miaosic.GetMediaUrl(mediaInfo.Meta, miaosic.QualityAny)
|
||||
if err != nil || len(mediaUrls) == 0 {
|
||||
resp, err = global.EventBus.Call(events.CmdMiaosicGetMediaUrl, events.ReplyMiaosicGetMediaUrl,
|
||||
events.CmdMiaosicGetMediaUrlData{Meta: media.Info.Meta, Quality: miaosic.QualityAny})
|
||||
mediaUrls := resp.Data.(events.ReplyMiaosicGetMediaUrlData)
|
||||
if err != nil || mediaUrls.Error != nil || len(mediaUrls.Urls) == 0 {
|
||||
log.Warn("[MPV PlayControl] get media url failed ", mediaInfo.Meta.ID(), err)
|
||||
if err := libmpv.Command([]string{"stop"}); err != nil {
|
||||
log.Error("[MPV PlayControl] failed to stop", err)
|
||||
@@ -220,7 +224,7 @@ func registerCmdHandler() {
|
||||
})
|
||||
return
|
||||
}
|
||||
mediaUrl := mediaUrls[0]
|
||||
mediaUrl := mediaUrls.Urls[0]
|
||||
if val, ok := mediaUrl.Header["User-Agent"]; ok {
|
||||
log.Debug("[MPV PlayControl] set user-agent for mpv player")
|
||||
err := libmpv.SetPropertyString("user-agent", val)
|
||||
|
||||
@@ -5,13 +5,11 @@ import (
|
||||
"AynaLivePlayer/core/model"
|
||||
"AynaLivePlayer/global"
|
||||
"AynaLivePlayer/pkg/config"
|
||||
"AynaLivePlayer/pkg/eventbus"
|
||||
"AynaLivePlayer/pkg/logger"
|
||||
"github.com/AynaLivePlayer/miaosic"
|
||||
)
|
||||
|
||||
var PlayerPlaylist *playlist = nil
|
||||
var HistoryPlaylist *playlist = nil
|
||||
var SystemPlaylist *playlist = nil
|
||||
var PlaylistsPlaylist *playlist = nil
|
||||
|
||||
@@ -53,7 +51,6 @@ func Initialize() {
|
||||
log = global.Logger.WithPrefix("Playlists")
|
||||
PlayerPlaylist = newPlaylist(model.PlaylistIDPlayer)
|
||||
SystemPlaylist = newPlaylist(model.PlaylistIDSystem)
|
||||
HistoryPlaylist = newPlaylist(model.PlaylistIDHistory)
|
||||
config.LoadConfig(cfg)
|
||||
|
||||
_ = global.EventBus.Publish(events.PlaylistModeChangeCmd(model.PlaylistIDPlayer), events.PlaylistModeChangeCmdEvent{
|
||||
@@ -64,19 +61,6 @@ func Initialize() {
|
||||
Mode: cfg.SystemPlaylistMode,
|
||||
})
|
||||
|
||||
global.EventBus.Subscribe("",
|
||||
events.PlayerPlayingUpdate,
|
||||
"internal.playlist.player_playing_update",
|
||||
func(event *eventbus.Event) {
|
||||
if event.Data.(events.PlayerPlayingUpdateEvent).Removed {
|
||||
return
|
||||
}
|
||||
_ = global.EventBus.Publish(events.PlaylistInsertCmd(model.PlaylistIDHistory), events.PlaylistInsertCmdEvent{
|
||||
Media: event.Data.(events.PlayerPlayingUpdateEvent).Media,
|
||||
Position: -1,
|
||||
})
|
||||
})
|
||||
|
||||
createPlaylistManager()
|
||||
}
|
||||
|
||||
|
||||
@@ -95,6 +95,7 @@ func createPlaylistManager() {
|
||||
})
|
||||
return
|
||||
}
|
||||
// todo: use eventbus instead
|
||||
getPlaylist, err := miaosic.GetPlaylist(pl.Meta)
|
||||
if err != nil {
|
||||
_ = global.EventBus.Publish(
|
||||
@@ -156,6 +157,7 @@ func createPlaylistManager() {
|
||||
})
|
||||
return
|
||||
}
|
||||
// todo: use eventbus instead
|
||||
pl, err := miaosic.GetPlaylist(meta)
|
||||
if err != nil {
|
||||
_ = global.EventBus.Publish(
|
||||
|
||||
@@ -37,6 +37,7 @@ func Initialize() {
|
||||
|
||||
loadMediaProvider()
|
||||
handleSearch()
|
||||
handleInfo()
|
||||
createLyricLoader()
|
||||
|
||||
_ = global.EventBus.Publish(
|
||||
|
||||
39
internal/source/info.go
Normal file
39
internal/source/info.go
Normal file
@@ -0,0 +1,39 @@
|
||||
package source
|
||||
|
||||
import (
|
||||
"AynaLivePlayer/core/events"
|
||||
"AynaLivePlayer/global"
|
||||
"AynaLivePlayer/pkg/eventbus"
|
||||
"github.com/AynaLivePlayer/miaosic"
|
||||
)
|
||||
|
||||
func handleInfo() {
|
||||
err := global.EventBus.Subscribe("",
|
||||
events.CmdMiaosicGetMediaInfo, "internal.media_provider.getMediaInfo", func(event *eventbus.Event) {
|
||||
info, err := miaosic.GetMediaInfo(event.Data.(events.CmdMiaosicGetMediaInfoData).Meta)
|
||||
_ = global.EventBus.Reply(
|
||||
event, events.ReplyMiaosicGetMediaInfo,
|
||||
events.ReplyMiaosicGetMediaInfoData{
|
||||
Info: info,
|
||||
Error: err,
|
||||
},
|
||||
)
|
||||
})
|
||||
if err != nil {
|
||||
log.ErrorW("Subscribe search event failed", "error", err)
|
||||
}
|
||||
err = global.EventBus.Subscribe("",
|
||||
events.CmdMiaosicGetMediaUrl, "internal.media_provider.getMediaUrl", func(event *eventbus.Event) {
|
||||
urls, err := miaosic.GetMediaUrl(event.Data.(events.CmdMiaosicGetMediaUrlData).Meta, event.Data.(events.CmdMiaosicGetMediaUrlData).Quality)
|
||||
_ = global.EventBus.Reply(
|
||||
event, events.ReplyMiaosicGetMediaUrl,
|
||||
events.ReplyMiaosicGetMediaUrlData{
|
||||
Urls: urls,
|
||||
Error: err,
|
||||
},
|
||||
)
|
||||
})
|
||||
if err != nil {
|
||||
log.ErrorW("Subscribe search event failed", "error", err)
|
||||
}
|
||||
}
|
||||
@@ -10,8 +10,8 @@ import (
|
||||
|
||||
func handleSearch() {
|
||||
err := global.EventBus.Subscribe("",
|
||||
events.SearchCmd, "internal.media_provider.search_handler", func(event *eventbus.Event) {
|
||||
data := event.Data.(events.SearchCmdEvent)
|
||||
events.CmdMiaosicSearch, "internal.media_provider.search_handler", func(event *eventbus.Event) {
|
||||
data := event.Data.(events.CmdMiaosicSearchData)
|
||||
log.Infof("Search %s using %s", data.Keyword, data.Provider)
|
||||
searchResult, err := miaosic.SearchByProvider(data.Provider, data.Keyword, 1, 10)
|
||||
if err != nil {
|
||||
@@ -26,8 +26,8 @@ func handleSearch() {
|
||||
}
|
||||
}
|
||||
_ = global.EventBus.Reply(
|
||||
event, events.SearchResultUpdate,
|
||||
events.SearchResultUpdateEvent{
|
||||
event, events.ReplyMiaosicSearch,
|
||||
events.ReplyMiaosicSearchData{
|
||||
Medias: medias,
|
||||
})
|
||||
})
|
||||
|
||||
@@ -16,8 +16,10 @@ func loadMediaProvider() {
|
||||
kugou.UseInstrumental()
|
||||
miaosic.RegisterProvider(local.NewLocal(sourceCfg.LocalSourcePath))
|
||||
if sourceCfg.QQChannel == "wechat" {
|
||||
log.Info("qqmusic: using wechat login channel")
|
||||
qq.UseWechatLogin()
|
||||
} else {
|
||||
log.Infof("qqmusic: using qq login channel")
|
||||
qq.UseQQLogin()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user