@@ -102,19 +102,29 @@ void ListFetcher::getRandomDemonListLevel(level_pair_t& level, std::string& erro
102102
103103 const auto & jsonResp = resp.unwrap ();
104104
105- if (jsonResp.is_null ())
105+ if (jsonResp.isNull () || !jsonResp. isArray ())
106106 {
107- error = " Pointercrate API returned null. Try again later." ;
107+ error = " Pointercrate API returned null or non-array . Try again later." ;
108108 is_fetching = false ;
109109 return ;
110110 }
111111
112+ const auto array = jsonResp.asArray ().unwrap ();
113+
112114 int randomIndex;
113115 do {
114- randomIndex = rl::utils::randomInt (0 , jsonResp.as_array ().size () - 1 );
115- } while (jsonResp[randomIndex][" level_id" ].is_null ());
116+ randomIndex = rl::utils::randomInt (0 , array.size () - 1 );
117+ } while (array[randomIndex][" level_id" ].isNull ());
118+
119+ int levelId = array[randomIndex].template get <int >(" level_id" ).unwrapOr (-1 );
120+
121+ if (levelId == -1 )
122+ {
123+ error = " Pointercrate API returned non-number 'level_id'. Contact developer to fix this." ;
124+ is_fetching = false ;
125+ return ;
126+ }
116127
117- int levelId = jsonResp[randomIndex].template get <int >(" level_id" );
118128 getLevelInfo (levelId, level, error);
119129 }
120130 else if (e->isCancelled ())
@@ -150,19 +160,29 @@ void ListFetcher::getRandomChallengeListLevel(level_pair_t& level, std::string&
150160
151161 const auto & jsonResp = resp.unwrap ();
152162
153- if (jsonResp.is_null () || !jsonResp.is_array ())
163+ if (jsonResp.isNull () || !jsonResp.isArray ())
154164 {
155- error = " Challenge List API returned null. Try again later." ;
165+ error = " Challenge List API returned null or non-array . Try again later." ;
156166 is_fetching = false ;
157167 return ;
158168 }
159169
170+ const auto & array = jsonResp.asArray ().unwrap ();
171+
160172 int randomIndex;
161173 do {
162- randomIndex = rl::utils::randomInt (0 , jsonResp.as_array ().size () - 1 );
163- } while (jsonResp[randomIndex][" level_id" ].is_null ());
174+ randomIndex = rl::utils::randomInt (0 , array.size () - 1 );
175+ } while (array[randomIndex][" level_id" ].isNull ());
176+
177+ int levelId = array[randomIndex].template get <int >(" level_id" ).unwrapOr (-1 );
178+
179+ if (levelId == -1 )
180+ {
181+ error = " Challenge List API returned non-number 'level_id'. Contact developer to fix this." ;
182+ is_fetching = false ;
183+ return ;
184+ }
164185
165- int levelId = jsonResp[randomIndex].template get <int >(" level_id" );
166186 getLevelInfo (levelId, level, error);
167187 }
168188 else if (e->isCancelled ())
@@ -253,6 +273,8 @@ void ListFetcher::getRandomGDListLevel(int listID, level_pair_t& level, std::str
253273
254274void ListFetcher::getLevelInfo (int levelID, level_pair_t & level, std::string& error)
255275{
276+ is_fetching = true ;
277+
256278 m_listener2.bind ([&](web::WebTask::Event* e) {
257279 if (web::WebResponse* res = e->getValue ())
258280 {
0 commit comments