nako-metadata-scraper 0.1.0-alpha.2

Official Nako metadata scraper Addon Sidecar.
Documentation
use std::collections::HashSet;

use crate::engine::MetadataQuery;

use super::BANGUMI_PROVIDER_ID;

pub(super) const BANGUMI_DETAIL_ENRICHMENT_LIMIT: usize = 3;

pub(super) fn bangumi_query_subject_ids(query: &MetadataQuery) -> impl Iterator<Item = u64> + '_ {
    let mut seen = HashSet::new();
    query
        .external_ids
        .iter()
        .filter(|external_id| {
            external_id
                .provider
                .eq_ignore_ascii_case(BANGUMI_PROVIDER_ID)
                || external_id.provider.eq_ignore_ascii_case("bangumi_id")
                || external_id.provider.eq_ignore_ascii_case("bgm")
                || external_id.provider.eq_ignore_ascii_case("bgm_id")
        })
        .filter_map(|external_id| external_id.value.trim().parse().ok())
        .filter(|subject_id| *subject_id > 0)
        .filter(move |subject_id| seen.insert(*subject_id))
}

pub(super) fn bangumi_air_date_filter(year: Option<i32>) -> Option<[String; 2]> {
    let year = year?;
    if !(1..=9999).contains(&year) {
        return None;
    }
    Some([
        format!(">={year:04}-01-01"),
        format!("<{:04}-01-01", year.saturating_add(1)),
    ])
}