Ticket #3388: t3388_fix_initial_playerlist_v2.diff

File t3388_fix_initial_playerlist_v2.diff, 3.0 KB (added by elexis, 9 years ago)
  • binaries/data/mods/public/gui/lobby/lobby.js

     
    4141
    4242    var mapTypeFilter = Engine.GetGUIObjectByName("mapTypeFilter");
    4343    mapTypeFilter.list = [translateWithContext("map", "Any")].concat(g_mapTypesText);
    4444    mapTypeFilter.list_data = [""].concat(g_mapTypes);
    4545
     46    // The initial list is loaded on "join-completed".
     47    // This call is only needed to init the list when we return from a match.
     48    updatePlayerList();
     49
    4650    Engine.LobbySetPlayerPresence("available");
    4751    Engine.SendGetGameList();
    4852    Engine.SendGetBoardList();
    49     updatePlayerList();
    5053    updateSubject(Engine.LobbyGetRoomSubject());
    5154
    5255    resetFilters();
    5356}
    5457
     
    762765                    updateLeaderboard();
    763766                    updatePlayerList();
    764767                    // Disable the 'host' button
    765768                    Engine.GetGUIObjectByName("hostButton").enabled = false;
    766769                }
    767                 else if (message.text == "connected")
    768                 {
    769                     Engine.GetGUIObjectByName("hostButton").enabled = true;
    770                 }
     770                // else if (message.text == "connected") // currently we don't attempt to rejoin
    771771                break;
    772772            case "error":
    773773                addChatMessage({ "from": "system", "text": text, "color": "150 0 0" });
    774774                break;
    775775            case "internal":
    776776                switch (message.text)
    777777                {
     778                case "join-completed":
     779                    // We finished downloading the playerlist after connecting
     780                    updatePlayerList();
     781                    break;
    778782                case "gamelist updated":
    779783                    updateGameList();
    780784                    break;
    781785                case "boardlist updated":
    782786                    updateLeaderboard();
  • source/lobby/XmppClient.cpp

     
    801801        DbgXMPP(nick << " left the room");
    802802        m_PlayerMap.erase(nick);
    803803    }
    804804    else
    805805    {
    806         /* During the initialization process, we recieve join messages for everyone
    807          * currently in the room. We don't want to display these, so we filter them
    808          * out. We will always be the last to join during initialization.
    809          */
    810         if (!m_initialLoadComplete)
     806        // Send user join/leave events after we joined
     807        if (m_initialLoadComplete)
    811808        {
    812             if (m_mucRoom->nick().to_string() == nick)
    813                 m_initialLoadComplete = true;
     809            if (m_PlayerMap.find(nick) == m_PlayerMap.end())
     810                CreateSimpleMessage("muc", nick, "join");
     811            else
     812                CreateSimpleMessage("muc", nick, "presence");
     813        }
     814        else if (m_mucRoom->nick().to_string() == nick)
     815        {
     816            m_initialLoadComplete = true;
     817            CreateSimpleMessage("system", "join-completed", "internal");
    814818        }
    815         else if (m_PlayerMap.find(nick) == m_PlayerMap.end())
    816             CreateSimpleMessage("muc", nick, "join");
    817         else
    818             CreateSimpleMessage("muc", nick, "presence");
    819819
    820820        DbgXMPP(nick << " is in the room, presence : " << (int)presenceType);
    821821        m_PlayerMap[nick].resize(3);
    822822        m_PlayerMap[nick][0] = presenceString;
    823823        m_PlayerMap[nick][2] = roleString;