| 165 | } |
| 166 | |
| 167 | void checkUpdates() { |
| 168 | if (!updateMutex.try_lock()) |
| 169 | return; |
| 170 | DEFER({updateMutex.unlock();}); |
| 171 | |
| 172 | if (settings::token.empty()) |
| 173 | return; |
| 174 | |
| 175 | // Refuse to check for updates while updating plugins |
| 176 | if (isSyncing) |
| 177 | return; |
| 178 | |
| 179 | updateStatus = string::translate("library.queryingUpdates"); |
| 180 | |
| 181 | // Check user token |
| 182 | std::string userUrl = API_URL + "/user"; |
| 183 | json_t* userResJ = network::requestJson(network::METHOD_GET, userUrl, NULL, getTokenCookies()); |
| 184 | if (!userResJ) { |
| 185 | WARN("Request for user account failed"); |
| 186 | updateStatus = string::translate("library.queryAccountFailed"); |
| 187 | return; |
| 188 | } |
| 189 | DEFER({json_decref(userResJ);}); |
| 190 | |
| 191 | json_t* userErrorJ = json_object_get(userResJ, "error"); |
| 192 | if (userErrorJ) { |
| 193 | std::string userError = json_string_value(userErrorJ); |
| 194 | WARN("Request for user account error: %s", userError.c_str()); |
| 195 | // Unset token |
| 196 | settings::token = ""; |
| 197 | refreshRequested = true; |
| 198 | return; |
| 199 | } |
| 200 | |
| 201 | // Get library manifests |
| 202 | std::string manifestsUrl = API_URL + "/library/manifests"; |
| 203 | json_t* manifestsReq = json_object(); |
| 204 | json_object_set_new(manifestsReq, "version", json_string(APP_VERSION_MAJOR.c_str())); |
| 205 | json_t* manifestsResJ = network::requestJson(network::METHOD_GET, manifestsUrl, manifestsReq); |
| 206 | json_decref(manifestsReq); |
| 207 | if (!manifestsResJ) { |
| 208 | WARN("Request for library manifests failed"); |
| 209 | updateStatus = string::translate("library.queryManifestsFailed"); |
| 210 | return; |
| 211 | } |
| 212 | DEFER({json_decref(manifestsResJ);}); |
| 213 | |
| 214 | // Get user's modules |
| 215 | std::string modulesUrl = API_URL + "/modules"; |
| 216 | json_t* modulesResJ = network::requestJson(network::METHOD_GET, modulesUrl, NULL, getTokenCookies()); |
| 217 | if (!modulesResJ) { |
| 218 | WARN("Request for user's modules failed"); |
| 219 | updateStatus = string::translate("library.queryModulesFailed"); |
| 220 | return; |
| 221 | } |
| 222 | DEFER({json_decref(modulesResJ);}); |
| 223 | |
| 224 | json_t* manifestsJ = json_object_get(manifestsResJ, "manifests"); |
no test coverage detected