migrate to eventbus, add support to macos

This commit is contained in:
aynakeya
2025-10-02 21:57:22 +08:00
parent a81eb4a131
commit 918e2e81b3
49 changed files with 251 additions and 236 deletions

70
internal/source/lyric.go Normal file
View File

@@ -0,0 +1,70 @@
package source
import (
"AynaLivePlayer/core/events"
"AynaLivePlayer/global"
"AynaLivePlayer/pkg/eventbus"
"github.com/AynaLivePlayer/miaosic"
)
type lyricLoader struct {
Lyric miaosic.Lyrics
prev float64
prevIndex int
}
var lyricManager = &lyricLoader{}
func createLyricLoader() {
var err error
err = global.EventBus.Subscribe("", events.PlayerPlayingUpdate, "internal.lyric.update", func(event *eventbus.Event) {
data := event.Data.(events.PlayerPlayingUpdateEvent)
if data.Removed {
log.Debugf("current media removed, clear lyric")
lyricManager.Lyric = miaosic.ParseLyrics("", "")
return
}
log.Infof("update lyric for %s", data.Media.Info.Title)
lyric, err := miaosic.GetMediaLyric(data.Media.Info.Meta)
if err == nil && len(lyric) > 0 {
lyricManager.Lyric = lyric[0]
} else {
lyricManager.Lyric = miaosic.ParseLyrics("", "")
log.Errorf("failed to get lyric for %s (%s): %s", data.Media.Info.Title, data.Media.Info.Meta.ID(), err)
}
_ = global.EventBus.Publish(events.UpdateCurrentLyric, events.UpdateCurrentLyricData{
Lyrics: lyricManager.Lyric,
})
})
if err != nil {
log.ErrorW("Subscribe player playing update event failed", "error", err)
}
err = global.EventBus.Subscribe("", events.PlayerPropertyTimePosUpdate, "internal.lyric.update_current", func(event *eventbus.Event) {
time := event.Data.(events.PlayerPropertyTimePosUpdateEvent).TimePos
idx := lyricManager.Lyric.FindIndex(time)
if idx == lyricManager.prevIndex {
return
}
lyricManager.prevIndex = idx
_ = global.EventBus.Publish(
events.PlayerLyricPosUpdate,
events.PlayerLyricPosUpdateEvent{
CurrentIndex: idx,
Time: time,
CurrentLine: lyricManager.Lyric.Find(time),
Total: len(lyricManager.Lyric.Content),
})
return
})
if err != nil {
log.ErrorW("Subscribe player time position update event failed", "error", err)
}
err = global.EventBus.Subscribe("", events.CmdGetCurrentLyric, "internal.lyric.request", func(event *eventbus.Event) {
_ = global.EventBus.Reply(event, events.UpdateCurrentLyric, events.UpdateCurrentLyricData{
Lyrics: lyricManager.Lyric,
})
})
if err != nil {
log.ErrorW("Subscribe player lyric request command event failed", "error", err)
}
}