chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
package luaplugin
|
||||
|
||||
import lua "github.com/yuin/gopher-lua"
|
||||
|
||||
// registerPlayerAPI adds the read-only cliamp.player.* table.
|
||||
func registerPlayerAPI(L *lua.LState, cliamp *lua.LTable, state *StateProvider) {
|
||||
tbl := L.NewTable()
|
||||
|
||||
// cliamp.player.state() -> "playing" | "paused" | "stopped"
|
||||
L.SetField(tbl, "state", L.NewFunction(func(L *lua.LState) int {
|
||||
if state.PlayerState != nil {
|
||||
L.Push(lua.LString(state.PlayerState()))
|
||||
} else {
|
||||
L.Push(lua.LString("stopped"))
|
||||
}
|
||||
return 1
|
||||
}))
|
||||
|
||||
// cliamp.player.position() -> number (seconds)
|
||||
L.SetField(tbl, "position", L.NewFunction(func(L *lua.LState) int {
|
||||
if state.Position != nil {
|
||||
L.Push(lua.LNumber(state.Position()))
|
||||
} else {
|
||||
L.Push(lua.LNumber(0))
|
||||
}
|
||||
return 1
|
||||
}))
|
||||
|
||||
// cliamp.player.duration() -> number (seconds)
|
||||
L.SetField(tbl, "duration", L.NewFunction(func(L *lua.LState) int {
|
||||
if state.Duration != nil {
|
||||
L.Push(lua.LNumber(state.Duration()))
|
||||
} else {
|
||||
L.Push(lua.LNumber(0))
|
||||
}
|
||||
return 1
|
||||
}))
|
||||
|
||||
// cliamp.player.volume() -> number (dB)
|
||||
L.SetField(tbl, "volume", L.NewFunction(func(L *lua.LState) int {
|
||||
if state.Volume != nil {
|
||||
L.Push(lua.LNumber(state.Volume()))
|
||||
} else {
|
||||
L.Push(lua.LNumber(0))
|
||||
}
|
||||
return 1
|
||||
}))
|
||||
|
||||
// cliamp.player.speed() -> number (ratio)
|
||||
L.SetField(tbl, "speed", L.NewFunction(func(L *lua.LState) int {
|
||||
if state.Speed != nil {
|
||||
L.Push(lua.LNumber(state.Speed()))
|
||||
} else {
|
||||
L.Push(lua.LNumber(1))
|
||||
}
|
||||
return 1
|
||||
}))
|
||||
|
||||
// cliamp.player.mono() -> boolean
|
||||
L.SetField(tbl, "mono", L.NewFunction(func(L *lua.LState) int {
|
||||
if state.Mono != nil {
|
||||
L.Push(lua.LBool(state.Mono()))
|
||||
} else {
|
||||
L.Push(lua.LFalse)
|
||||
}
|
||||
return 1
|
||||
}))
|
||||
|
||||
// cliamp.player.repeat_mode() -> "off" | "all" | "one"
|
||||
L.SetField(tbl, "repeat_mode", L.NewFunction(func(L *lua.LState) int {
|
||||
if state.RepeatMode != nil {
|
||||
L.Push(lua.LString(state.RepeatMode()))
|
||||
} else {
|
||||
L.Push(lua.LString("off"))
|
||||
}
|
||||
return 1
|
||||
}))
|
||||
|
||||
// cliamp.player.shuffle() -> boolean
|
||||
L.SetField(tbl, "shuffle", L.NewFunction(func(L *lua.LState) int {
|
||||
if state.Shuffle != nil {
|
||||
L.Push(lua.LBool(state.Shuffle()))
|
||||
} else {
|
||||
L.Push(lua.LFalse)
|
||||
}
|
||||
return 1
|
||||
}))
|
||||
|
||||
// cliamp.player.eq_bands() -> table of 10 dB values
|
||||
L.SetField(tbl, "eq_bands", L.NewFunction(func(L *lua.LState) int {
|
||||
t := L.NewTable()
|
||||
if state.EQBands != nil {
|
||||
bands := state.EQBands()
|
||||
for i, b := range bands {
|
||||
t.RawSetInt(i+1, lua.LNumber(b))
|
||||
}
|
||||
}
|
||||
L.Push(t)
|
||||
return 1
|
||||
}))
|
||||
|
||||
L.SetField(cliamp, "player", tbl)
|
||||
}
|
||||
Reference in New Issue
Block a user