void UserLoader::parseUser(const QJsonObject &t_reply) { QJsonObject result = t_reply; auto id = result.value("id").toInt(); auto display_name = result.value("display_name").toString(); auto anime_time = result.value("anime_time").toInt(); auto adult_content = result.value("adult_content").toBool(); auto list_order = result.value("list_order").toInt(); auto image_url = result.value("image_url_med").toString(); auto title_language = result.value("title_language").toString(); auto score_type = result.value("score_type").toInt(); auto custom = result.value("custom_list_anime").toArray().toVariantList(); auto advanced_rating = result.value("advanced_rating").toBool(); auto names = result.value("advanced_rating_names").toArray().toVariantList(); auto notifications = result.value("notifications").toInt(); User::sharedUser()->setId(id); User::sharedUser()->setDisplayName(display_name); User::sharedUser()->setAnimeTime(anime_time); User::sharedUser()->setAdultContent(adult_content); User::sharedUser()->setListOrder(list_order); User::sharedUser()->setImageUrl(image_url); User::sharedUser()->setTitleLanguage(title_language); User::sharedUser()->setScoreType(score_type); User::sharedUser()->setCustomListNames(custom); User::sharedUser()->setAdvancedRating(advanced_rating); User::sharedUser()->setAdvancedRatingNames(names); User::sharedUser()->setNotifications(notifications); if (!m_local) { m_local = new Local(); connect(m_local, &Local::newAnime, this, [this](const AnimePtr &anime) { connect(anime.get(), &Anime::loadRequested, [anime, this]() { loadAnime(anime->id()); }); }); m_local->loadData(); } emit userLoaded(); }
void BrowseWidget::parseBrowserData(const QString &t_id, QNetworkReply *t_reply) { if (t_id != m_request_id) return; auto title_language = User::sharedUser()->titleLanguage(); QByteArray data = t_reply->readAll(); QJsonArray browse_results = QJsonDocument::fromJson(data).array(); for (int i = 0; i <= browse_results.size(); i++) { QJsonObject anime = browse_results.at(i).toObject(); auto title = anime.value(title_language).toString(); if (title.isEmpty()) { qDebug() << "Unknown title for: " << QJsonDocument(anime).toJson(); continue; } AnimePtr a = User::sharedUser()->getAnimeByTitle(title); if (a == AnimePtr(nullptr)) { a = Anime::makeAnime(); a->setId(QString::number(anime.value("id").toInt())); a->setTitle(title); a->setImageUrl(anime.value("image_url_lge").toString()); a->setTitleRomaji(anime.value("title_romaji").toString()); a->setTitleJapanese(anime.value("title_japanese").toString()); a->setTitleEnglish(anime.value("title_english").toString()); a->setType(anime.value("type").toString()); a->setAiringStatus(anime.value("airing_status").toString()); a->setAverageScore(anime.value("average_score").toString().toDouble()); a->setTotalEpisodes(anime.value("total_episodes").toInt()); a->setAdult(anime.value("adult").toBool()); if (a->id() == "0") { continue; } User::sharedUser()->addKnownAnime(a); } if (a->adult() && !User::sharedUser()->adultContent()) { continue; } BrowseAnime *s = new BrowseAnime(this, User::sharedUser()->scoreType()); if (!a->hasLoaded()) { connect(a.get(), SIGNAL(imageLoaded()), s, SLOT(repaint())); emit loadAnime(a); } s->setAnime(a); m_browse_layout->addWidget(s); m_browse_layout->setGeometry(m_ui->result_area->geometry()); int width = m_browse_layout->geometry().width(); int cwidth = m_browse_layout->contentsWidth(); if (m_browse_layout->heightForWidth(width) > this->geometry().height()) { width -= qApp->style()->pixelMetric(QStyle::PM_ScrollBarExtent); } m_browse_layout->setContentsMargins((width - cwidth) / 2, 0, 0, 0); } m_ui->browse_button->setEnabled(true); }
AnimeIDMap UserLoader::parseList(const QJsonArray &t_list_data) { AnimeIDMap list; auto score_type = User::sharedUser()->scoreType(); auto title_language = User::sharedUser()->titleLanguage(); auto anime_list = User::sharedUser()->animeList(); auto airing_list = User::sharedUser()->airingList(); for (QJsonValue ary : t_list_data) { QJsonObject anime = ary.toObject(); QJsonObject inner_anime = anime.value("anime").toObject(); if (anime.value("anime").isNull()) { auto record_id = anime.value("record_id").toInt(); qWarning() << "Null anime found for record_id:" << record_id; continue; } AnimePtr anime_data = Anime::makeAnime(); connect(anime_data.get(), &Anime::loadRequested, [anime_data, this]() { loadAnime(anime_data->id()); }); anime_data->setId(QString::number(inner_anime.value("id").toInt())); if (User::sharedUser()->getAnimeByID(anime_data->id()) == AnimePtr(nullptr)) { anime_list.append(anime_data); } else { anime_data = User::sharedUser()->getAnimeByID(anime_data->id()); if (!anime_list.contains(anime_data)) { anime_list.append(anime_data); } } anime_data->setTitleRomaji(inner_anime.value("title_romaji").toString()); anime_data->setTitleJapanese( inner_anime.value("title_japanese").toString()); anime_data->setTitleEnglish(inner_anime.value("title_english").toString()); anime_data->setType(inner_anime.value("type").toString()); anime_data->setAiringStatus(inner_anime.value("airing_status").toString()); anime_data->setAverageScore( inner_anime.value("average_score").toString().toDouble()); anime_data->setTotalEpisodes(inner_anime.value("total_episodes").toInt()); anime_data->setAdult(inner_anime.value("adult").toBool()); anime_data->setImageUrl( QUrl(inner_anime.value("image_url_lge").toString())); anime_data->setTitle(inner_anime.value(title_language).toString()); anime_data->setEpisodesWatched(anime.value("episodes_watched").toInt(0)); anime_data->setNotes(anime.value("notes").toString()); anime_data->setRewatched(anime.value("rewatched").toInt(0)); anime_data->setListStatus(anime.value("list_status").toString()); anime_data->setHiddenDefault(anime.value("hidden_default").toInt()); QVariantList v = anime.value("custom_lists").toArray().toVariantList(); QList<int> custom_lists; for (int j = 0; j < v.length(); j++) { custom_lists.append(v.at(j).toInt()); } anime_data->setCustomLists(custom_lists); QJsonArray synonyms = inner_anime.value("synonyms").toArray(); for (int j = 0; j < synonyms.count(); j++) { anime_data->addSynonym(synonyms.at(j).toString()); } if ((score_type == ScoreType::TenPoint) || (score_type == ScoreType::HundredPoint)) { anime_data->setScore(QString::number(anime.value("score").toInt(0))); } else if (score_type == ScoreType::Decimal) { anime_data->setScore(QString::number(anime.value("score").toDouble(0.0))); } else if (score_type == ScoreType::FiveStar) { int scr = anime.value("score").toInt(0); QString my_score = QString::number(scr) + " ★"; anime_data->setScore(my_score); } else { anime_data->setScore(anime.value("score").toString("")); } list.insert(anime_data->id(), anime_data); if (anime_data->airingStatus() == "currently airing") { if (!airing_list.contains(anime_data)) airing_list.append(anime_data); } User::sharedUser()->addKnownAnime(anime_data); } User::sharedUser()->setAnimeList(anime_list); User::sharedUser()->setAiringList(airing_list); return list; }