int User::loadNext() { if (queue.empty()) return 1; if (this->cancel) return 1; QMap<Anime *, bool> data = queue.front(); queue.pop(); Anime *anime = data.keys().first(); bool download_cover = data.values().first(); QString ID = anime->getID(); QUrl ID_URL = API::sharedAPI()->sharedAniListAPI()->API_ANIME(ID); QJsonObject result = API::sharedAPI()->sharedAniListAPI()->get(ID_URL).object(); anime->setCoverURL(QUrl(result.value("image_url_lge").toString())); if (download_cover) { QEventLoop evt; connect(anime, SIGNAL(new_image()), &evt, SLOT(quit())); anime->downloadCover(); evt.exec(); } QString description = result.value("description").toString(); anime->setDuration(result.value("duration").toInt()); anime->setSynopsis(description); anime->setRomajiTitle(result.value("title_romaji").toString()); anime->setJapaneseTitle(result.value("title_japanese").toString()); anime->setEnglishTitle(result.value("title_english").toString()); anime->setType(result.value("type").toString()); anime->setAiringStatus(result.value("airing_status").toString()); anime->setEpisodeCount(result.value("total_episodes").toInt()); anime->setAverageScore(result.value("average_score").toString()); anime->setTitle(result.value(title_language).toString()); if (anime->getAiringStatus() == "currently airing") { QJsonObject airing = result.value("airing").toObject(); anime->setNextEpisode(airing.value("next_episode").toInt()); anime->setCountdown(airing.value("countdown").toInt()); if (anime->getCountdown() > 0) { anime->setAiringSchedule(true); } else { anime->setAiringSchedule(false); } } QJsonArray synonyms = result.value("synonyms").toArray(); for (int j = 0; j < synonyms.count(); j++) { anime->addSynonym(synonyms.at(j).toString()); } anime->finishReload(); qDebug() << "Loaded extra data for anime" << anime->getTitle(); db->saveAnime(anime); if (!queue.empty()) { async_registry.append(QtConcurrent::run([&, this]() { // NOLINT loadNext(); return 1; })); } return 1; }