Rewrite lobby page to use class semantics, add more gamedetails labels, improve performance using batch processing and caching and gain possibility for game creation/player-join/leave events, refs #5387.
Game selection details features:
- Display victory conditions following their sending but missing display following rP14098, refs rP19642.
- Display the host of the match and the game name in the selected game details following rP19703, refs D1666.
- Display mods if the mods differ (without having to attempt to join the game prior) following rP21301.
Performance features:
- Implement batch message processing in the XmppClient to rebuild GUI objects only once when receiving backlog or returning from a match.
- Implement Game class to cache gamelist, filter and sorting values, as they rarely change but are accessed often.
- Cache sprintf objects.
Security fixes:
- Add escapeText in lobby/ to avoid players breaking the lobby for every participant, supersedes D720, comments by bb.
- Do not hide broadcasted unrecognized chat commands that mods used as leaking private channels, fixes #5615.
Defect fixes:
- Fix XmppClient.cpp storing unused historic message types resulting in memory waste and unintentional replay of for instance disconnect/announcements messages following both rP20070/D819 and rP22855/D2265, refs #3306.
- Fix XmppClient.cpp victoryCondition -> victoryConditions gamesetup.js change from rP21474/D1240.
- Fix leaderboard/profile page cancel hotkey closing the lobby dialog as well and removes cancel hotkey note from lobby_panels.xml from rP20886/D817 since the described issue was fixed by rP22200/D1701.
- Fix lobby playing menu sound in a running game after having closed the lobby dialog following introduction in rP20886/D817.
- Fix GUI on nick change by updating g_Username.
- Update profile panel only with data matching the player requested.
Hack erasure:
- Object semantics make it cheap to add state and cache values, storing literals in properties while removing globals, adding events while decoupling components and gaining moddability.
- Erase comments and translation comments stating that this would be IRC!!, supersedes D1136.
- Introduce Status chat message type to supersede "/special" chat command + "isSpecial" property from rP14098 (formerly g_specialKey rP17360) deluxe hack.
- Introduce System chat message type to supersede system errors disguising as chat from a mock user called "system".
Code cleanups:
- Move code from XML to JS.
- Move size values from JS to XML, especially following rP20886/D817 and rP21003/D1051.
- Rename "user" to "player".
- Fix lobby/ eslint warnings, refs D2261.
- Remove message.nick emptiness check from rP20064/D835, since XEP-0045 dictates that it is non-empty.
- Add translated string for deleted subjects.
- Add TODOs for some evident COList issues, refs #5638.
Differential Revision: https://code.wildfiregames.com/D2412