From 3c8c8f3834b4c2b78535cf57fb0e17e527d232dd Mon Sep 17 00:00:00 2001 From: aynakeya Date: Thu, 6 Nov 2025 01:05:52 +0800 Subject: [PATCH] try move start after gui initialized --- app/main.go | 10 ++----- core/events/miaosic.go | 30 +++++++++++++++++-- internal/source/base.go | 1 + internal/source/login.go | 50 +++++++++++++++++++++++++++++++ plugin/sourcelogin/sourcelogin.go | 1 + 5 files changed, 82 insertions(+), 10 deletions(-) create mode 100644 internal/source/login.go diff --git a/app/main.go b/app/main.go index 9f46975..6275f02 100644 --- a/app/main.go +++ b/app/main.go @@ -17,7 +17,6 @@ import ( "os" "os/signal" "path/filepath" - "time" ) var dev = flag.Bool("dev", false, "dev") @@ -68,19 +67,14 @@ func main() { global.Logger.Info("================Program Start================") global.Logger.Infof("================Current Version: %s================", model.Version(config.Version)) internal.Initialize() - go func() { - // temporary fix for gui not render correctly. - // wait until gui rendered then start event dispatching - time.Sleep(1 * time.Second) - //global.EventManager.Start() - _ = global.EventBus.Start() - }() if *headless || config.Experimental.Headless { quit := make(chan os.Signal) signal.Notify(quit, os.Interrupt) + _ = global.EventBus.Start() <-quit } else { gui.Initialize() + _ = global.EventBus.Start() gctx.Context.Window.ShowAndRun() } global.Logger.Info("closing internal server") diff --git a/core/events/miaosic.go b/core/events/miaosic.go index c34d599..044697e 100644 --- a/core/events/miaosic.go +++ b/core/events/miaosic.go @@ -12,7 +12,7 @@ const ReplyMiaosicGetMediaInfo = "reply.miaosic.getMediaInfo" type ReplyMiaosicGetMediaInfoData struct { Info miaosic.MediaInfo `json:"info"` - Error error + Error error `json:"error"` } const CmdMiaosicGetMediaUrl = "cmd.miaosic.getMediaUrl" @@ -26,5 +26,31 @@ const ReplyMiaosicGetMediaUrl = "reply.miaosic.getMediaUrl" type ReplyMiaosicGetMediaUrlData struct { Urls []miaosic.MediaUrl `json:"urls"` - Error error + Error error `json:"error"` +} + +const CmdMiaosicQrLogin = "cmd.miaosic.qrLogin" + +type CmdMiaosicQrLoginData struct { + Provider string `json:"provider"` +} + +const ReplyMiaosicQrLogin = "reply.miaosic.qrLogin" + +type ReplyMiaosicQrLoginData struct { + Session miaosic.QrLoginSession `json:"session"` + Error error `json:"error"` +} + +const CmdMiaosicQrLoginVerify = "cmd.miaosic.qrLoginVerify" + +type CmdMiaosicQrLoginVerifyData struct { + Session miaosic.QrLoginSession `json:"session"` +} + +const ReplyMiaosicQrLoginVerify = "reply.miaosic.qrLoginVerify" + +type ReplyMiaosicQrLoginVerifyData struct { + Result miaosic.QrLoginResult `json:"result"` + Error error `json:"error"` } diff --git a/internal/source/base.go b/internal/source/base.go index 41166ab..cc013c6 100644 --- a/internal/source/base.go +++ b/internal/source/base.go @@ -39,6 +39,7 @@ func Initialize() { handleSearch() handleInfo() createLyricLoader() + handleSourceLogin() _ = global.EventBus.Publish( events.MediaProviderUpdate, events.MediaProviderUpdateEvent{ diff --git a/internal/source/login.go b/internal/source/login.go new file mode 100644 index 0000000..ab965c4 --- /dev/null +++ b/internal/source/login.go @@ -0,0 +1,50 @@ +package source + +import ( + "AynaLivePlayer/core/events" + "AynaLivePlayer/global" + "AynaLivePlayer/pkg/eventbus" + "github.com/AynaLivePlayer/miaosic" +) + +func handleSourceLogin() { + err := global.EventBus.Subscribe("", + events.CmdMiaosicQrLogin, "internal.media_provider.qrlogin_handler", func(event *eventbus.Event) { + data := event.Data.(events.CmdMiaosicQrLoginData) + log.Infof("trying login %s", data.Provider) + pvdr, ok := miaosic.GetProvider(data.Provider) + if !ok { + _ = global.EventBus.Reply( + event, events.ReplyMiaosicQrLogin, + events.ReplyMiaosicQrLoginData{ + Session: miaosic.QrLoginSession{}, + Error: miaosic.ErrorNoSuchProvider, + }) + return + } + result, ok := pvdr.(miaosic.Loginable) + if !ok { + _ = global.EventBus.Reply( + event, events.ReplyMiaosicQrLogin, + events.ReplyMiaosicQrLoginData{ + Session: miaosic.QrLoginSession{}, + Error: miaosic.ErrNotImplemented, + }) + return + } + var session miaosic.QrLoginSession + sess, err := result.QrLogin() + if err == nil && sess != nil { + session = *sess + } + _ = global.EventBus.Reply( + event, events.ReplyMiaosicQrLogin, + events.ReplyMiaosicQrLoginData{ + Session: session, + Error: err, + }) + }) + if err != nil { + log.ErrorW("Subscribe search event failed", "error", err) + } +} diff --git a/plugin/sourcelogin/sourcelogin.go b/plugin/sourcelogin/sourcelogin.go index fb0c86f..53365bd 100644 --- a/plugin/sourcelogin/sourcelogin.go +++ b/plugin/sourcelogin/sourcelogin.go @@ -76,6 +76,7 @@ func (w *SourceLogin) Description() string { return i18n.T("plugin.sourcelogin.description") } +// todo: fix using fyne async update ui func (w *SourceLogin) CreatePanel() fyne.CanvasObject { if w.panel != nil { return w.panel