Exemple #1
0
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();
}
Exemple #2
0
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);
}
Exemple #3
0
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;
}