void UserLoader::parseAnime(const QJsonObject &t_reply) { QJsonObject result = t_reply; auto id = QString::number(result.value("id").toInt()); auto title_language = User::sharedUser()->titleLanguage(); AnimePtr anime = User::sharedUser()->getAnimeByID(id); if (anime == AnimePtr(nullptr)) { anime = Anime::makeAnime(); User::sharedUser()->addKnownAnime(anime); } auto description = result.value("description").toString(); auto airing = result.value("airing").toObject(); anime->setDuration(result.value("duration").toInt()); anime->setDescription(description); anime->setTitleRomaji(result.value("title_romaji").toString()); anime->setTitleJapanese(result.value("title_japanese").toString()); anime->setTitleEnglish(result.value("title_english").toString()); anime->setType(result.value("type").toString()); anime->setAiringStatus(result.value("airing_status").toString()); anime->setAverageScore(result.value("average_score").toString().toDouble()); anime->setTotalEpisodes(result.value("total_episodes").toInt()); anime->setAdult(result.value("adult").toBool()); anime->setTitle(result.value(title_language).toString()); anime->setNextEpisode(airing.value("next_episode").toInt()); anime->setCountdown(airing.value("countdown").toInt()); anime->finishLoad(); qDebug() << "Loaded extra data for anime" << anime->title(); }
AnimePtr AnimeModel::anime(const QModelIndex &index) const { if (index.row() < 0 || index.row() >= m_list.count()) { return AnimePtr(nullptr); } return m_list.at(index.row()); }
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; }