From 419388d50354fc772334b10e0468d735e1f35399 Mon Sep 17 00:00:00 2001 From: Cvolton Date: Thu, 8 Aug 2024 17:34:52 +0200 Subject: [PATCH] fix levelbrowserendlayer crash on infinite pages --- src/layers/LevelBrowserEndLayer.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/layers/LevelBrowserEndLayer.cpp b/src/layers/LevelBrowserEndLayer.cpp index 0ecb864..843f63d 100644 --- a/src/layers/LevelBrowserEndLayer.cpp +++ b/src/layers/LevelBrowserEndLayer.cpp @@ -197,14 +197,17 @@ void LevelBrowserEndLayer::updateDisplay(){ m_lastLoad = std::time(nullptr); - auto maximumStr = m_requestsToMax <= 0 ? "" : CCString::createWithFormat(" / %i", m_requestsToMax * 2)->getCString(); + std::string maximumStr = m_requestsToMax <= 0 ? std::string("") : fmt::format(" / {}", m_requestsToMax * 2); int page = 0; if(m_levelBrowserLayer) page = m_levelBrowserLayer->m_searchObject->m_page; if(m_infoLayer) page = m_infoLayer->m_page; + + auto labelString = fmt::format("Minimum: {}\nCurrent: {}\nMaximum: {}\nRequests: {}{}", m_min, page, m_max, ++m_requests, maximumStr); + if(m_min == page) return; m_textLabel->setString( - CCString::createWithFormat("Minimum: %i\nCurrent: %i\nMaximum: %i\nRequests: %i%s", m_min, page, m_max, ++m_requests, maximumStr)->getCString() + labelString.c_str() ); m_textLabel->setScale(1.f); onTimer(0); @@ -226,14 +229,24 @@ void LevelBrowserEndLayer::getOnlineLevels() { CCArray* storedLevels = nullptr; std::string key; + int page = 0; if(m_levelBrowserLayer) { key = m_levelBrowserLayer->m_searchObject->getKey(); + page = m_levelBrowserLayer->m_searchObject->m_page; } else if(m_infoLayer) { key = GLM->getCommentKey(m_infoLayer->getID(), m_infoLayer->m_page, GameManager::sharedState()->getGameVariable("0069"), m_infoLayer->m_mode); + page = m_infoLayer->m_page; } storedLevels = GLM->getStoredOnlineLevels(key.c_str()); + if(page < 0) { + Loader::get()->queueInMainThread([this]{ + onClose(nullptr); + }); + return; + } + if(storedLevels) { m_updateLabel = false; loadLevelsFinished(storedLevels, key.c_str());