update wshub

This commit is contained in:
aynakeya
2024-04-30 02:01:05 -07:00
parent 95a0a97264
commit 68c7c591ff
6 changed files with 66 additions and 26 deletions

View File

@@ -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": "服务器端口"

View File

@@ -21,6 +21,7 @@ var EventsMapping = map[event.EventId]any{
PlayerPlayErrorUpdate: PlayerPlayErrorUpdateEvent{},
PlayerSeekCmd: PlayerSeekCmdEvent{},
PlayerToggleCmd: PlayerToggleCmdEvent{},
PlayerSetPauseCmd: PlayerSetPauseCmdEvent{},
PlayerPlayNextCmd: PlayerPlayNextCmdEvent{},
PlayerLyricRequestCmd: PlayerLyricRequestCmdEvent{},
PlayerLyricReload: PlayerLyricReloadEvent{},

View File

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

View File

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

View File

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

View File

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