mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2025-12-07 19:02:50 +08:00
update wshub
This commit is contained in:
@@ -492,6 +492,10 @@
|
||||
"en": "Websocket Hub Configuration",
|
||||
"zh-CN": "Websocket服务器设置"
|
||||
},
|
||||
"plugin.wshub.local_host_only": {
|
||||
"en": "only allow local host connection",
|
||||
"zh-CN": "只允许本地连接"
|
||||
},
|
||||
"plugin.wshub.port": {
|
||||
"en": "Port",
|
||||
"zh-CN": "服务器端口"
|
||||
|
||||
@@ -21,6 +21,7 @@ var EventsMapping = map[event.EventId]any{
|
||||
PlayerPlayErrorUpdate: PlayerPlayErrorUpdateEvent{},
|
||||
PlayerSeekCmd: PlayerSeekCmdEvent{},
|
||||
PlayerToggleCmd: PlayerToggleCmdEvent{},
|
||||
PlayerSetPauseCmd: PlayerSetPauseCmdEvent{},
|
||||
PlayerPlayNextCmd: PlayerPlayNextCmdEvent{},
|
||||
PlayerLyricRequestCmd: PlayerLyricRequestCmdEvent{},
|
||||
PlayerLyricReload: PlayerLyricReloadEvent{},
|
||||
|
||||
@@ -37,6 +37,12 @@ const PlayerToggleCmd = "cmd.player.op.toggle"
|
||||
type PlayerToggleCmdEvent struct {
|
||||
}
|
||||
|
||||
const PlayerSetPauseCmd = "cmd.player.op.pause"
|
||||
|
||||
type PlayerSetPauseCmdEvent struct {
|
||||
Pause bool
|
||||
}
|
||||
|
||||
const PlayerPlayNextCmd = "cmd.player.op.next"
|
||||
|
||||
type PlayerPlayNextCmdEvent struct {
|
||||
|
||||
@@ -217,6 +217,12 @@ func registerCmdHandler() {
|
||||
})
|
||||
return
|
||||
}
|
||||
global.EventManager.CallA(events.PlayerPropertyTimePosUpdate, events.PlayerPropertyTimePosUpdateEvent{
|
||||
TimePos: 0,
|
||||
})
|
||||
global.EventManager.CallA(events.PlayerPropertyPercentPosUpdate, events.PlayerPropertyPercentPosUpdateEvent{
|
||||
PercentPos: 0,
|
||||
})
|
||||
})
|
||||
global.EventManager.RegisterA(events.PlayerToggleCmd, "player.toggle", func(evnt *event.Event) {
|
||||
property, err := libmpv.GetProperty("pause", mpv.FORMAT_FLAG)
|
||||
@@ -229,6 +235,13 @@ func registerCmdHandler() {
|
||||
log.Warn("[MPV PlayControl] toggle pause failed", err)
|
||||
}
|
||||
})
|
||||
global.EventManager.RegisterA(events.PlayerSetPauseCmd, "player.set_paused", func(evnt *event.Event) {
|
||||
data := evnt.Data.(events.PlayerSetPauseCmdEvent)
|
||||
err := libmpv.SetProperty("pause", mpv.FORMAT_FLAG, data.Pause)
|
||||
if err != nil {
|
||||
log.Warn("[MPV PlayControl] set pause failed", err)
|
||||
}
|
||||
})
|
||||
global.EventManager.RegisterA(events.PlayerSeekCmd, "player.seek", func(evnt *event.Event) {
|
||||
data := evnt.Data.(events.PlayerSeekCmdEvent)
|
||||
log.Debugf("seek to %f (absolute=%t)", data.Position, data.Absolute)
|
||||
|
||||
@@ -34,7 +34,7 @@ func (c *wsClient) start() {
|
||||
c.Close <- 1
|
||||
return
|
||||
}
|
||||
if msgType == websocket.TextMessage {
|
||||
if msgType != websocket.TextMessage {
|
||||
return
|
||||
}
|
||||
var data EventDataReceived
|
||||
@@ -53,23 +53,25 @@ func (c *wsClient) start() {
|
||||
}
|
||||
|
||||
type wsServer struct {
|
||||
Running bool
|
||||
Server *http.Server
|
||||
clients map[*wsClient]bool
|
||||
mux *http.ServeMux
|
||||
lock sync.RWMutex
|
||||
port *int
|
||||
log logger.ILogger
|
||||
Running bool
|
||||
Server *http.Server
|
||||
clients map[*wsClient]bool
|
||||
mux *http.ServeMux
|
||||
lock sync.RWMutex
|
||||
port *int
|
||||
localhostOnly *bool
|
||||
log logger.ILogger
|
||||
}
|
||||
|
||||
func newWsServer(port *int) *wsServer {
|
||||
func newWsServer(port *int, localhostOnly *bool) *wsServer {
|
||||
mux := http.NewServeMux()
|
||||
s := &wsServer{
|
||||
Running: false,
|
||||
clients: make(map[*wsClient]bool),
|
||||
mux: mux,
|
||||
port: port,
|
||||
log: global.Logger.WithPrefix("plugin.wshub.server"),
|
||||
Running: false,
|
||||
clients: make(map[*wsClient]bool),
|
||||
mux: mux,
|
||||
port: port,
|
||||
localhostOnly: localhostOnly,
|
||||
log: global.Logger.WithPrefix("plugin.wshub.server"),
|
||||
}
|
||||
mux.HandleFunc("/wsinfo", s.handleWsInfo)
|
||||
return s
|
||||
@@ -132,8 +134,14 @@ func (s *wsServer) Start() {
|
||||
s.log.Debug("WebInfoServer starting...")
|
||||
s.Running = true
|
||||
go func() {
|
||||
var addr string
|
||||
if *s.localhostOnly {
|
||||
addr = fmt.Sprintf("localhost:%d", *s.port)
|
||||
} else {
|
||||
addr = fmt.Sprintf("0.0.0.0:%d", *s.port)
|
||||
}
|
||||
s.Server = &http.Server{
|
||||
Addr: fmt.Sprintf("localhost:%d", *s.port),
|
||||
Addr: addr,
|
||||
Handler: s.mux,
|
||||
}
|
||||
err := s.Server.ListenAndServe()
|
||||
@@ -161,5 +169,8 @@ func (s *wsServer) Stop() error {
|
||||
}
|
||||
|
||||
func (s *wsServer) getWsUrl() string {
|
||||
return fmt.Sprintf("ws://localhost:%d/wsinfo", *s.port)
|
||||
if *s.localhostOnly {
|
||||
return fmt.Sprintf("ws://localhost:%d/wsinfo", *s.port)
|
||||
}
|
||||
return fmt.Sprintf("ws://0.0.0.0:%d/wsinfo", *s.port)
|
||||
}
|
||||
|
||||
@@ -19,24 +19,26 @@ import (
|
||||
|
||||
type WsHub struct {
|
||||
config.BaseConfig
|
||||
Enabled bool
|
||||
Port int
|
||||
panel fyne.CanvasObject
|
||||
server *wsServer
|
||||
log logger.ILogger
|
||||
Enabled bool
|
||||
Port int
|
||||
LocalHostOnly bool
|
||||
panel fyne.CanvasObject
|
||||
server *wsServer
|
||||
log logger.ILogger
|
||||
}
|
||||
|
||||
func NewWsHub() *WsHub {
|
||||
return &WsHub{
|
||||
Enabled: false,
|
||||
Port: 29629,
|
||||
log: global.Logger.WithPrefix("plugin.wshub"),
|
||||
Enabled: false,
|
||||
Port: 29629,
|
||||
LocalHostOnly: true,
|
||||
log: global.Logger.WithPrefix("plugin.wshub"),
|
||||
}
|
||||
}
|
||||
|
||||
func (w *WsHub) Enable() error {
|
||||
config.LoadConfig(w)
|
||||
w.server = newWsServer(&w.Port)
|
||||
w.server = newWsServer(&w.Port, &w.LocalHostOnly)
|
||||
gui.AddConfigLayout(w)
|
||||
w.registerEvents()
|
||||
w.log.Info("webinfo loaded")
|
||||
@@ -89,6 +91,9 @@ func (w *WsHub) CreatePanel() fyne.CanvasObject {
|
||||
autoStart := container.NewHBox(
|
||||
widget.NewLabel(i18n.T("plugin.wshub.autostart")),
|
||||
component.NewCheckOneWayBinding("", &w.Enabled, w.Enabled))
|
||||
localHostOnly := container.NewHBox(
|
||||
widget.NewLabel(i18n.T("plugin.wshub.local_host_only")),
|
||||
component.NewCheckOneWayBinding("", &w.LocalHostOnly, w.LocalHostOnly))
|
||||
freshStatusText()
|
||||
serverPort := container.NewBorder(nil, nil,
|
||||
widget.NewLabel(i18n.T("plugin.wshub.port")), nil,
|
||||
@@ -152,7 +157,7 @@ func (w *WsHub) CreatePanel() fyne.CanvasObject {
|
||||
widget.NewLabel(i18n.T("plugin.wshub.server_control")),
|
||||
startBtn, stopBtn, restartBtn,
|
||||
)
|
||||
w.panel = container.NewVBox(serverStatus, autoStart, serverPreview, serverPort, ctrlBtns)
|
||||
w.panel = container.NewVBox(serverStatus, autoStart, localHostOnly, serverPreview, serverPort, ctrlBtns)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user