Some linting fixes for the common package

This commit is contained in:
joeyak 2019-03-13 21:24:14 -04:00
parent 654d321a91
commit 2ef3684c14
5 changed files with 304 additions and 273 deletions

View File

@ -119,7 +119,7 @@ func (cl *Client) Send(s string) {
// Send server message to this client
func (cl *Client) ServerMessage(msg string) {
msg = ParseEmotes(msg)
encoded, err := common.EncodeMessage("", "#ea6260", msg, common.MSG_ERROR)
encoded, err := common.EncodeMessage("", "#ea6260", msg, common.MsgError)
if err != nil {
fmt.Printf("Error encoding server message to %s: %s; Message: %s\n", cl.name, err, msg)
return

View File

@ -9,7 +9,6 @@ import (
"github.com/zorchenhimer/MovieNight/common"
)
var commands *CommandControl
var colorRegex *regexp.Regexp = regexp.MustCompile(`^#[0-9A-Fa-f]{6}$`)
type CommandControl struct {
@ -27,220 +26,216 @@ type CommandFunction func(client *Client, args []string) string
//type HelpFunction func(client *Client) string
func init() {
commands = &CommandControl{
user: map[string]Command{
"me": Command{
HelpText: "Display an action message.",
Function: func(client *Client, args []string) string {
client.Me(strings.Join(args, " "))
return ""
},
},
"help": Command{
HelpText: "This help text.",
Function: cmdHelp,
},
"count": Command{
HelpText: "Display number of users in chat.",
Function: func(client *Client, args []string) string {
return fmt.Sprintf("Users in chat: %d", client.belongsTo.UserCount())
},
},
"color": cmdColor,
"colour": cmdColor,
"w": cmdWhoAmI,
"whoami": cmdWhoAmI,
"auth": Command{
HelpText: "Authenticate to admin",
Function: func(cl *Client, args []string) string {
if cl.IsAdmin {
return "You are already authenticated."
}
pw := html.UnescapeString(strings.Join(args, " "))
if settings.AdminPassword == pw {
cl.IsMod = true
cl.IsAdmin = true
fmt.Printf("[auth] %s used the admin password\n", cl.name)
return "Admin rights granted."
}
if cl.belongsTo.redeemModPass(pw) {
cl.IsMod = true
fmt.Printf("[auth] %s used a mod password\n", cl.name)
return "Moderator privileges granted."
}
fmt.Printf("[auth] %s gave an invalid password\n", cl.name)
return "Invalid password."
},
},
"users": Command{
HelpText: "Show a list of users in chat",
Function: func(cl *Client, args []string) string {
names := cl.belongsTo.GetNames()
return strings.Join(names, " ")
},
var commands = &CommandControl{
user: map[string]Command{
common.CNMe.String(): Command{
HelpText: "Display an action message.",
Function: func(client *Client, args []string) string {
client.Me(strings.Join(args, " "))
return ""
},
},
mod: map[string]Command{
"sv": Command{
HelpText: "Send a server announcement message. It will show up red with a border in chat.",
Function: func(cl *Client, args []string) string {
if len(args) == 0 {
return "Missing message"
}
svmsg := formatLinks(strings.Join(ParseEmotesArray(args), " "))
//cl.belongsTo.AddCmdMsg(fmt.Sprintf(`<div class="announcement">%s</div>`, svmsg))
cl.belongsTo.AddMsg(cl, false, true, svmsg)
return ""
},
},
common.CNHelp.String(): Command{
HelpText: "This help text.",
Function: cmdHelp,
},
"playing": Command{
HelpText: "Set the title text and info link.",
Function: func(cl *Client, args []string) string {
// Clear/hide title if sent with no arguments.
if len(args) == 0 {
cl.belongsTo.ClearPlaying()
return ""
}
link := ""
title := ""
// pickout the link (can be anywhere, as long as there are no spaces).
for _, word := range args {
word = html.UnescapeString(word)
if strings.HasPrefix(word, "http://") || strings.HasPrefix(word, "https://") {
link = word
} else {
title = title + " " + word
}
}
cl.belongsTo.SetPlaying(title, link)
return ""
},
},
"unmod": Command{
HelpText: "Revoke a user's moderator privilages. Moderators can only unmod themselves.",
Function: func(cl *Client, args []string) string {
if len(args) > 0 && !cl.IsAdmin {
return "You can only unmod yourself, not others."
}
if len(args) == 0 {
cl.Unmod()
return "You have unmodded yourself."
}
if err := cl.belongsTo.Unmod(args[0]); err != nil {
return err.Error()
}
return fmt.Sprintf(`%s has been unmodded.`, args[0])
},
},
"kick": Command{
HelpText: "Kick a user from chat.",
Function: func(cl *Client, args []string) string {
if len(args) == 0 {
return "Missing name to kick."
}
return cl.belongsTo.Kick(args[0])
},
},
"ban": Command{
HelpText: "Ban a user from chat. They will not be able to re-join chat, but will still be able to view the stream.",
Function: func(cl *Client, args []string) string {
if len(args) == 0 {
return "missing name to ban."
}
fmt.Printf("[ban] Attempting to ban %s\n", strings.Join(args, ""))
return cl.belongsTo.Ban(args[0])
},
},
"unban": Command{
HelpText: "Remove a ban on a user.",
Function: func(cl *Client, args []string) string {
if len(args) == 0 {
return "missing name to unban."
}
fmt.Printf("[ban] Attempting to unban %s\n", strings.Join(args, ""))
err := settings.RemoveBan(args[0])
if err != nil {
return err.Error()
}
return ""
},
common.CNCount.String(): Command{
HelpText: "Display number of users in chat.",
Function: func(client *Client, args []string) string {
return fmt.Sprintf("Users in chat: %d", client.belongsTo.UserCount())
},
},
admin: map[string]Command{
"mod": Command{
HelpText: "Grant moderator privilages to a user.",
Function: func(cl *Client, args []string) string {
if len(args) == 0 {
return "Missing user to mod."
}
if err := cl.belongsTo.Mod(args[0]); err != nil {
return err.Error()
}
return fmt.Sprintf(`%s has been modded.`, args[0])
},
common.CNColor.String(): cmdColor,
common.CNWhoAmI.String(): cmdWhoAmI,
common.CNAuth.String(): Command{
HelpText: "Authenticate to admin",
Function: func(cl *Client, args []string) string {
if cl.IsAdmin {
return "You are already authenticated."
}
pw := html.UnescapeString(strings.Join(args, " "))
if settings.AdminPassword == pw {
cl.IsMod = true
cl.IsAdmin = true
fmt.Printf("[auth] %s used the admin password\n", cl.name)
return "Admin rights granted."
}
if cl.belongsTo.redeemModPass(pw) {
cl.IsMod = true
fmt.Printf("[auth] %s used a mod password\n", cl.name)
return "Moderator privileges granted."
}
fmt.Printf("[auth] %s gave an invalid password\n", cl.name)
return "Invalid password."
},
"reloadplayer": Command{
HelpText: "Reload the stream player for everybody in chat.",
Function: func(cl *Client, args []string) string {
//cl.belongsTo.AddCmdMsg(`<span class="svmsg">[SERVER] Video player reload forced.</span><script>initPlayer();</script><br />`)
cl.belongsTo.AddCmdMsg(common.CMD_REFRESHPLAYER, nil)
return "Reloading player for all chatters."
},
},
"reloademotes": Command{
HelpText: "Reload the emotes on the server.",
Function: func(cl *Client, args []string) string {
cl.ServerMessage("Reloading emotes")
num, err := LoadEmotes()
if err != nil {
fmt.Printf("Unbale to reload emotes: %s\n", err)
return fmt.Sprintf("ERROR: %s", err)
}
fmt.Printf("Loaded %d emotes\n", num)
return fmt.Sprintf("Emotes loaded: %d", num)
},
},
"modpass": Command{
HelpText: "Generate a single-use mod password.",
Function: func(cl *Client, args []string) string {
password := cl.belongsTo.generateModPass()
return "Single use password: " + password
},
},
//"reloadsettings": func(cl *Client, args []string) string {
// return ""
//},
},
}
common.CNUsers.String(): Command{
HelpText: "Show a list of users in chat",
Function: func(cl *Client, args []string) string {
names := cl.belongsTo.GetNames()
return strings.Join(names, " ")
},
},
},
mod: map[string]Command{
common.CNSv.String(): Command{
HelpText: "Send a server announcement message. It will show up red with a border in chat.",
Function: func(cl *Client, args []string) string {
if len(args) == 0 {
return "Missing message"
}
svmsg := formatLinks(strings.Join(ParseEmotesArray(args), " "))
//cl.belongsTo.AddCmdMsg(fmt.Sprintf(`<div class="announcement">%s</div>`, svmsg))
cl.belongsTo.AddMsg(cl, false, true, svmsg)
return ""
},
},
common.CNPlaying.String(): Command{
HelpText: "Set the title text and info link.",
Function: func(cl *Client, args []string) string {
// Clear/hide title if sent with no arguments.
if len(args) == 0 {
cl.belongsTo.ClearPlaying()
return ""
}
link := ""
title := ""
// pickout the link (can be anywhere, as long as there are no spaces).
for _, word := range args {
word = html.UnescapeString(word)
if strings.HasPrefix(word, "http://") || strings.HasPrefix(word, "https://") {
link = word
} else {
title = title + " " + word
}
}
cl.belongsTo.SetPlaying(title, link)
return ""
},
},
common.CNUnmod.String(): Command{
HelpText: "Revoke a user's moderator privilages. Moderators can only unmod themselves.",
Function: func(cl *Client, args []string) string {
if len(args) > 0 && !cl.IsAdmin {
return "You can only unmod yourself, not others."
}
if len(args) == 0 {
cl.Unmod()
return "You have unmodded yourself."
}
if err := cl.belongsTo.Unmod(args[0]); err != nil {
return err.Error()
}
return fmt.Sprintf(`%s has been unmodded.`, args[0])
},
},
common.CNKick.String(): Command{
HelpText: "Kick a user from chat.",
Function: func(cl *Client, args []string) string {
if len(args) == 0 {
return "Missing name to kick."
}
return cl.belongsTo.Kick(args[0])
},
},
common.CNBan.String(): Command{
HelpText: "Ban a user from chat. They will not be able to re-join chat, but will still be able to view the stream.",
Function: func(cl *Client, args []string) string {
if len(args) == 0 {
return "missing name to ban."
}
fmt.Printf("[ban] Attempting to ban %s\n", strings.Join(args, ""))
return cl.belongsTo.Ban(args[0])
},
},
common.CNUnban.String(): Command{
HelpText: "Remove a ban on a user.",
Function: func(cl *Client, args []string) string {
if len(args) == 0 {
return "missing name to unban."
}
fmt.Printf("[ban] Attempting to unban %s\n", strings.Join(args, ""))
err := settings.RemoveBan(args[0])
if err != nil {
return err.Error()
}
return ""
},
},
},
admin: map[string]Command{
common.CNMod.String(): Command{
HelpText: "Grant moderator privilages to a user.",
Function: func(cl *Client, args []string) string {
if len(args) == 0 {
return "Missing user to mod."
}
if err := cl.belongsTo.Mod(args[0]); err != nil {
return err.Error()
}
return fmt.Sprintf(`%s has been modded.`, args[0])
},
},
common.CNReloadPlayer.String(): Command{
HelpText: "Reload the stream player for everybody in chat.",
Function: func(cl *Client, args []string) string {
//cl.belongsTo.AddCmdMsg(`<span class="svmsg">[SERVER] Video player reload forced.</span><script>initPlayer();</script><br />`)
cl.belongsTo.AddCmdMsg(common.CmdRefreshPlayer, nil)
return "Reloading player for all chatters."
},
},
common.CNReloadEmotes.String(): Command{
HelpText: "Reload the emotes on the server.",
Function: func(cl *Client, args []string) string {
cl.ServerMessage("Reloading emotes")
num, err := LoadEmotes()
if err != nil {
fmt.Printf("Unbale to reload emotes: %s\n", err)
return fmt.Sprintf("ERROR: %s", err)
}
fmt.Printf("Loaded %d emotes\n", num)
return fmt.Sprintf("Emotes loaded: %d", num)
},
},
common.CNModpass.String(): Command{
HelpText: "Generate a single-use mod password.",
Function: func(cl *Client, args []string) string {
password := cl.belongsTo.generateModPass()
return "Single use password: " + password
},
},
//"reloadsettings": func(cl *Client, args []string) string {
// return ""
//},
},
}
func (cc *CommandControl) RunCommand(command string, args []string, sender *Client) string {
@ -289,8 +284,6 @@ func cmdHelp(cl *Client, args []string) string {
return `Opening help in new window.<script>window.open("` + url + `", "_blank", "menubar=0,status=0,toolbar=0,width=300,height=600")</script>`
}
var hlpTemplate = `<dl class="helptext"><dt>%s</dt><dd>%s</dd></dl>`
// Return a full HTML page for the help text. This should probably be rewritten with templates.
func helpPage(ismod, isadmin bool) string {
if commands == nil {
@ -298,20 +291,22 @@ func helpPage(ismod, isadmin bool) string {
}
text := []string{}
for key, cmd := range commands.user {
text = append(text, fmt.Sprintf(hlpTemplate, key, cmd.HelpText))
appendText := func(group map[string]Command) {
for key, cmd := range group {
for _, k := range strings.Split(key, common.CommandNameSeparator) {
text = append(text, fmt.Sprintf(`<dl class="helptext"><dt>%s</dt><dd>%s</dd></dl>`, k, cmd.HelpText))
}
}
}
appendText(commands.user)
if ismod {
for key, cmd := range commands.mod {
text = append(text, fmt.Sprintf(hlpTemplate, key, cmd.HelpText))
}
appendText(commands.mod)
}
if isadmin {
for key, cmd := range commands.mod {
text = append(text, fmt.Sprintf(hlpTemplate, key, cmd.HelpText))
}
appendText(commands.admin)
}
// This is ugly

View File

@ -152,14 +152,14 @@ func (cr *ChatRoom) Join(name, uid string) (*Client, error) {
fmt.Printf("[join] %s %s\n", host, name)
//client.Send(cr.GetPlayingString())
playingCommand, err := common.EncodeCommand(common.CMD_PLAYING, []string{cr.playing, cr.playingLink})
playingCommand, err := common.EncodeCommand(common.CmdPlaying, []string{cr.playing, cr.playingLink})
if err != nil {
fmt.Printf("Unable to encode playing command on join: %s\n", err)
} else {
client.Send(playingCommand)
}
//cr.AddMsg(fmt.Sprintf("<i><b style=\"color:%s\">%s</b> has joined the chat.</i><br />", client.color, name))
cr.AddEventMsg(common.EV_JOIN, name, client.color)
cr.AddEventMsg(common.EvJoin, name, client.color)
return client, nil
}
@ -178,7 +178,7 @@ func (cr *ChatRoom) Leave(name, color string) {
cr.delClient(name)
//cr.AddMsg(fmt.Sprintf("<i><b style=\"color:%s\">%s</b> has left the chat.</i><br />", color, name))
cr.AddEventMsg(common.EV_LEAVE, name, color)
cr.AddEventMsg(common.EvLeave, name, color)
fmt.Printf("[leave] %s %s\n", client.Host(), client.name)
}
@ -206,7 +206,7 @@ func (cr *ChatRoom) Kick(name string) string {
cr.delClient(name)
//cr.AddMsg(fmt.Sprintf("<i><b>%s</b> has been kicked.</i><br />", name))
cr.AddEventMsg(common.EV_KICK, name, color)
cr.AddEventMsg(common.EvKick, name, color)
fmt.Printf("[kick] %s %s has been kicked\n", host, name)
return ""
}
@ -243,24 +243,24 @@ func (cr *ChatRoom) Ban(name string) string {
if err != nil {
fmt.Printf("[BAN] Error banning %q: %s\n", name, err)
//cr.AddMsg(fmt.Sprintf("<i><b>%s</b> has been kicked.</i><br />", name))
cr.AddEventMsg(common.EV_KICK, name, color)
cr.AddEventMsg(common.EvKick, name, color)
} else {
//cr.AddMsg(fmt.Sprintf("<i><b>%s</b> has been banned.</i><br />", name))
cr.AddEventMsg(common.EV_BAN, name, color)
cr.AddEventMsg(common.EvBan, name, color)
}
return ""
}
// Add a chat message from a viewer
func (cr *ChatRoom) AddMsg(from *Client, isAction, isServer bool, msg string) {
t := common.MSG_CHAT
t := common.MsgChat
if isAction {
t = common.MSG_ACTION
t = common.MsgAction
}
if isServer {
t = common.MSG_SERVER
t = common.MsgServer
}
data, err := common.EncodeMessage(
@ -378,14 +378,14 @@ func (cr *ChatRoom) ClearPlaying() {
cr.playing = ""
cr.playingLink = ""
//cr.AddCmdMsg(`<script>setPlaying("","");</script>`)
cr.AddCmdMsg(common.CMD_PLAYING, []string{"", ""})
cr.AddCmdMsg(common.CmdPlaying, []string{"", ""})
}
func (cr *ChatRoom) SetPlaying(title, link string) {
cr.playing = title
cr.playingLink = link
//cr.AddCmdMsg(cr.GetPlayingString())
cr.AddCmdMsg(common.CMD_PLAYING, []string{title, link})
cr.AddCmdMsg(common.CmdPlaying, []string{title, link})
}
//func (cr *ChatRoom) GetPlayingString() string {

View File

@ -7,6 +7,38 @@ import (
"strings"
)
const CommandNameSeparator = ","
type ChatCommandNames []string
func (c ChatCommandNames) String() string {
return strings.Join(c, CommandNameSeparator)
}
// Names for commands
var (
// User Commands
CNMe ChatCommandNames = []string{"me"}
CNHelp ChatCommandNames = []string{"help"}
CNCount ChatCommandNames = []string{"count"}
CNColor ChatCommandNames = []string{"color", "colour"}
CNWhoAmI ChatCommandNames = []string{"w", "whoami"}
CNAuth ChatCommandNames = []string{"auth"}
CNUsers ChatCommandNames = []string{"users"}
// Mod Commands
CNSv ChatCommandNames = []string{"sv"}
CNPlaying ChatCommandNames = []string{"playing"}
CNUnmod ChatCommandNames = []string{"unmod"}
CNKick ChatCommandNames = []string{"kick"}
CNBan ChatCommandNames = []string{"ban"}
CNUnban ChatCommandNames = []string{"unban"}
// Admin Commands
CNMod ChatCommandNames = []string{"mod"}
CNReloadPlayer ChatCommandNames = []string{"reloadplayer"}
CNReloadEmotes ChatCommandNames = []string{"reloademotes"}
CNModpass ChatCommandNames = []string{"modpass"}
)
type ChatData struct {
Type DataType
Data DataInterface
@ -40,29 +72,30 @@ type DataInterface interface {
}
func (dc DataMessage) GetType() DataType {
return DT_CHAT
return DTChat
}
func (de DataError) GetType() DataType {
return DT_ERROR
return DTError
}
func (dc DataCommand) GetType() DataType {
return DT_COMMAND
return DTCommand
}
func (de DataEvent) GetType() DataType {
return DT_EVENT
return DTEvent
}
type DataType int
// Data Types
const (
DT_INVALID DataType = iota
DT_CHAT // chat message
DT_ERROR // something went wrong with the previous request
DT_COMMAND // non-chat function
DT_EVENT // join/leave/kick/ban events
DTInvalid DataType = iota
DTChat // chat message
DTError // something went wrong with the previous request
DTCommand // non-chat function
DTEvent // join/leave/kick/ban events
)
func ParseDataType(token json.Token) (DataType, error) {
@ -70,51 +103,54 @@ func ParseDataType(token json.Token) (DataType, error) {
val, err := strconv.ParseInt(d, 10, 32)
if err != nil {
fmt.Printf("Invalid data type value: %q\n", d)
return DT_INVALID, err
return DTInvalid, err
}
return DataType(val), nil
}
type CommandType int
// Command Types
const (
CMD_PLAYING CommandType = iota
CMD_REFRESHPLAYER
CMD_PURGECHAT
CMD_HELP
CmdPlaying CommandType = iota
CmdRefreshPlayer
CmdPurgeChat
CmdHelp
)
type EventType int
// Event Types
const (
EV_JOIN EventType = iota
EV_LEAVE
EV_KICK
EV_BAN
EV_SERVERMESSAGE
EvJoin EventType = iota
EvLeave
EvKick
EvBan
EvServerMessage
)
type MessageType int
// Message Types
const (
MSG_CHAT MessageType = iota // standard chat
MSG_ACTION // /me command
MSG_SERVER // server message
MSG_ERROR
MsgChat MessageType = iota // standard chat
MsgAction // /me command
MsgServer // server message
MsgError
)
// TODO: Read this HTML from a template somewhere
func (dc DataMessage) HTML() string {
fmt.Printf("message type: %d\n", dc.Type)
switch dc.Type {
case MSG_ACTION:
case MsgAction:
return `<div style="color:` + dc.Color + `"><span class="name">` + dc.From +
`</span> <span class="cmdme">` + dc.Message + `</span></div>`
case MSG_SERVER:
case MsgServer:
return `<div class="announcement">` + dc.Message + `</div>`
case MSG_ERROR:
case MsgError:
return `<div class="error">` + dc.Message + `</div>`
default:
@ -125,16 +161,16 @@ func (dc DataMessage) HTML() string {
func (de DataEvent) HTML() string {
switch de.Event {
case EV_KICK:
case EvKick:
return `<div class="event"><span class="name" style="color:` + de.Color + `">` +
de.User + `</span> has been kicked.</div>`
case EV_LEAVE:
case EvLeave:
return `<div class="event"><span class="name" style="color:` + de.Color + `">` +
de.User + `</span> has left the chat.</div>`
case EV_BAN:
case EvBan:
return `<div class="event"><span class="name" style="color:` + de.Color + `">` +
de.User + `</span> has been banned.</div>`
case EV_JOIN:
case EvJoin:
return `<div class="event"><span class="name" style="color:` + de.Color + `">` +
de.User + `</span> has joined the chat.</div>`
}
@ -151,7 +187,7 @@ func (de DataCommand) HTML() string {
func EncodeMessage(name, color, msg string, msgtype MessageType) (string, error) {
d := ChatData{
Type: DT_CHAT,
Type: DTChat,
Data: DataMessage{
From: name,
Color: color,
@ -165,7 +201,7 @@ func EncodeMessage(name, color, msg string, msgtype MessageType) (string, error)
func EncodeError(message string) (string, error) {
d := ChatData{
Type: DT_ERROR,
Type: DTError,
Data: DataError{Message: message},
}
return jsonifyChatData(d)
@ -173,7 +209,7 @@ func EncodeError(message string) (string, error) {
func EncodeCommand(command CommandType, args []string) (string, error) {
d := ChatData{
Type: DT_COMMAND,
Type: DTCommand,
Data: DataCommand{
Command: command,
Arguments: args,
@ -184,7 +220,7 @@ func EncodeCommand(command CommandType, args []string) (string, error) {
func EncodeEvent(event EventType, name, color string) (string, error) {
d := ChatData{
Type: DT_EVENT,
Type: DTEvent,
Data: DataEvent{
Event: event,
User: name,
@ -231,25 +267,25 @@ func DecodeData(rawjson string) (DataInterface, error) {
} else {
switch DataType(data.Type) {
case DT_CHAT:
case DTChat:
d := DataMessage{}
if err := decoder.Decode(&d); err != nil {
return nil, fmt.Errorf("Unable to decode DataMessage: %s", err)
}
return d, nil
case DT_ERROR:
case DTError:
d := DataError{}
if err := decoder.Decode(&d); err != nil {
return nil, fmt.Errorf("Unable to decode DataError: %s", err)
}
return d, nil
case DT_COMMAND:
case DTCommand:
d := DataCommand{}
if err := decoder.Decode(&d); err != nil {
return nil, fmt.Errorf("Unable to decode DataCommand: %s", err)
}
return d, nil
case DT_EVENT:
case DTEvent:
d := DataEvent{}
if err := decoder.Decode(&d); err != nil {
return nil, fmt.Errorf("Unable to decode DataEvent: %s", err)

View File

@ -15,7 +15,7 @@ func recieve(v []js.Value) {
}
fmt.Printf("Received: %s\n", v[0])
data, err := common.DecodeData(fmt.Sprintf("%s", v[0]))
data, err := common.DecodeData(v[0].String())
if err != nil {
fmt.Printf("Error decoding data: %s\n", err)
js.Call("appendMessages", v)
@ -23,13 +23,13 @@ func recieve(v []js.Value) {
}
switch data.GetType() {
case common.DT_CHAT, common.DT_EVENT, common.DT_ERROR:
case common.DTChat, common.DTError, common.DTEvent:
js.Call("appendMessages", data.HTML())
case common.DT_COMMAND:
case common.DTCommand:
dc := data.(common.DataCommand)
switch dc.Command {
case common.CMD_PLAYING:
case common.CmdPlaying:
if dc.Arguments == nil || len(dc.Arguments) == 0 {
js.Call("setPlaying", "", "")
@ -39,11 +39,11 @@ func recieve(v []js.Value) {
} else if len(dc.Arguments) == 2 {
js.Call("setPlaying", dc.Arguments[0], dc.Arguments[1])
}
case common.CMD_REFRESHPLAYER:
case common.CmdRefreshPlayer:
js.Call("initPlayer", nil)
case common.CMD_PURGECHAT:
case common.CmdPurgeChat:
fmt.Println("//TODO: chat purge command received.")
case common.CMD_HELP:
case common.CmdHelp:
js.Call("appendMesages", data.HTML())
// TODO: open window
//js.Call("")