gui refactor

This commit is contained in:
aynakeya
2025-10-06 23:52:10 +08:00
parent 7c3f8587f6
commit 5c508b9664
61 changed files with 1448 additions and 618 deletions

View File

@@ -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,
})

View File

@@ -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)

View File

@@ -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()
}

View File

@@ -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(

View File

@@ -37,6 +37,7 @@ func Initialize() {
loadMediaProvider()
handleSearch()
handleInfo()
createLyricLoader()
_ = global.EventBus.Publish(

39
internal/source/info.go Normal file
View 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)
}
}

View File

@@ -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,
})
})

View File

@@ -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()
}
}