Skip to main content

romm_api/core/
metadata.rs

1//! ROM metadata search, match, and cache helpers (CLI + TUI).
2
3use crate::client::RommClient;
4use crate::core::cache::{RomCache, RomCacheKey};
5use crate::endpoints::roms::{GetSearchCover, GetSearchRoms, RomUpdateFields};
6use crate::error::ApiError;
7use crate::types::metadata::{SearchCover, SearchRom};
8
9/// Drop cached ROM list rows for one platform after metadata edit.
10pub fn invalidate_platform_rom_cache(platform_id: u64) {
11    let mut c = RomCache::load();
12    c.remove(&RomCacheKey::Platform(platform_id));
13}
14
15/// Multipart fields for applying a search row (mirrors RomM web manual match).
16pub fn search_row_apply_fields(row: &SearchRom) -> RomUpdateFields {
17    RomUpdateFields {
18        name: Some(row.name.clone()),
19        summary: row.summary.clone().filter(|s| !s.is_empty()),
20        url_cover: row.best_url_cover(),
21        match_fields: row.primary_match_fields(),
22    }
23}
24
25/// `GET /api/search/roms` — provider search for manual match.
26pub async fn search_metadata_matches(
27    client: &RommClient,
28    rom_id: u64,
29    search_term: Option<String>,
30    search_by: Option<String>,
31) -> Result<Vec<SearchRom>, ApiError> {
32    client
33        .call(&GetSearchRoms {
34            rom_id,
35            search_term,
36            search_by,
37        })
38        .await
39}
40
41/// `GET /api/search/cover` — SteamGridDB cover search (optional after match).
42pub async fn search_covers(
43    client: &RommClient,
44    search_term: &str,
45) -> Result<Vec<SearchCover>, ApiError> {
46    client
47        .call(&GetSearchCover {
48            search_term: search_term.to_string(),
49        })
50        .await
51}