/**
* This class manages the button that enables the player to add or remove buddies.
*/
class BuddyButton
{
constructor(xmppMessages)
{
this.buddyChangedHandlers = new Set();
this.playerName = undefined;
this.toggleBuddyButton = Engine.GetGUIObjectByName("toggleBuddyButton");
this.toggleBuddyButton.onPress = this.onPress.bind(this);
let rebuild = this.rebuild.bind(this);
xmppMessages.registerXmppMessageHandler("system", "connected", rebuild);
xmppMessages.registerXmppMessageHandler("system", "disconnected", rebuild);
this.rebuild();
}
registerBuddyChangeHandler(handler)
{
this.buddyChangedHandlers.add(handler);
}
onPlayerSelectionChange(playerName)
{
this.playerName = playerName;
this.rebuild();
}
rebuild()
{
this.toggleBuddyButton.caption =
g_Buddies.indexOf(this.playerName) != -1 ?
this.UnmarkString :
this.MarkString;
this.toggleBuddyButton.enabled = Engine.IsXmppClientConnected() && !!this.playerName && this.playerName != g_Nickname;
}
/**
* Toggle the buddy state of the selected player.
*/
onPress()
{
if (!this.playerName || this.playerName == g_Nickname || this.playerName.indexOf(g_BuddyListDelimiter) != -1)
return;
let index = g_Buddies.indexOf(this.playerName);
if (index != -1)
g_Buddies.splice(index, 1);
else
g_Buddies.push(this.playerName);
Engine.ConfigDB_CreateAndWriteValueToFile(
"user",
"lobby.buddies",
g_Buddies.filter(nick => nick).join(g_BuddyListDelimiter) || g_BuddyListDelimiter,
"config/user.cfg");
this.rebuild();
for (let handler of this.buddyChangedHandlers)
handler();
}
}
BuddyButton.prototype.MarkString = translate("Mark as Buddy");
BuddyButton.prototype.UnmarkString = translate("Unmark as Buddy");